Николай Бабаджанян wrote:
> 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 symbol size 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 left trailing, or is there some other way to make this work?

This is safe, and the memory will be freed at the end of the transaction.

Yours,
Laurenz Albe

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to