On Thu, Apr 06, 2017 at 11:41:01PM +0300, Matteo Cafasso wrote: > Allows other modules to use the same logic for uploading files. > > Signed-off-by: Matteo Cafasso <noxda...@gmail.com> > --- > daemon/daemon.h | 3 +++ > daemon/upload.c | 70 > ++++++++++++++++++++++++++++++++------------------------- > 2 files changed, 42 insertions(+), 31 deletions(-) > > diff --git a/daemon/daemon.h b/daemon/daemon.h > index abec087cd..797ec2dd9 100644 > --- a/daemon/daemon.h > +++ b/daemon/daemon.h > @@ -259,6 +259,9 @@ extern int64_t ntfs_minimum_size (const char *device); > extern int swap_set_uuid (const char *device, const char *uuid); > extern int swap_set_label (const char *device, const char *label); > > +/*-- in upload.c --*/ > +extern int upload_to_fd (int fd); > + > /* ordinary daemon functions use these to indicate errors > * NB: you don't need to prefix the string with the current command, > * it is added automatically by the client-side RPC stubs. > diff --git a/daemon/upload.c b/daemon/upload.c > index 655baf29d..144bb246c 100644 > --- a/daemon/upload.c > +++ b/daemon/upload.c > @@ -54,60 +54,68 @@ write_cb (void *data_vp, const void *buf, size_t len) > return 0; > } > > +int > +upload_to_fd (int fd) > +{ > + int ret = 0, err = 0;
Let's use 'r' instead of 'ret', since it's the same as what the previous code used and you're not actually returning 'ret'. > + struct write_cb_data data = { .fd = fd, .written = 0 }; > + > + ret = receive_file (write_cb, &data); > + if (ret == -1) { /* write error */ > + err = errno; > + ret = cancel_receive (); > + errno = err; > + reply_with_error ("write error"); Compared to the old code: > - reply_with_error ("write error: %s", filename); this loses the filename from the error message. Pass the file name to upload_to_fd to avoid losing information. ... > - r = cancel_receive (); > + cancel_receive (); > errno = err; > reply_with_perror ("%s", filename); > return -1; and > err = errno; > - r = cancel_receive (); > + cancel_receive (); > errno = err; > reply_with_perror ("lseek: %s", filename); > return -1; These changes are a separate bug, so they should be in a separate commit. More importantly than that, you should use ignore_value (...) around cancel_receive, else Coverity will complain that the result is not used. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into KVM guests. http://libguestfs.org/virt-v2v _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://www.redhat.com/mailman/listinfo/libguestfs