From 65510965b3475dd80bdbf042992298451dc2b67b Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Wed, 1 Sep 2010 11:54:15 +0100 Subject: Add progress messages to download command. --- daemon/upload.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'daemon') diff --git a/daemon/upload.c b/daemon/upload.c index 9a6c8731..604e7054 100644 --- a/daemon/upload.c +++ b/daemon/upload.c @@ -20,8 +20,12 @@ #include #include +#include #include #include +#include +#include +#include #include "../src/guestfs_protocol.h" #include "daemon.h" @@ -98,6 +102,26 @@ do_download (const char *filename) return -1; } + /* Calculate the size of the file or device for notification messages. */ + uint64_t total, sent = 0; + if (!is_dev) { + struct stat statbuf; + if (fstat (fd, &statbuf) == -1) { + reply_with_perror ("%s", filename); + close (fd); + return -1; + } + total = statbuf.st_size; + } else { + int64_t size = do_blockdev_getsize64 (filename); + if (size == -1) { + /* do_blockdev_getsize64 has already sent a reply. */ + close (fd); + return -1; + } + total = (uint64_t) size; + } + /* Now we must send the reply message, before the file contents. After * this there is no opportunity in the protocol to send any error * message back. Instead we can only cancel the transfer. @@ -109,6 +133,9 @@ do_download (const char *filename) close (fd); return -1; } + + sent += r; + notify_progress (sent, total); } if (r == -1) { -- cgit