On Fri, Feb 20, 2015 at 03:45:02PM -0700, Jim Fehlig wrote: > Marek Marczykowski-Górecki wrote: > > From: Marek Marczykowski <[email protected]> > > > > Signed-off-by: Marek Marczykowski-Górecki <[email protected]> > > --- > > Changes in v2: > > - rebase on 1.2.12+ > > - multiple devices support > > Changes in v3: > > - reduce code duplication > > > > src/libxl/libxl_conf.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 44 insertions(+) > > > > diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c > > index b873622..c7108b0 100644 > > --- a/src/libxl/libxl_conf.c > > +++ b/src/libxl/libxl_conf.c > > @@ -749,6 +749,50 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, > > libxl_defbool_set(&b_info->u.hvm.vnc.enable, 0); > > libxl_defbool_set(&b_info->u.hvm.sdl.enable, 0); > > > > + if (def->ninputs) { > > + for (i = 0; i < def->ninputs; i++) { > > + if (def->inputs[i]->bus != VIR_DOMAIN_INPUT_BUS_USB) { > > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > > + _("libxenlight supports only USB input")); > > + return -1; > > + } > > + } > > +#ifdef LIBXL_HAVE_BUILDINFO_USBDEVICE_LIST > > + if (VIR_ALLOC_N(b_info->u.hvm.usbdevice_list, def->ninputs+1) > > < 0) > > + return -1; > > +#else > > + if (def->ninputs > 1) { > > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > > + _("libxenlight supports only one input device")); > > + return -1; > > + } > > +#endif > > + for (i = 0; i < def->ninputs; i++) { > > + char **usbdevice; > > > > I'm no C expert, but I think 'char *' is fine, avoiding the subsequent > addressof and dereferencing.
Actually no, because VIR_STRDUP is a macro, which takes address of its
argument. In case of simple 'char *', the result will be placed in
usbdevice instead of original place. IOW the code would behave like this:
char *usbdevice;
usbdevice = b_info->u.hvm.usbdevice_list[i];
(...)
usbdevice = strdup("mouse");
Which of course is not what we want here...
>
> Regards,
> Jim
>
> > +#ifdef LIBXL_HAVE_BUILDINFO_USBDEVICE_LIST
> > + usbdevice = &b_info->u.hvm.usbdevice_list[i];
> > +#else
> > + usbdevice = &b_info->u.hvm.usbdevice;
> > +#endif
> > + switch (def->inputs[i]->type) {
> > + case VIR_DOMAIN_INPUT_TYPE_MOUSE:
> > + VIR_FREE(*usbdevice);
> > + if (VIR_STRDUP(*usbdevice, "mouse") < 0)
> > + return -1;
> > + break;
> > + case VIR_DOMAIN_INPUT_TYPE_TABLET:
> > + VIR_FREE(*usbdevice);
> > + if (VIR_STRDUP(*usbdevice, "tablet") < 0)
> > + return -1;
> > + break;
> > + default:
> > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> > + _("Unknown input device type"));
> > + return -1;
> > + }
> > + }
> > + }
> > +
> > /*
> > * The following comment and calculation were taken directly from
> > * libxenlight's internal function
> > libxl_get_required_shadow_memory():
> >
--
Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
pgpv_wsq7D0JH.pgp
Description: PGP signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
