postgres.h MACRO issues

Started by David Busbyalmost 24 years ago2 messagesbugs
Jump to latest
#1David Busby
busby@pnts.com

Elephant Developers,

I've got a bit of an issue with using your macros while building my own C
function for PostgreSQL (btw: C functions are a wayyyy cool feature).
So I'm returning a char(32) from my function and I'm using the text*
structure to work with my data. Here's where I've got trouble.

// Put my 32 bytes into the buffer, this works perfect
memcpy(VARDATA(out_text), pbuf, 32);
// Tell it the buffer size
// I don't like that I've got to add the header size myself
// could/should VARATT_SIZEP handle that for me?
VARATT_SIZEP(out_text) = VARHDRSZ + 32;

// This doesn't work right, but I assumed that it would
// I thought that VARATT_SIZEP would automagically take into
// account the VARHDSZ so I only say "my data size is X"
// not have to say "my data size is X + your header"
// Seems a little odd to me.
VARATT_SIZEP(out_text) = 32

So...I just wanted to share that with you folks, should also mention
that I really apperciate (sp?) the work you've done so far and look
forward to future versions.

Thanks for the cycles
/B

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: David Busby (#1)
Re: postgres.h MACRO issues

David Busby <busby@pnts.com> writes:

// Put my 32 bytes into the buffer, this works perfect
memcpy(VARDATA(out_text), pbuf, 32);
// Tell it the buffer size
// I don't like that I've got to add the header size myself
// could/should VARATT_SIZEP handle that for me?
VARATT_SIZEP(out_text) = VARHDRSZ + 32;

VARATT_SIZEP can't be changed without breaking lots of extant code.
However, there's nothing stopping you from defining your own
convenience macro, along the lines of

#define SET_CHAR_LEN(ptr, len) (VARATT_SIZEP(ptr) = (len) + VARHDRSZ)

regards, tom lane