Hi
On Mon, Mar 23, 2015 at 2:30 AM, Peter Hutterer
<[email protected]> wrote:
> No changes in the mapping, but previously we opened the device only on
> successful parsing. Now we open the mapping as soon as we have a value that
> looks interesting. Since errors are supposed to be the exception, not the
> rule, this is probably fine.
> ---
> src/udev/udev-builtin-keyboard.c | 59
> ++++++++++++++++++++++------------------
> 1 file changed, 33 insertions(+), 26 deletions(-)
All fine, please push!
Thanks
David
> diff --git a/src/udev/udev-builtin-keyboard.c
> b/src/udev/udev-builtin-keyboard.c
> index b3396d5..8353249 100644
> --- a/src/udev/udev-builtin-keyboard.c
> +++ b/src/udev/udev-builtin-keyboard.c
> @@ -62,12 +62,41 @@ static int install_force_release(struct udev_device *dev,
> const unsigned *releas
> return ret;
> }
>
> -static int builtin_keyboard(struct udev_device *dev, int argc, char *argv[],
> bool test) {
> - struct udev_list_entry *entry;
> +static void map_keycode(int fd, const char *devnode, int scancode, const
> char *keycode)
> +{
> struct {
> unsigned scan;
> unsigned key;
> } map;
> + char *endptr;
> + const struct key *k;
> + unsigned keycode_num;
> +
> + /* translate identifier to key code */
> + k = keyboard_lookup_key(keycode, strlen(keycode));
> + if (k) {
> + keycode_num = k->id;
> + } else {
> + /* check if it's a numeric code already */
> + keycode_num = strtoul(keycode, &endptr, 0);
> + if (endptr[0] !='\0') {
> + log_error("Error, unknown key identifier '%s'",
> keycode);
> + return;
> + }
> + }
> +
> + map.scan = scancode;
> + map.key = keycode_num;
> +
> + log_debug("keyboard: mapping scan code %d (0x%x) to key code %d
> (0x%x)",
> + map.scan, map.scan, map.key, map.key);
> +
> + if (ioctl(fd, EVIOCSKEYCODE, &map) < 0)
> + log_error_errno(errno, "Error calling EVIOCSKEYCODE on
> device node '%s' (scan code 0x%x, key code %d): %m", devnode, map.scan,
> map.key);
> +}
> +
> +static int builtin_keyboard(struct udev_device *dev, int argc, char *argv[],
> bool test) {
> + struct udev_list_entry *entry;
> unsigned release[1024];
> unsigned release_count = 0;
> _cleanup_close_ int fd = -1;
> @@ -82,10 +111,9 @@ static int builtin_keyboard(struct udev_device *dev, int
> argc, char *argv[], boo
>
> udev_list_entry_foreach(entry,
> udev_device_get_properties_list_entry(dev)) {
> const char *key;
> - unsigned scancode, keycode_num;
> char *endptr;
> + unsigned scancode;
> const char *keycode;
> - const struct key *k;
>
> key = udev_list_entry_get_name(entry);
> if (!startswith(key, "KEYBOARD_KEY_"))
> @@ -112,19 +140,6 @@ static int builtin_keyboard(struct udev_device *dev, int
> argc, char *argv[], boo
> continue;
> }
>
> - /* translate identifier to key code */
> - k = keyboard_lookup_key(keycode, strlen(keycode));
> - if (k) {
> - keycode_num = k->id;
> - } else {
> - /* check if it's a numeric code already */
> - keycode_num = strtoul(keycode, &endptr, 0);
> - if (endptr[0] !='\0') {
> - log_error("Error, unknown key identifier
> '%s'", keycode);
> - continue;
> - }
> - }
> -
> if (fd == -1) {
> fd = open(node,
> O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
> if (fd < 0) {
> @@ -133,15 +148,7 @@ static int builtin_keyboard(struct udev_device *dev, int
> argc, char *argv[], boo
> }
> }
>
> - map.scan = scancode;
> - map.key = keycode_num;
> -
> - log_debug("keyboard: mapping scan code %d (0x%x) to key code
> %d (0x%x)",
> - map.scan, map.scan, map.key, map.key);
> -
> - if (ioctl(fd, EVIOCSKEYCODE, &map) < 0)
> - log_error_errno(errno, "Error calling EVIOCSKEYCODE
> on device node '%s' (scan code 0x%x, key code %d): %m", node, map.scan,
> map.key);
> -
> + map_keycode(fd, node, scancode, keycode);
> }
>
> /* install list of force-release codes */
> --
> 2.3.2
>
_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel