Thread: C Function Problem for bytea output
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
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
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
thanks tom,
yes it was fopen problem ... the problem was solved when i did chown postgres ...
i should have seen that ...
thanks,
vish
yes it was fopen problem ... the problem was solved when i did chown postgres ...
i should have seen that ...
thanks,
vish
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