Creating a Function with C that returns bytea

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

List,
I'm building this function in C that will return a bytea (hopefully) and
cannot get it to return the bytea value. Am I missing something really
simple

My code is similar to this:

#include <necessary files>
bytea *func() {
bytea *x = palloc(36);
// code to load the 36 bytes here
return x;
}

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: David Busby (#1)
Re: Creating a Function with C that returns bytea

David Busby <busby@pnts.com> writes:

My code is similar to this:

#include <necessary files>
bytea *func() {
bytea *x = palloc(36);
// code to load the 36 bytes here
return x;
}

Are you setting the bytea's length word correctly?

regards, tom lane

#3Joe Conway
mail@joeconway.com
In reply to: David Busby (#1)
Re: Creating a Function with C that returns bytea

David Busby wrote:

List,
I'm building this function in C that will return a bytea (hopefully)
and
cannot get it to return the bytea value. Am I missing something really
simple

My code is similar to this:

#include <necessary files>
bytea *func() {
bytea *x = palloc(36);
// code to load the 36 bytes here
return x;
}

To be helpful, we probably need more detail, but you should start with
section "12.5.4. Version-1 Calling Conventions for C-Language Functions" at:
http://www.postgresql.org/idocs/index.php?xfunc-c.html

You want to use "PG_RETURN_BYTEA_P(x)" to return bytea data from a user
function. Look at the "copytext(PG_FUNCTION_ARGS)" for an example of how
to deal with the size header.

HTH,

Joe