Re: C Extension woes

Поиск
Список
Период
Сортировка
От Tim Hawes
Тема Re: C Extension woes
Дата
Msg-id 48A30D58.6080408@novadine.com
обсуждение исходный текст
Ответ на Re: C Extension woes  (Jan Urbański <j.urbanski@students.mimuw.edu.pl>)
Список pgsql-hackers
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);
> }
>



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Jan Urbański
Дата:
Сообщение: Re: C Extension woes
Следующее
От: Simon Riggs
Дата:
Сообщение: Re: Transaction-controlled robustness for replication