X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fudev%2Fkeymap%2Fkeymap.c;h=939407fd0bd783d22aeb34856df4d976c32aba5e;hb=c3cfed0d6cd9f537aa998096a43b80e98d99c6c4;hp=051aa42552f2e8428349ff12aab27c7219d14c7d;hpb=47ef94ac5f39db6c5c18be10afe32397a0a8d5cc;p=elogind.git diff --git a/src/udev/keymap/keymap.c b/src/udev/keymap/keymap.c index 051aa4255..939407fd0 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" @@ -420,12 +423,13 @@ int main(int argc, char **argv) /* Open override file if present, otherwise default file */ char keymap_path[PATH_MAX]; FILE *f; - snprintf(keymap_path, sizeof(keymap_path), "%s%s", SYSCONFDIR "/udev/keymaps/", filearg); + + snprintf(keymap_path, sizeof(keymap_path), "/etc/udev/keymaps/%s", filearg); f = fopen(keymap_path, "re"); if (f) { merge_table(fd, f); } else { - snprintf(keymap_path, sizeof(keymap_path), "%s%s", UDEVLIBEXECDIR "/keymaps/", filearg); + snprintf(keymap_path, sizeof(keymap_path), UDEVLIBEXECDIR "/keymaps/%s", filearg); f = fopen(keymap_path, "re"); if (f) merge_table(fd, f);