[libvirt] [PATCH v2 1/6] storage: refactor qemu-img command line generation
Daniel P. Berrange
berrange at redhat.com
Wed Feb 6 11:27:33 UTC 2013
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 :|
More information about the libvir-list
mailing list