[PATCH libinput 1/2] Hook up libevdev as backend

Peter Hutterer peter.hutterer at who-t.net
Sun Feb 23 16:42:14 PST 2014


On Mon, Feb 24, 2014 at 09:28:49AM +1000, Peter Hutterer wrote:
> On Sat, Feb 22, 2014 at 03:51:57PM +0100, Jonas Ådahl wrote:
> > On Tue, Feb 18, 2014 at 04:09:09PM +1000, Peter Hutterer wrote:
> > > libevdev wraps the various peculiarities of the evdev kernel API into a
> > > type-safe API. It also buffers the device so checking for specific features at
> > > a later time is easier than re-issuing the ioctls. Plus, it gives us almost
> > > free support for SYN_DROPPED events (in the following patch).
> > > 
> > > This patch switches all the bit checks over to libevdev and leaves the event
> > > processing as-is. Makes it easier to review.
> > > 
> > > Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> > 
> > Looks good to me as well, with one comment inline.
> > 
> > Reviewed-by: Jonas Ådahl <jadahl at gmail.com>
> 
> ...
> 
> > > @@ -624,6 +607,10 @@ evdev_device_create(struct libinput_seat *seat,
> > >  
> > >  	libinput_device_init(&device->base, seat);
> > >  
> > > +	rc = libevdev_new_from_fd(fd, &device->evdev);
> > > +	if (rc != 0)
> > > +		return NULL;
> > > +
> > >  	device->seat_caps = 0;
> > >  	device->is_mt = 0;
> > >  	device->mtdev = NULL;
> > > @@ -635,10 +622,7 @@ evdev_device_create(struct libinput_seat *seat,
> > >  	device->dispatch = NULL;
> > >  	device->fd = fd;
> > >  	device->pending_event = EVDEV_NONE;
> > > -
> > > -	ioctl(device->fd, EVIOCGNAME(sizeof(devname)), devname);
> > > -	devname[sizeof(devname) - 1] = '\0';
> > > -	device->devname = strdup(devname);
> > > +	device->devname = libevdev_get_name(device->evdev);
> > 
> > This makes the assumption that the const char * returned by
> > libevdev_get_name() is valid until we destroy the device. Is this
> > guaranteed anywhere by libevdev?
> 
> It's guaranteed by the kernel. There is no facility to set the name through
> the API and there is no facility to notify the caller if the name would
> change. so libevdev (which has a copy, obviuosly) wouldn't know that it
> changed. libevdev_change_fd() doesn't re-sync the name, so yes, this name
> is constant.
 
I should've been more precise here: there is no facility to set the name
through the _kernel_ API. libevdev enables a caller to change the name (and
thus free the string) though I'm strongly inclined to say that's a
caller problem that we don't need to worry about.

I'll add some extra notes to the libevdev documentation here.

Cheers,
   Peter


More information about the wayland-devel mailing list