
On Wed, Feb 06, 2013 at 12:24:50PM +0100, Ján Tomko wrote:
On 02/05/13 18:10, Daniel P. Berrange wrote:
On Tue, Feb 05, 2013 at 12:56:12PM +0100, Ján Tomko wrote:
- switch (imgformat) { - case QEMU_IMG_BACKING_FORMAT_FLAG: - virCommandAddArgList(cmd, "-F", backingType, vol->target.path, - NULL); - virCommandAddArgFormat(cmd, "%lluK", size_arg); + if (imgformat == QEMU_IMG_BACKING_FORMAT_OPTIONS) { + if (do_encryption) + virBufferAddLit(&buf, ",encryption=on");
- if (do_encryption) - virCommandAddArg(cmd, "-e"); - break; + if (!inputvol && vol->backingStore.path) + virBufferAsprintf(&buf, ",backing_fmt=%s", backingType); + else if (preallocate) + virBufferAddLit(&buf, ",preallocation=metadata");
This looks like it would result in "-o ,preallocation=metadata" if the do_encryption arg is false. I don't believe that will work.
Yes, all the options are added with a leading comma...
- case QEMU_IMG_BACKING_FORMAT_OPTIONS: - virCommandAddArg(cmd, "-o"); - virCommandAddArgFormat(cmd, "backing_fmt=%s%s", backingType, - do_encryption ? ",encryption=on" : ""); - virCommandAddArg(cmd, vol->target.path); - virCommandAddArgFormat(cmd, "%lluK", size_arg); - break; + if (virBufferError(&buf) > 0) { + virReportOOMError(); + goto cleanup; + }
- default: - VIR_INFO("Unable to set backing store format for %s with %s", - vol->target.path, create_tool); + if ((options = virBufferContentAndReset(&buf))) + virCommandAddArgList(cmd, "-o", &(options[1]), NULL);
...which is ignored when the options are added to the argument list.
Ewww, this is gross & really obscure. Add the comma at the end, and then use 'virBufferTrim' after the last one, along with a comment indicating why you are doing this. 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 :|