Re: Custom data type in C with one fixed and one variable attribute - Mailing list pgsql-general

From Adrian Schreyer
Subject Re: Custom data type in C with one fixed and one variable attribute
Date
Msg-id CACYduyLShsaq44YD2j+PFKvdCh6++1y2gMV_cpmLBjA96LEUhw@mail.gmail.com
Whole thread Raw
In response to Re: Custom data type in C with one fixed and one variable attribute  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general
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@sss.pgh.pa.us> wrote:
> Adrian Schreyer <ams214@cam.ac.uk> 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
>

pgsql-general by date:

Previous
From: Thom Brown
Date:
Subject: Re: "Named" column default expression
Next
From: Thomas Kellerer
Date:
Subject: Re: "Named" column default expression