[libvirt] [libvirt-perl][PATCH 2/7] Introduce flags to Stream::recv()

Michal Privoznik mprivozn at redhat.com
Tue May 23 15:05:36 UTC 2017


At the same time register RECV_STOP_AT_HOLE constant.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 Changes                |  2 ++
 Virt.xs                | 13 ++++++++++---
 lib/Sys/Virt/Stream.pm | 20 ++++++++++++++++----
 3 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/Changes b/Changes
index 2e4a99e..b4a493c 100644
--- a/Changes
+++ b/Changes
@@ -4,6 +4,8 @@ Revision history for perl module Sys::Virt
 
  - Add LIST_CAP_MDEV & LIST_CAP_MDEV_TYPES constants
  - Fix send_all() callback helper
+ - Introduce flags to Stream::recv() and
+   register RECV_STOP_AT_HOLE constant
 
 3.3.0 2017-05-08
 
diff --git a/Virt.xs b/Virt.xs
index a041c95..498e711 100644
--- a/Virt.xs
+++ b/Virt.xs
@@ -7874,16 +7874,21 @@ send(st, data, nbytes)
 
 
 int
-recv(st, data, nbytes)
+recv(st, data, nbytes, flags=0)
       virStreamPtr st;
       SV *data;
       size_t nbytes;
+      unsigned int flags;
  PREINIT:
       char *rawdata;
     CODE:
       Newx(rawdata, nbytes, char);
-      if ((RETVAL = virStreamRecv(st, rawdata, nbytes)) < 0 &&
-          RETVAL != -2) {
+      if (flags)
+          RETVAL = virStreamRecvFlags(st, rawdata, nbytes, flags);
+      else
+          RETVAL = virStreamRecv(st, rawdata, nbytes);
+
+      if (RETVAL != -2 && RETVAL != -3) {
           Safefree(rawdata);
           _croak_error();
       }
@@ -9010,6 +9015,8 @@ BOOT:
       REGISTER_CONSTANT(VIR_STREAM_EVENT_ERROR, EVENT_ERROR);
       REGISTER_CONSTANT(VIR_STREAM_EVENT_HANGUP, EVENT_HANGUP);
 
+      REGISTER_CONSTANT(VIR_STREAM_RECV_STOP_AT_HOLE, RECV_STOP_AT_HOLE);
+
 
 
       stash = gv_stashpv( "Sys::Virt::Error", TRUE );
diff --git a/lib/Sys/Virt/Stream.pm b/lib/Sys/Virt/Stream.pm
index 4022c84..069895e 100644
--- a/lib/Sys/Virt/Stream.pm
+++ b/lib/Sys/Virt/Stream.pm
@@ -69,11 +69,23 @@ be called on any stream which has been activated
 Complete I/O on the stream. Either this function or C<abort> must
 be called on any stream which has been activated
 
-=item $rv = $st->recv($data, $nbytes)
+=item $rv = $st->recv($data, $nbytes, $flags=0)
 
-Receive upto C<$nbytes> worth of data, copying into C<$data>.
-Returns the number of bytes read, or -2 if I/O would block,
-or -1 on error.
+Receive up to C<$nbytes> worth of data, copying into C<$data>.
+Returns the number of bytes read, or -3 if hole is reached and
+C<$flags> contains RECV_STOP_AT_HOLE, or -2 if I/O would block,
+or -1 on error. The C<$flags> parameter accepts the following
+flags:
+
+=over 4
+
+=item Sys::Virt::Stream::RECV_STOP_AT_HOLE
+
+If this flag is set, the C<recv> function will stop reading from
+stream if it has reached a hole. In that case, -3 is returned and
+C<recvHole> should be called to get the hole size.
+
+=back
 
 =item $rv = $st->send($data, $nbytes)
 
-- 
2.13.0




More information about the libvir-list mailing list