[libvirt] [PATCH 04/10] Add support for -device with audio devices
Daniel Veillard
veillard at redhat.com
Thu Dec 17 09:06:22 UTC 2009
On Tue, Dec 15, 2009 at 03:14:44PM +0000, Daniel P. Berrange wrote:
> The current syntax for audio devices is a horrible multiplexed
> arg
>
> -soundhw sb16,pcspk,ac97
>
> The new syntax is
>
> -device sb16
> -device ac97
> ---
> src/qemu/qemu_conf.c | 72 +++++++++++++++++++++++++++++++++++++------------
> 1 files changed, 54 insertions(+), 18 deletions(-)
>
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index 79b7b00..8c44a93 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> @@ -1538,6 +1538,28 @@ qemuBuildHostNetStr(virConnectPtr conn,
> return 0;
> }
>
> +static int
> +qemuBuildSoundDevStr(virConnectPtr conn,
> + virDomainSoundDefPtr sound,
> + char **str)
> +{
> + const char *model = virDomainSoundModelTypeToString(sound->model);
> +
> + if (STREQ(model, "es1370"))
> + model = "ES1370";
> + else if (STREQ(model, "ac97"))
> + model = "AC97";
I'm not sure I understand why those 2 strings need to be upper-cased
> + *str = strdup(model);
> + if (!(*str)) {
> + virReportOOMError(conn);
> + return -1;
> + }
> +
> + return 0;
> +}
> +
> +
> /* This function outputs a -chardev command line option which describes only the
> * host side of the character device */
> static void qemudBuildCommandLineChrDevChardevStr(virDomainChrDefPtr dev,
> @@ -2542,27 +2564,41 @@ int qemudBuildCommandLine(virConnectPtr conn,
>
> /* Add sound hardware */
> if (def->nsounds) {
> - int size = 100;
> - char *modstr;
> - if (VIR_ALLOC_N(modstr, size+1) < 0)
> - goto no_memory;
> + if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) {
> + for (i = 0 ; i < def->nsounds ; i++) {
> + virDomainSoundDefPtr sound = def->sounds[i];
> + char *str = NULL;
>
> - for (i = 0 ; i < def->nsounds && size > 0 ; i++) {
> - virDomainSoundDefPtr sound = def->sounds[i];
> - const char *model = virDomainSoundModelTypeToString(sound->model);
> - if (!model) {
> - VIR_FREE(modstr);
> - qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
> - "%s", _("invalid sound model"));
> - goto error;
> + ADD_ARG_LIT("-device");
> +
> + if (qemuBuildSoundDevStr(conn, sound, &str) < 0)
> + goto error;
> +
> + ADD_ARG(str);
> + }
> + } else {
> + int size = 100;
> + char *modstr;
> + if (VIR_ALLOC_N(modstr, size+1) < 0)
> + goto no_memory;
> +
> + for (i = 0 ; i < def->nsounds && size > 0 ; i++) {
> + virDomainSoundDefPtr sound = def->sounds[i];
> + const char *model = virDomainSoundModelTypeToString(sound->model);
> + if (!model) {
> + VIR_FREE(modstr);
> + qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
> + "%s", _("invalid sound model"));
> + goto error;
> + }
> + strncat(modstr, model, size);
> + size -= strlen(model);
> + if (i < (def->nsounds - 1))
> + strncat(modstr, ",", size--);
> }
> - strncat(modstr, model, size);
> - size -= strlen(model);
> - if (i < (def->nsounds - 1))
> - strncat(modstr, ",", size--);
> + ADD_ARG_LIT("-soundhw");
> + ADD_ARG(modstr);
> }
> - ADD_ARG_LIT("-soundhw");
> - ADD_ARG(modstr);
> }
>
> /* Add watchdog hardware */
ACK, the indentation messed the diff, making it hard to check the old
code was still unchanged, looks fine, new code is way simpler !
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list