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

Re: [Libguestfs] [PATCH 4/5] fuse: Fix read for empty files.



On Wed, Nov 18, 2009 at 08:29:18AM +0100, Jim Meyering wrote:
> Richard W.M. Jones wrote:
> > Subject: [PATCH 4/5] fuse: Fix read for empty files.
> >
> > Error handling for the guestfs_pread call was incorrect, which
> > meant that empty files could produce spurious error messages.
> > ---
> >  fuse/guestmount.c |    8 +++++++-
> >  1 files changed, 7 insertions(+), 1 deletions(-)
> >
> > diff --git a/fuse/guestmount.c b/fuse/guestmount.c
> > index 9d16cef..669bf80 100644
> > --- a/fuse/guestmount.c
> > +++ b/fuse/guestmount.c
> > @@ -621,8 +621,14 @@ fg_read (const char *path, char *buf, size_t size, off_t offset,
> >    if (size > limit)
> >      size = limit;
> >
> > +  /* Note the correct error handling here is tricky, because in the
> > +   * case where the call returns a zero-length buffer, it might return
> > +   * NULL.  However it won't adjust rsize along the error path, so we
> > +   * can set rsize to something beforehand and use that as a flag.
> > +   */
> > +  rsize = 1;
> >    r = guestfs_pread (g, path, size, offset, &rsize);
> > -  if (r == NULL)
> > +  if (rsize == 1 && r == NULL)
> >      return error ();
> 
> That change looks fine.
> 
> However, that you (and every guestfs_pread caller) would have to
> endure such contortions suggests that this API is too hard to use.
> Or at least too easy to misuse.
> 
> Maybe it will be used so rarely that it doesn't matter...
> But it's still early in the life of libguestfs, so if you
> think you might want to change it, now is better/easier than later.

It certainly needs to be documented ...

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming blog: http://rwmj.wordpress.com
Fedora now supports 80 OCaml packages (the OPEN alternative to F#)
http://cocan.org/getting_started_with_ocaml_on_red_hat_and_fedora


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