[libvirt] [PATCH v3 10/31] Introduce virStreamInData

John Ferlan jferlan at redhat.com
Tue May 16 22:00:00 UTC 2017



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 at 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 at redhat.com>

John

[have to stop for the evening, will pick this up again tomorrow]

[...]




More information about the libvir-list mailing list