I added one more byte to include \0 and its working as expected now. Thanks for your help! Cheers, Adrian On Thu, Oct 27, 2011 at 23:23, Tom Lane <tgl@xxxxxxxxxxxxx> wrote: > Adrian Schreyer <ams214@xxxxxxxxx> writes: >> The data type I have is > >> typedef struct { >> int4 length; >> uint32 foo; >> char bar[1]; >> } oefp; > > Seems reasonable enough. > >> mydatatype *dt = (mydatatype*) palloc(VARHDRSZ + sizeof(uint32) + >> strlen(buffer)); > >> SET_VARSIZE(dt, VARHDRSZ + sizeof(uint32) + strlen(buffer)); >> memcpy(dt->bar, buffer, strlen(buffer)); >> dt->foo = foo; > > Fine, but keep in mind that what you are creating here is a > non-null-terminated string. > >> The problem is however that dt->bar contains not only the input string >> but random characters or other garbage as well, so something must go >> wrong at the end of the function. Any thoughts what it could be? > > It sounds to me like you are inspecting dt->bar with something that > expects to see a null-terminated string. You could either fix your > inspection code, or expend one more byte to make the string be > null-terminated as stored. > > regards, tom lane > -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general