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?

Regards,
Nick.


-- 
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