Ok, that worked!
Thank you very much, Jan and others who gave their input.
I did see Tom's input for the VARHDRSZ and tried that, but forgot to add
that again
when I called VARATT_SIZEP
Jan Urbański wrote:
Tim Hawes wrote:
@Jan:
It appears the cstring_to_text function is unique to the latest
PostgreSQL code. I do not have a def for that for PostgreSQL 8.2, and
Oh, I'm sorry, I forgot about that. cstring_to_text has been added
only recently (it's not even it 8.3, silly me).
Datum pl_masterkey(PG_FUNCTION_ARGS)
{
char *e_var = getenv("PGMASTERKEY");
size_t length = e_var != NULL ? strlen(e_var) : 0;
text * mkey = (text *) palloc(length);
VARATT_SIZEP(mkey) = length;
memcpy(VARDATA(mkey), e_var, length);
PG_RETURN_TEXT_P(mkey);
}
You forgot to palloc space for the varlena header. You need an extra
VARHDRSZ bytes for the header, in addition to what is needed for your
data.
Try something like this:
Datum
pl_masterkey(PG_FUNCTION_ARGS)
{
char *e_var;
size_t length;
text *mkey;
e_var = getenv("PGMASTERKEY");
length = e_var ? strlen(e_var) : 0;
mkey = (text *) palloc(VARHDRSZ + length);
VARATT_SIZEP(mkey) = VARHDRSZ + length;
memcpy(VARDATA(mkey), e_var, length);
PG_RETURN_TEXT_P(mkey);
}
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers