C Function Problem for bytea output

Started by vishal saberwalover 20 years ago3 messagesgeneral
Jump to latest
#1vishal saberwal
vishalsaberwal@gmail.com

hi all,

I am trying to read a file from the File System.
The function compiles fine, the function is created fine in postgres but the
output is NULL/BLANK.
The file does exists and has chmod 777 permission.

PG_FUNCTION_INFO_V1(file_export);

Datum file_export(PG_FUNCTION_ARGS)
{
char *FilePath = PG_GETARG_CSTRING(0);
int32 FileLength = PG_GETARG_INT32(1);
FILE *fptr;
bytea *imdata;
char *rp;

imdata = (bytea *) palloc(FileLength+VARHDRSZ);
VARATT_SIZEP(imdata) = FileLength+VARHDRSZ;
rp = VARDATA(imdata);
if ((fptr = fopen(FilePath, "r")) == NULL)
PG_RETURN_NULL();
while (!feof(fptr))
{
fgets(rp,1024,fptr);
rp+=1024;
}
fclose(fptr);

PG_RETURN_BYTEA_P(imdata);
}

select * from file_export('/ResourceFS/Alarm_Arm.gif',1219);
file_export
-------------

(1 row)

I believe its something in the function but i can't spot the error.

thanks,
vish

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: vishal saberwal (#1)
Re: C Function Problem for bytea output

vishal saberwal <vishalsaberwal@gmail.com> writes:

I believe its something in the function but i can't spot the error.

Well, that sure looks like a NULL result; have you considered the
possibility that the fopen is failing?

BTW, that code will happily clobber memory that doesn't
belong to it if the passed FileLength is wrong.

regards, tom lane

#3vishal saberwal
vishalsaberwal@gmail.com
In reply to: Tom Lane (#2)
Re: C Function Problem for bytea output

thanks tom,

yes it was fopen problem ... the problem was solved when i did chown
postgres ...
i should have seen that ...

thanks,
vish

Show quoted text

On 12/28/05, Tom Lane <tgl@sss.pgh.pa.us> wrote:

vishal saberwal <vishalsaberwal@gmail.com> writes:

I believe its something in the function but i can't spot the error.

Well, that sure looks like a NULL result; have you considered the
possibility that the fopen is failing?

BTW, that code will happily clobber memory that doesn't
belong to it if the passed FileLength is wrong.

regards, tom lane