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