[libvirt] [PATCHv3 06/10] libxl: add tablet/mouse input device support

Marek Marczykowski-Górecki marmarek at invisiblethingslab.com
Fri Feb 20 23:05:38 UTC 2015


On Fri, Feb 20, 2015 at 03:45:02PM -0700, Jim Fehlig wrote:
> Marek Marczykowski-Górecki wrote:
> > From: Marek Marczykowski <marmarek at invisiblethingslab.com>
> >
> > Signed-off-by: Marek Marczykowski-Górecki <marmarek at 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?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150221/966be05e/attachment-0001.sig>


More information about the libvir-list mailing list