Re: reading reading files from the DB

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux