X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=src%2Fudev%2Fkeymap%2Fkeymap.c;h=0db56d26ad99a7dec01587dc1b8436f399d3f7be;hb=accfdb7abfe0dad7c8e7e5364d93ad962895acfc;hp=051aa42552f2e8428349ff12aab27c7219d14c7d;hpb=fdc0d8468a2322ff5f5696d1e79c41ed8daa3ef3;p=elogind.git diff --git a/src/udev/keymap/keymap.c b/src/udev/keymap/keymap.c index 051aa4255..0db56d26a 100644 --- a/src/udev/keymap/keymap.c +++ b/src/udev/keymap/keymap.c @@ -40,6 +40,7 @@ const struct key* lookup_key (const char *str, unsigned int len); #include "keys-from-name.h" #include "keys-to-name.h" +#include "macro.h" #include "util.h" #define MAX_SCANCODES 1024 @@ -61,28 +62,28 @@ static int evdev_open(const char *dev) return fd; } -static int evdev_get_keycode(int fd, int scancode, int e) +static int evdev_get_keycode(int fd, unsigned scancode, int e) { - int codes[2]; + unsigned codes[2]; codes[0] = scancode; if (ioctl(fd, EVIOCGKEYCODE, codes) < 0) { if (e && errno == EINVAL) { return -2; } else { - fprintf(stderr, "EVIOCGKEYCODE: %m\n"); + fprintf(stderr, "EVIOCGKEYCODE for scan code 0x%x: %m\n", scancode); return -1; } } return codes[1]; } -static int evdev_set_keycode(int fd, int scancode, int keycode) +static int evdev_set_keycode(int fd, unsigned scancode, int keycode) { - int codes[2]; + unsigned codes[2]; codes[0] = scancode; - codes[1] = keycode; + codes[1] = (unsigned) keycode; if (ioctl(fd, EVIOCSKEYCODE, codes) < 0) { fprintf(stderr, "EVIOCSKEYCODE: %m\n"); @@ -127,7 +128,8 @@ static const char* format_keyname(const char* key) { static int dump_table(int fd) { char version[256], name[256]; - int scancode, r = -1; + unsigned scancode; + int r = -1; if (evdev_driver_version(fd, version, sizeof(version)) < 0) goto fail; @@ -191,7 +193,8 @@ static int merge_table(int fd, FILE *f) { while (!feof(f)) { char s[256], *p; - int scancode, new_keycode, old_keycode; + unsigned scancode; + int new_keycode, old_keycode; if (!fgets(s, sizeof(s), f)) break; @@ -223,19 +226,19 @@ static int merge_table(int fd, FILE *f) { if ((old_keycode = evdev_get_keycode(fd, scancode, 0)) < 0) { r = -1; - goto fail; + continue; } if (evdev_set_keycode(fd, scancode, new_keycode) < 0) { r = -1; - goto fail; + continue; } if (new_keycode != old_keycode) fprintf(stderr, "Remapped scancode 0x%02x to 0x%02x (prior: 0x%02x)\n", scancode, new_keycode, old_keycode); } -fail: + fclose(f); return r; } @@ -259,7 +262,7 @@ static int read_event(int fd, struct input_event* ev) return 1; } -static void print_key(uint32_t scancode, uint16_t keycode, int has_scan, int has_key) +static void print_key(unsigned scancode, uint16_t keycode, int has_scan, int has_key) { const char *keyname; @@ -288,7 +291,7 @@ static void print_key(uint32_t scancode, uint16_t keycode, int has_scan, int has static void interactive(int fd) { struct input_event ev; - uint32_t last_scan = 0; + unsigned last_scan = 0; uint16_t last_key = 0; int has_scan; /* boolean */ int has_key; /* 0: none, 1: release, 2: press */ @@ -346,7 +349,7 @@ static void interactive(int fd) ioctl(fd, EVIOCGRAB, 0); } -static void help(int error) +_noreturn_ static void help(int error) { const char* h = "Usage: keymap []\n" " keymap scancode keyname [...]\n"