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 :|