[libvirt] [PATCH 1/2] QEmu: support disk filenames with comma
Eric Blake
eblake at redhat.com
Sat Mar 10 00:34:58 UTC 2012
On 03/09/2012 12:13 PM, Crístian Viana wrote:
> If there is a disk file with a comma in the name, QEmu expects a double
> comma instead of a single one (e.g., the file "virtual,disk.img" needs
> to be specified as "virtual,,disk.img" in QEmu's command line). This
> patch fixes libvirt to work with that feature. Fix RHBZ #801036.
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index de2d4a1..685a278 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -1628,6 +1628,48 @@ qemuSafeSerialParamValue(const char *value)
> return 0;
> }
>
> +static const char *
Use 'char *', not 'const char *', when returning a malloc'd string; that
gives the caller a hint that they should free what they are receiving.
> +qemuEscapeCommas(const char *name)
> +{
> + const char *name_ptr = name;
> + char *escaped_name, *escaped_name_ptr;
> + size_t escaped_name_max_size = (strlen(name) * 2) + 1;
Technically, this could overflow. Copying from virBufferEscape() in
buf.c shows that we can use xalloc_oversized to avoid this (admittedly
unlikely) scenario.
> +
> + /* Reduce the string memory size to its current length. */
> + VIR_SHRINK_N(escaped_name, escaped_name_max_size,
> + strlen(escaped_name) - strlen(name));
Indentation.
That's a lot of calls to strlen(name); it's nicer to cache it up front.
> +
> + return escaped_name;
> +}
> +
> static int
> qemuBuildRBDString(virConnectPtr conn,
> virDomainDiskDefPtr disk,
> @@ -1638,7 +1680,7 @@ qemuBuildRBDString(virConnectPtr conn,
> char *secret = NULL;
> size_t secret_size;
>
> - virBufferAsprintf(opt, "rbd:%s", disk->src);
> + virBufferAsprintf(opt, "rbd:%s", qemuEscapeCommas(disk->src));
Memory leak. Not good.
Oooh - we're printing to a virBuffer, and we already have
virBufferEscape which _almost_ does what we want - it's just that we
want to escape with ',' instead of '\\'. I think I have a more
efficient solution coming on :)
> @@ -2134,7 +2176,6 @@ error:
> return NULL;
> }
>
> -
> char *
Spurious whitespace change.
You also need a testsuite addition to ensure that this actually does
what we want. And in fact, it didn't - we need to enhance the RNG to
allow commas in file names to validate, and we need to fix the
domxml-from-native routine after all.
If I were to keep the patch authorship in your name, I would squash 2/2
into this one (otherwise, 'make syntax-check' will fail during a 'git
bisect' that settles on 1/2 in isolation). But since I practically
rewrote the thing, I will instead post a v2 with myself as author but
mentioning your name in the commit message. Stay tuned...
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120309/41b4c032/attachment-0001.sig>
More information about the libvir-list
mailing list