On 05/16/2017 10:03 AM, Michal Privoznik wrote:
This is just an internal API, that calls corresponding function
in stream driver. This function will set @data=1 if the
underlying file is in data section, or @data=0 if it is in a
hole. At any rate, @length is set to number of bytes remaining in
the section the file currently is.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/driver-stream.h | 6 ++++++
src/libvirt-stream.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
src/libvirt_internal.h | 4 ++++
src/libvirt_private.syms | 1 +
4 files changed, 59 insertions(+)
[...]
diff --git a/src/libvirt-stream.c b/src/libvirt-stream.c
index 4cbe5eee1..30c305035 100644
--- a/src/libvirt-stream.c
+++ b/src/libvirt-stream.c
@@ -481,6 +481,54 @@ virStreamRecvHole(virStreamPtr stream,
}
+/**
+ * virStreamInData:
+ * @stream: stream
+ * @data: are we in data or hole
+ * @length: length to next section
+ *
+ * This function checks the underlying stream (typically a file)
+ * to learn whether the current stream position lies within a
+ * data section or a hole. Upon return @data is set to a nonzero
+ * value if former is the case, or to zero if @stream is in a
+ * hole. Moreover, @length is updated to tell caller how many
+ * bytes can be read from @stream until current section changes
+ * (from data to a hole or vice versa).
+ *
+ * NB: there's an implicit hole at EOF. In this situation this
+ * function should set @data = false, @length = 0 and return 0.
+ *
+ * To sum it up:
+ *
+ * data section: @data = true, @length > 0
+ * hole: @data = false, @length > 0
+ * EOF: @data = false, @length = 0
+ *
+ * Returns 0 on success,
+ * -1 otherwise
+ */
+int
+virStreamInData(virStreamPtr stream,
+ int *data,
+ long long *length)
+{
+ VIR_DEBUG("stream=%p, data=%p, length=%p", stream, data, length);
+
+ /* No checks of arguments or error resetting. This is an
+ * internal function that just happen to live next to some
+ * public functions of ours. */
Well... If it's publicly accessible... @data and @length should probably
be checked for non NULL.
I looked at a couple of other "libvirt_internal.h" functions and they
have some parameter checking.
I'll put the R-b on anyway, I would suggest adding parameter checks for
non null values though. It'd be stupid user death fairly quickly
otherwise...
Reviewed-by: John Ferlan <jferlan(a)redhat.com>
John
[have to stop for the evening, will pick this up again tomorrow]
[...]