[PATCH evemu 1/2] tools: evemu-device: rely on libevdev to retrieve the device node

Peter Hutterer peter.hutterer at who-t.net
Thu Jan 9 15:46:15 PST 2014


On Thu, Jan 09, 2014 at 06:26:47PM -0500, Benjamin Tissoires wrote:
> 
> 
> On 09/01/14 18:21, Peter Hutterer wrote:
> > I'd rather not make the evemu API explicitly dependent on a libevdev ABI
> > decision. this needs to be either documented (e.g. evemu_create() for an fd
> > < 0 opens it automatically) and handled in evemu_create directly or we add a
> > new call for evemu_create_managed() that handles everything. I'd go for the
> > latter.
> > 
> 
> Right, I was not very happy of having to add the libevdev dependency either.
> 
> so, here is another attempt (I'm on fire!):
> 
> From: Benjamin Tissoires <benjamin.tissoires at gmail.com>
> Date: Thu, 9 Jan 2014 18:22:56 -0500
> Subject: [PATCH evemu] tools: device: rely on libevdev to open the uinput node
> 
> libevdev can take care of the uinput node, I am glad to remove this part.
> 
> Signed-off-by: Benjamin Tissoires <benjamin.tissoires at gmail.com>
> ---
>  src/evemu.c          |  6 ++++++
>  src/evemu.h          | 12 ++++++++++++
>  src/libevemu.ver     |  1 +
>  tools/evemu-device.c | 11 +----------
>  4 files changed, 20 insertions(+), 10 deletions(-)
> 
> diff --git a/src/evemu.c b/src/evemu.c
> index 21adef1..b494c18 100644
> --- a/src/evemu.c
> +++ b/src/evemu.c
> @@ -781,6 +781,12 @@ int evemu_create(struct evemu_device *dev, int fd)
>  	return libevdev_uinput_create_from_device(dev->evdev, fd, &dev->uidev);
>  }
>  
> +int evemu_create_managed(struct evemu_device *dev)
> +{
> +	return libevdev_uinput_create_from_device(dev->evdev,
> +		LIBEVDEV_UINPUT_OPEN_MANAGED, &dev->uidev);
> +}
> +
>  const char *evemu_get_devnode(struct evemu_device *dev)
>  {
>  	return libevdev_uinput_get_devnode(dev->uidev);
> diff --git a/src/evemu.h b/src/evemu.h
> index d25d707..ae3f7d3 100644
> --- a/src/evemu.h
> +++ b/src/evemu.h
> @@ -423,6 +423,18 @@ int evemu_play(FILE *fp, int fd);
>  int evemu_create(struct evemu_device *dev, int fd);
>  
>  /**
> + * evemu_create_managed() - create a kernel device from the evemu configuration
> + * @dev: the device in use
> + *
> + * Creates a new device with all the properties of the evemu device.
> + * Compared to evemu_create, evemu will take care of the handling of the uinput
> + * file descriptor.
> + *
> + * Returns zero if successful, negative error otherwise.
> + */
> +int evemu_create_managed(struct evemu_device *dev);
> +
> +/**
>   * evemu_get_devnode() - get device node
>   * @dev: the device in use
>   *
> diff --git a/src/libevemu.ver b/src/libevemu.ver
> index 8f216fd..3b13930 100644
> --- a/src/libevemu.ver
> +++ b/src/libevemu.ver
> @@ -2,6 +2,7 @@ EVEMU_2.0 {
>    global:
>      evemu_create;
>      evemu_create_event;
> +    evemu_create_managed;
>      evemu_delete;
>      evemu_destroy;
>      evemu_extract;
> diff --git a/tools/evemu-device.c b/tools/evemu-device.c
> index 46ffaeb..c0a7157 100644
> --- a/tools/evemu-device.c
> +++ b/tools/evemu-device.c
> @@ -50,8 +50,6 @@
>  #include <sys/types.h>
>  #include <unistd.h>
>  
> -#define UINPUT_NODE "/dev/uinput"
> -
>  /*
>   * Finds the newly created device node and holds it open.
>   */
> @@ -85,7 +83,6 @@ static int evemu_device(FILE *fp)
>  {
>  	struct evemu_device *dev;
>  	int ret = -ENOMEM;
> -	int fd;
>  
>  	dev = evemu_new(NULL);
>  	if (!dev)
> @@ -100,18 +97,12 @@ static int evemu_device(FILE *fp)
>  		evemu_set_name(dev, name);
>  	}
>  
> -	ret = fd = open(UINPUT_NODE, O_WRONLY);
> +	ret = evemu_create_managed(dev);
>  	if (ret < 0)
>  		goto out;
> -
> -	ret = evemu_create(dev, fd);
> -	if (ret < 0)
> -		goto out_close;
>  	hold_device(dev);
>  	evemu_destroy(dev);
>  
> -out_close:
> -	close(fd);
>  out:
>  	evemu_delete(dev);
>  
> -- 
> 1.8.3.1
> 
> The sad thing is that now the net line of code difference is positive :(

10 lines of those are comments which don't count :)
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

though add a comment in the commit msg about the new call being added before
you push please.

Cheers,
   Peter



More information about the Input-tools mailing list