[libvirt] [PATCH v2 5/6] storage: add support for creating qcow3 images
Daniel P. Berrange
berrange at redhat.com
Tue Feb 5 17:14:30 UTC 2013
On Tue, Feb 05, 2013 at 12:56:16PM +0100, Ján Tomko wrote:
> diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
> index f9e604a..e4c586d 100644
> --- a/src/storage/storage_backend.c
> +++ b/src/storage/storage_backend.c
> @@ -654,6 +654,75 @@ cleanup:
> return ret;
> }
>
> +static int virStorageBackendQEMUImgOpts(const char *qemuimg, virBitmapPtr opts)
> +{
> + char *buf = NULL;
> + char *p, *q = NULL, *r;
> + int ret = -1;
> + int val;
> + virCommandPtr cmd = virCommandNewArgList(qemuimg, "create", "-o", "?",
> + "-f", "qcow2", "/dev/null", NULL);
> +
I can understand why you're doing this, but gives me a really bad
feeling. After 5 years we've finally stopped parsing -help from
the QEMU binary...only to start doing the same for qemu-img.
> + virCommandAddEnvString(cmd, "LC_ALL=C");
> + virCommandSetOutputBuffer(cmd, &buf);
> +
> + if (virCommandRun(cmd, NULL) < 0)
> + goto cleanup;
> +
> +
> + q = strchr(buf, '\n');
> + while (q) {
> + p = q + 1;
> + q = strchr(p, '\n');
> + if (STRPREFIX(p, "compat ")) {
> + ret = 1;
> + if (opts)
> + continue;
> + else
> + goto cleanup;
> + }
> + r = strchr(p, ' ');
> + if (!r)
> + goto cleanup;
> + *r = '\0';
> + val = virStorageFileFeaturesQcow3TypeFromString(p);
> + if (val >= 0)
> + ignore_value(virBitmapSetBit(opts, val));
> + }
> +
> + if (ret < 0)
> + ret = 0;
> +
> +cleanup:
> + virCommandFree(cmd);
> + VIR_FREE(buf);
> + return ret;
> +}
IMHO we should just invoke qemu-img with the feature list we have, and
rely on it to report any unsupported features itself, rather than trying
to pre-detect them ourselves.
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