I didn't find an easy way to convert ucs-2 bytea to utf-8, so I decided to write a C-function. Since ucs-2 is has fixed
symbolsize of 2 bytes the output bytea size may differ.
I do the following:
bytea *result= (bytea *) palloc0(VARSIZE(in_bytea)); // allocating memory for the result
SET_VARSIZE(result, VARSIZE_ANY(in_bytea));
... // some calculations resulting in `result` having some trailing 0-s (since palloc0 was used). We don't need
those,so:
SET_VARSIZE(result, new_varsize_result+VARHDRSZ); // new_varsize_result was calculated during the convertion
PG_RETURN_BYTEA_P(result);
The question is am I leaking memory by doing this, and if I am, should I use pfree() manually on each address that is
lefttrailing, or is there some other way to make this work?
Regards,
Nick.