[PATCH libinput 1/2] Hook up libevdev as backend
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.
More information about the wayland-devel