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@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list