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(a)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