[libvirt] [PATCH] add compress stream support
Daniel P. Berrange
berrange at redhat.com
Tue Sep 22 15:29:16 UTC 2015
On Tue, Sep 22, 2015 at 02:10:41PM +0000, Vasiliy Tolstov wrote:
> use libarchive for compressed stream support
Can you explain a bit more about how you expect this to be
used ?
> Signed-off-by: Vasiliy Tolstov <v.tolstov at selfip.ru>
> ---
> configure.ac | 11 ++++++--
> include/libvirt/libvirt-stream.h | 6 +++++
> m4/virt-archive.m4 | 26 +++++++++++++++++++
> src/fdstream.c | 47 +++++++++++++++++++++++++++++++++
> src/libvirt-stream.c | 56 +++++++++++++++++++++++++++++++++++++++-
> src/libvirt_public.syms | 7 +++++
> 6 files changed, 150 insertions(+), 3 deletions(-)
> create mode 100644 m4/virt-archive.m4
>
> diff --git a/configure.ac b/configure.ac
> index 03463b0..4018b49 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -250,6 +250,7 @@ LIBVIRT_CHECK_SANLOCK
> LIBVIRT_CHECK_SASL
> LIBVIRT_CHECK_SELINUX
> LIBVIRT_CHECK_SSH2
> +LIBVIRT_CHECK_LIBARCHIVE
This does all the pkg-config checks for libarchive...
> @@ -1603,8 +1604,6 @@ fi
> AC_SUBST([LIBPCAP_CFLAGS])
> AC_SUBST([LIBPCAP_LIBS])
>
> -
> -
Avoid changing unrelated lines please
> dnl
> dnl Checks for the UML driver
> dnl
> @@ -2097,6 +2096,13 @@ AM_CONDITIONAL([WITH_STORAGE_DISK], [test "$with_storage_disk" = "yes"])
> AC_SUBST([LIBPARTED_CFLAGS])
> AC_SUBST([LIBPARTED_LIBS])
>
> +if test "$with_libarchive" = "yes" || test "$with_libarchive" = "check"; then
> + PKG_CHECK_MODULES([LIBARCHIVE], [libarchive >= 3.1.2], [], [LIBARCHIVE_FOUND=no])
> +fi
> +AC_SUBST([LIBARCHIVE_CFLAGS])
> +AC_SUBST([LIBARCHIVE_LIBS])
...this is redundant given LIBVIRT_CHECK_LIBARCHIVE earlier.
> if test "$with_storage_mpath" = "yes" ||
> test "$with_storage_disk" = "yes"; then
> DEVMAPPER_CFLAGS=
> diff --git a/include/libvirt/libvirt-stream.h b/include/libvirt/libvirt-stream.h
> index 831640d..ac48fba 100644
> --- a/include/libvirt/libvirt-stream.h
> +++ b/include/libvirt/libvirt-stream.h
> @@ -35,6 +35,12 @@ typedef enum {
>
> virStreamPtr virStreamNew(virConnectPtr conn,
> unsigned int flags);
> +virStreamPtr virStreamNewLz4(virConnectPtr conn,
> + unsigned int flags);
> +virStreamPtr virStreamNewGzip(virConnectPtr conn,
> + unsigned int flags);
> +virStreamPtr virStreamNewXz(virConnectPtr conn,
> + unsigned int flags);
If we want to expose this in the public API, then we'd really
want an enum for each archive format, so we don't need to keep
adding new APIs for each format.
> diff --git a/src/libvirt-stream.c b/src/libvirt-stream.c
> index c16f586..40702dc 100644
> --- a/src/libvirt-stream.c
> +++ b/src/libvirt-stream.c
> @@ -69,6 +73,56 @@ virStreamNew(virConnectPtr conn,
> return st;
> }
>
> +virStreamPtr
> +virStreamNewLz4(virConnectPtr conn,
> + unsigned int flags)
> +{
> + virStreamPtr st;
> +
> + st = virStreamNew(conn, flags);
> + if (st != NULL) {
> + struct virFDStreamData *fdst = st->privateData;
This is not valid. You can't assume anything about what
st->privateData is pointing to - it can be anything that
a virt driver wants to use. For example with the remote
driver it can point to a virNetClientStreamPtr instead
instead of virFDStreamData.
> + fdst->archive = archive_write_new();
> + archive_write_add_filter(fdst->archive, ARCHIVE_FILTER_LZ4);
> + }
> +
> + return st;
> +}
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list