Wednesday, August 13, 2008

[HACKERS] C Extension woes

Hello all,

I am trying to write an extension in C that returns a simple environment
variable. The code compiles without any complaint or warning, and it
loads fine into the database, however, when I run the function, I get
disconnected from the server.

Here is my C code:

#include <postgres.h>
#include <fmgr.h>
PG_MODULE_MAGIC;

#include <stdio.h>
#include <stdlib.h>

PG_FUNCTION_INFO_V1(pl_masterkey);

text * pl_masterkey(PG_FUNCTION_ARGS)
{
char *e_var = getenv("PGMASTERKEY");
size_t length = VARSIZE(e_var) - VARHDRSZ;

text * mkey = (text *) palloc(length);
VARATT_SIZEP(mkey) = length;
memcpy(VARDATA(mkey), e_var, length);

return mkey;
}

And here is the SQL I use to create the function in PostgreSQL:

CREATE FUNCTION pl_masterkey() RETURNS text
AS 'pl_masterkey', 'pl_masterkey'
LANGUAGE C STRICT;

And the results:

select pl_masterkey();
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
!>

Thanks ahead of time for any and all help.


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

No comments: