On Tue, Mar 22, 2011 at 16:07, Merlin Moncure <mmoncure@xxxxxxxxx> wrote: > On Tue, Mar 22, 2011 at 8:22 AM, Adrian Schreyer <ams214@xxxxxxxxx> wrote: >> Hi, >> >> I have a weird problem with my custom functions (written in C,C++) >> that use bytea as input type (cstring works fine). The functions will >> work as expected if they are the only function that uses the bytea >> column in a query; as soon as there is a second function using the >> same column, the C function will return one of the following: an empty >> cstring, a substring of the bytea or the correct cstring. Based on >> these symptoms I assume there is something fundamental that I do wrong >> (or that is missing) with handling the bytea pointer. >> >> In one specific example, the bytea contains a binary file format that >> the function converts into a string format. I convert the bytea to a >> C++ string with string(VARDATA(b), VARSIZE(b)-VARHDRSZ). >> >> bytea *b = PG_GETARG_BYTEA_P(0); >> char *ism; >> >> ism = function(b); >> >> PG_RETURN_CSTRING(ism); > > your problem is probably inside 'function' -- are you properly copying > the data out of the bytea struct?. also, are you really sure you want > to be returning cstring type, not text? > > merlin > yes, the function in the C++ toolkit I use takes a std::string as input. So far I have used string(VARDATA(oeb), VARSIZE(oeb)-VARHDRSZ) to convert it. I want to change both input and output to text later on once this is working. I suspect I will get similar problems with pg_getarg_text_p() or any other struct. I think you are right, I am not coping the data out of the struct correctly; all my functions that use VARDATA() have these problems. What would be the proper way? Cheers, Adrian -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general