Signed-off-by: Gregor Jasny <[email protected]>
---
 configure.ac               |    5 ++++-
 utils/keytable/Makefile.am |    2 ++
 utils/keytable/keytable.c  |   27 +++++++++++++++++++++------
 3 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/configure.ac b/configure.ac
index 661eb20..a1230b2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
 
diff --git a/utils/keytable/Makefile.am b/utils/keytable/Makefile.am
index 4505fc1..886d800 100644
--- a/utils/keytable/Makefile.am
+++ b/utils/keytable/Makefile.am
@@ -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 \
diff --git a/utils/keytable/keytable.c b/utils/keytable/keytable.c
index 31376f3..bccd325 100644
--- a/utils/keytable/keytable.c
+++ b/utils/keytable/keytable.c
@@ -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;
-- 
1.7.10

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to