[Libguestfs] [PATCH v6 1/7] daemon: expose file upload logic
Richard W.M. Jones
rjones at redhat.com
Tue Apr 18 07:53:13 UTC 2017
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 <noxdafox at 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
More information about the Libguestfs
mailing list