[PATCH v3 2/8] virsh: Pass virshStreamCallbackDataPtr to virshStreamSink() and virshStreamSkip()

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

 



These callback will need to know more that the FD they are
working on. Pass the structure that is passed to other stream
callbacks (e.g. virshStreamSource() or virshStreamSourceSkip())
instead of inventing a new one.

Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx>
Reviewed-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 tools/virsh-util.c   | 10 +++++-----
 tools/virsh-volume.c |  6 +++++-
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/tools/virsh-util.c b/tools/virsh-util.c
index 932d6d0849..89f15efd08 100644
--- a/tools/virsh-util.c
+++ b/tools/virsh-util.c
@@ -146,9 +146,9 @@ virshStreamSink(virStreamPtr st G_GNUC_UNUSED,
                 size_t nbytes,
                 void *opaque)
 {
-    int *fd = opaque;
+    virshStreamCallbackDataPtr cbData = opaque;
 
-    return safewrite(*fd, bytes, nbytes);
+    return safewrite(cbData->fd, bytes, nbytes);
 }
 
 
@@ -186,13 +186,13 @@ virshStreamSkip(virStreamPtr st G_GNUC_UNUSED,
                 long long offset,
                 void *opaque)
 {
-    int *fd = opaque;
+    virshStreamCallbackDataPtr cbData = opaque;
     off_t cur;
 
-    if ((cur = lseek(*fd, offset, SEEK_CUR)) == (off_t) -1)
+    if ((cur = lseek(cbData->fd, offset, SEEK_CUR)) == (off_t) -1)
         return -1;
 
-    if (ftruncate(*fd, cur) < 0)
+    if (ftruncate(cbData->fd, cur) < 0)
         return -1;
 
     return 0;
diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
index e04e2db096..d29db6c38d 100644
--- a/tools/virsh-volume.c
+++ b/tools/virsh-volume.c
@@ -790,6 +790,7 @@ cmdVolDownload(vshControl *ctl, const vshCmd *cmd)
     unsigned long long offset = 0, length = 0;
     bool created = false;
     virshControlPtr priv = ctl->privData;
+    virshStreamCallbackData cbData;
     unsigned int flags = 0;
 
     if (vshCommandOptULongLong(ctl, cmd, "offset", &offset) < 0)
@@ -817,6 +818,9 @@ cmdVolDownload(vshControl *ctl, const vshCmd *cmd)
         created = true;
     }
 
+    cbData.ctl = ctl;
+    cbData.fd = fd;
+
     if (!(st = virStreamNew(priv->conn, 0))) {
         vshError(ctl, _("cannot create a new stream"));
         goto cleanup;
@@ -827,7 +831,7 @@ cmdVolDownload(vshControl *ctl, const vshCmd *cmd)
         goto cleanup;
     }
 
-    if (virStreamSparseRecvAll(st, virshStreamSink, virshStreamSkip, &fd) < 0) {
+    if (virStreamSparseRecvAll(st, virshStreamSink, virshStreamSkip, &cbData) < 0) {
         vshError(ctl, _("cannot receive data from volume %s"), name);
         goto cleanup;
     }
-- 
2.26.2




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux