Hi On Mon, Mar 23, 2015 at 2:30 AM, Peter Hutterer <peter.hutte...@who-t.net> 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 systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel