[3/3] keytable: first search table in userdir, then in systemdir
Commit Message
Signed-off-by: Gregor Jasny <gjasny@googlemail.com>
---
configure.ac | 5 ++++-
utils/keytable/Makefile.am | 2 ++
utils/keytable/keytable.c | 27 +++++++++++++++++++++------
3 files changed, 27 insertions(+), 7 deletions(-)
@@ -153,7 +153,8 @@ libv4l2privdir="$libdir/$libv4l2subdir"
libv4l2plugindir="$libv4l2privdir/plugins"
libv4lconvertprivdir="$libdir/$libv4lconvertsubdir"
-keytablesystemdir="$sysconfdir/rc_keymaps"
+keytablesystemdir="$udevdir/rc_keymaps"
+keytableuserdir="$sysconfdir/rc_keymaps"
udevrulesdir="$udevdir/rules.d"
pkgconfigdir="$libdir/pkgconfig"
@@ -162,6 +163,7 @@ AC_SUBST(libv4l2privdir)
AC_SUBST(libv4l2plugindir)
AC_SUBST(libv4lconvertprivdir)
AC_SUBST(keytablesystemdir)
+AC_SUBST(keytableuserdir)
AC_SUBST(udevrulesdir)
AC_SUBST(pkgconfigdir)
@@ -171,6 +173,7 @@ AC_DEFINE_DIR([LIBV4L2_PRIV_DIR], [libv4l2privdir], [libv4l2 private lib directo
AC_DEFINE_DIR([LIBV4L2_PLUGIN_DIR], [libv4l2plugindir], [libv4l2 plugin directory])
AC_DEFINE_DIR([LIBV4LCONVERT_PRIV_DIR], [libv4lconvertprivdir], [libv4lconvert private lib directory])
AC_DEFINE_DIR([IR_KEYTABLE_SYSTEM_DIR], [keytablesystemdir], [ir-keytable preinstalled tables directory])
+AC_DEFINE_DIR([IR_KEYTABLE_USER_DIR], [keytableuserdir], [ir-keytable user defined tables directory])
# options
@@ -10,6 +10,8 @@ ir_keytable_LDFLAGS = $(ARGP_LIBS)
EXTRA_DIST = 70-infrared.rules rc_keymaps gen_keytables.pl ir-keytable.1 rc_maps.cfg
# custom target
+install-data-local:
+ $(install_sh) -d "$(DESTDIR)$(keytableuserdir)"
sync-with-kernel:
@if [ ! -f $(KERNEL_DIR)/include/linux/input.h ]; then \
@@ -194,7 +194,6 @@ static error_t parse_keyfile(char *fname, char **table)
fin = fopen(fname, "r");
if (!fin) {
- perror("opening keycode file");
return errno;
}
@@ -1512,15 +1511,31 @@ int main(int argc, char *argv[])
cur->fname);
if (cur->fname[0] == '/' || ((cur->fname[0] == '.') && strchr(cur->fname, '/'))) {
fname = cur->fname;
+ rc = parse_keyfile(fname, &name);
+ if (rc < 0) {
+ fprintf(stderr, "Can't load %s table\n", fname);
+ return -1;
+ }
} else {
- fname = malloc(strlen(cur->fname) + strlen(IR_KEYTABLE_SYSTEM_DIR) + 2);
- strcpy(fname, IR_KEYTABLE_SYSTEM_DIR);
+ fname = malloc(strlen(cur->fname) + strlen(IR_KEYTABLE_USER_DIR) + 2);
+ strcpy(fname, IR_KEYTABLE_USER_DIR);
strcat(fname, "/");
strcat(fname, cur->fname);
+ rc = parse_keyfile(fname, &name);
+ if (rc != 0) {
+ fname = malloc(strlen(cur->fname) + strlen(IR_KEYTABLE_SYSTEM_DIR) + 2);
+ strcpy(fname, IR_KEYTABLE_SYSTEM_DIR);
+ strcat(fname, "/");
+ strcat(fname, cur->fname);
+ rc = parse_keyfile(fname, &name);
+ }
+ if (rc != 0) {
+ fprintf(stderr, "Can't load %s table from %s or %s\n", cur->fname, IR_KEYTABLE_USER_DIR, IR_KEYTABLE_SYSTEM_DIR);
+ return -1;
+ }
}
- rc = parse_keyfile(fname, &name);
- if (rc < 0 || !keys.next) {
- fprintf(stderr, "Can't load %s table or empty table\n", fname);
+ if (!keys.next) {
+ fprintf(stderr, "Empty table %s\n", fname);
return -1;
}
clear = 1;