Re: reading reading files from the DB

Поиск
Список
Период
Сортировка
От Michael Fuhr
Тема Re: reading reading files from the DB
Дата
Msg-id 20051229044734.GA45641@winnie.fuhr.org
обсуждение исходный текст
Ответ на reading reading files from the DB  ("sandhya" <sandhyar@amiindia.co.in>)
Ответы Re: reading reading files from the DB  (Michael Fuhr <mike@fuhr.org>)
Список pgsql-admin
On Wed, Dec 28, 2005 at 04:40:02PM +0530, sandhya wrote:
> I have exported few files into my DB server running on LINUX os.
> I connected to it remotely from windows and through one sample application
> like webserver i am trying to read the contents of it when ever there is a
> request for the specified file.Using the below example code.
>  Is this correct?I am not finding that it is reading it from the database.
> How can i make sure of this.I am unable to open the requested file from win
> application through database.

What are you expecting to happen and what actually does happen?

>  lobj_fd = lo_open(conn, lobjId, INV_READ);
>  if (lobj_fd < 0)
>  {
>  MessageBox(0,"error","Cannot Object Id ",MB_OK);
>  }

Does MessageBox() return control to the program?  If so then you
should return or exit in case of error because there's no point
continuing if lo_open() failed, and calling other lo_* functions
will almost certainly cause problems.  Also, you can use PQerrorMessage()
to get an error message explaining the failure.

>  lo_lseek(conn, lobj_fd, start, SEEK_END);
>  len = lo_tell(conn,lobj_fd);
>  lo_lseek(conn, lobj_fd, start, SEEK_SET);
>  buf =(char*) malloc(len + 1);

A robust program would check these calls for errors.

>  nread = 0;
>  while (len - nread > 0)
>  {
>  nbytes = lo_read(conn, lobj_fd, buf, len - nread);
>  buf[nbytes] = ' ';
>  nread += nbytes;
>  }

I'm not sure the loop is necessary, but if you keep the loop then
you're not handling buf correctly.  As written, each call to lo_read()
will store data at buf, overwriting what was written there before.
And why are you appending a space?  Did you mean to append a NUL
('\0') string-terminating character?  That would make sense only
if you know the large object data can be handled as a string, i.e.,
that it doesn't contain binary data where NUL might be present in
the middle of the data.  And again, a robust program would check
lo_read()'s return value before continuing.

--
Michael Fuhr

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

Предыдущее
От: Bruno Wolff III
Дата:
Сообщение: Re: preventing deadlocks
Следующее
От: "sandhya"
Дата:
Сообщение: Fw: reading reading files from the DB ...pls