chiark / gitweb /
keymap: add --version option
[elogind.git] / src / udev / keymap / keymap.c
index cc37a9b8c21d4fd64edb08b8ac860b424e7dbd0e..5cbce86db1b0f9f3cf8ce5cadbcbbf0f73448cfc 100644 (file)
@@ -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 "util.h"
 
 #define MAX_SCANCODES 1024
 
@@ -48,7 +49,7 @@ static int evdev_open(const char *dev)
         int fd;
         char fn[PATH_MAX];
 
-        if (strncmp(dev, "/dev", 4) != 0) {
+        if (!startswith(dev, "/dev")) {
                 snprintf(fn, sizeof(fn), "/dev/%s", dev);
                 dev = fn;
         }
@@ -361,8 +362,13 @@ static void help(int error)
 
 int main(int argc, char **argv)
 {
+        enum {
+                ARG_VERSION = 0x100,
+        };
+
         static const struct option options[] = {
                 { "help", no_argument, NULL, 'h' },
+                { "version", no_argument, NULL, ARG_VERSION },
                 { "interactive", no_argument, NULL, 'i' },
                 {}
         };
@@ -381,6 +387,10 @@ int main(int argc, char **argv)
                 case 'h':
                         help(0);
 
+                case ARG_VERSION:
+                        puts(PACKAGE_STRING);
+                        exit(0);
+
                 case 'i':
                         opt_interactive = 1;
                         break;
@@ -409,7 +419,7 @@ int main(int argc, char **argv)
                 const char *filearg = argv[optind+1];
                 if (strchr(filearg, '/')) {
                         /* Keymap file argument is a path */
-                        FILE *f = fopen(filearg, "r");
+                        FILE *f = fopen(filearg, "re");
                         if (f)
                                 merge_table(fd, f);
                         else
@@ -420,12 +430,12 @@ int main(int argc, char **argv)
                         char keymap_path[PATH_MAX];
                         FILE *f;
                         snprintf(keymap_path, sizeof(keymap_path), "%s%s", SYSCONFDIR "/udev/keymaps/", filearg);
-                        f = fopen(keymap_path, "r");
+                        f = fopen(keymap_path, "re");
                         if (f) {
                                 merge_table(fd, f);
                         } else {
                                 snprintf(keymap_path, sizeof(keymap_path), "%s%s", UDEVLIBEXECDIR "/keymaps/", filearg);
-                                f = fopen(keymap_path, "r");
+                                f = fopen(keymap_path, "re");
                                 if (f)
                                         merge_table(fd, f);
                                 else