[libvirt] [PATCH v2 12/38] Introduce virStreamHoleSize
John Ferlan
jferlan at redhat.com
Thu May 4 21:30:55 UTC 2017
On 04/20/2017 06:01 AM, Michal Privoznik wrote:
> This function is basically a counterpart for virStreamSkip. If
> one side of a stream called virStreamSkip() the other should call
s/should/would need to/
> virStreamHoleSize() to get the size of the hole.
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> include/libvirt/libvirt-stream.h | 3 +++
> src/driver-stream.h | 5 +++++
> src/libvirt-stream.c | 42 ++++++++++++++++++++++++++++++++++++++++
> src/libvirt_public.syms | 1 +
> 4 files changed, 51 insertions(+)
>
Again the naming doesn't necessarily conform to our newer standard, but
that's something I'd expect we've already discussed in patch 11...
Likewise should a @flags argument be added?
> diff --git a/include/libvirt/libvirt-stream.h b/include/libvirt/libvirt-stream.h
> index 4e0a599..2ebda74 100644
> --- a/include/libvirt/libvirt-stream.h
> +++ b/include/libvirt/libvirt-stream.h
> @@ -53,6 +53,9 @@ int virStreamRecvFlags(virStreamPtr st,
> int virStreamSkip(virStreamPtr st,
> unsigned long long length);
>
> +int virStreamHoleSize(virStreamPtr,
> + unsigned long long *length);
> +
>
> /**
> * virStreamSourceFunc:
> diff --git a/src/driver-stream.h b/src/driver-stream.h
> index 20ea13f..e196b6d 100644
> --- a/src/driver-stream.h
> +++ b/src/driver-stream.h
> @@ -46,6 +46,10 @@ typedef int
> unsigned long long length);
>
> typedef int
> +(*virDrvStreamHoleSize)(virStreamPtr st,
> + unsigned long long *length);
> +
> +typedef int
> (*virDrvStreamEventAddCallback)(virStreamPtr stream,
> int events,
> virStreamEventCallback cb,
> @@ -73,6 +77,7 @@ struct _virStreamDriver {
> virDrvStreamRecv streamRecv;
> virDrvStreamRecvFlags streamRecvFlags;
> virDrvStreamSkip streamSkip;
> + virDrvStreamHoleSize streamHoleSize;
> virDrvStreamEventAddCallback streamEventAddCallback;
> virDrvStreamEventUpdateCallback streamEventUpdateCallback;
> virDrvStreamEventRemoveCallback streamEventRemoveCallback;
> diff --git a/src/libvirt-stream.c b/src/libvirt-stream.c
> index 55f3ef5..3ac9e0d 100644
> --- a/src/libvirt-stream.c
> +++ b/src/libvirt-stream.c
> @@ -403,6 +403,48 @@ virStreamSkip(virStreamPtr stream,
>
>
> /**
> + * virStreamHoleSize:
> + * @stream: pointer to the stream object
> + * @length: number of bytes to skip
> + *
> + * This function is a counterpart to virStreamSkip(). That is, if
> + * one side of a stream has called virStreamSkip() the other side
> + * of the stream should call virStreamHoleSize() to retrieve the
> + * size of hole. If there's currently no hole in the stream, -1
> + * is returned.
Hmmm.. this last sentence belongs in the "Returns" space.
Consider
This API is used to determine the @length in bytes of the empty space to
be created in a @stream's target file when uploading or downloading
sparsely populated files. This is the counterpart to virStream....().
> + *
> + * Returns 0 on success,
> + * -1 on error
s/on error/on error or when there's currently no hole in the stream
Again, similar to last patch - ACK after the API naming discussion...
John
> + */
> +int
> +virStreamHoleSize(virStreamPtr stream,
> + unsigned long long *length)
> +{
> + VIR_DEBUG("stream=%p, length=%p", stream, length);
> +
> + virResetLastError();
> +
> + virCheckStreamReturn(stream, -1);
> + virCheckNonNullArgReturn(length, -1);
> +
> + if (stream->driver &&
> + stream->driver->streamHoleSize) {
> + int ret;
> + ret = (stream->driver->streamHoleSize)(stream, length);
> + if (ret < 0)
> + goto error;
> + return ret;
> + }
> +
> + virReportUnsupportedError();
> +
> + error:
> + virDispatchError(stream->conn);
> + return -1;
> +}
> +
> +
> +/**
> * virStreamSendAll:
> * @stream: pointer to the stream object
> * @handler: source callback for reading data from application
> diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
> index acadda8..0e34eee 100644
> --- a/src/libvirt_public.syms
> +++ b/src/libvirt_public.syms
> @@ -761,6 +761,7 @@ LIBVIRT_3.1.0 {
>
> LIBVIRT_3.3.0 {
> global:
> + virStreamHoleSize;
> virStreamRecvFlags;
> virStreamSkip;
> } LIBVIRT_3.1.0;
>
More information about the libvir-list
mailing list