On Fri, Feb 20, 2015 at 03:45:02PM -0700, Jim Fehlig wrote:
Marek Marczykowski-Górecki wrote:
> From: Marek Marczykowski <marmarek(a)invisiblethingslab.com>
>
> Signed-off-by: Marek Marczykowski-Górecki <marmarek(a)invisiblethingslab.com>
> ---
> 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?