Don't hardcode a single stylus definition file, scan the directory for
.stylus files

Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
---
 libwacom/libwacom-database.c |   37 +++++++++++++++++++++++++++++++++++--
 libwacom/libwacomint.h       |    1 -
 2 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/libwacom/libwacom-database.c b/libwacom/libwacom-database.c
index 5a6d212..fcc9f03 100644
--- a/libwacom/libwacom-database.c
+++ b/libwacom/libwacom-database.c
@@ -37,6 +37,7 @@
 #include <stdio.h>
 
 #define TABLET_SUFFIX ".tablet"
+#define STYLUS_SUFFIX ".stylus"
 #define FEATURES_GROUP "Features"
 #define DEVICE_GROUP "Device"
 #define BUTTONS_GROUP "Buttons"
@@ -396,6 +397,24 @@ scandir_tablet_filter(const struct dirent *entry)
        return !strcmp(&name[len - suffix_len], TABLET_SUFFIX);
 }
 
+static int
+scandir_stylus_filter(const struct dirent *entry)
+{
+       const char *name = entry->d_name;
+       int len, suffix_len;
+
+       if (!name || name[0] == '.')
+               return 0;
+
+       len = strlen(name);
+       suffix_len = strlen(STYLUS_SUFFIX);
+       if (len <= suffix_len)
+               return 0;
+
+       return !strcmp(&name[len - suffix_len], STYLUS_SUFFIX);
+}
+
+
 WacomDeviceDatabase *
 libwacom_database_new_for_path (const char *datadir)
 {
@@ -435,12 +454,26 @@ libwacom_database_new_for_path (const char *datadir)
     free(files);
 
     /* Load styli */
-    path = g_build_filename (datadir, STYLUS_DATA_FILE, NULL);
+    n = scandir(datadir, &files, scandir_stylus_filter, alphasort);
+    if (n <= 0) {
+           libwacom_database_destroy(db);
+           return NULL;
+    }
+
     db->stylus_ht = g_hash_table_new_full (g_direct_hash,
                                           g_direct_equal,
                                           NULL,
                                           (GDestroyNotify) 
libwacom_stylus_destroy);
-    libwacom_parse_stylus_keyfile(db, path);
+    nfiles = n;
+    while(n--) {
+           path = g_build_filename (datadir, files[n]->d_name, NULL);
+           libwacom_parse_stylus_keyfile(db, path);
+           g_free(path);
+    }
+
+    while(nfiles--)
+           free(files[nfiles]);
+    free(files);
 
     /* If we couldn't load _anything_ then something's wrong */
     if (g_hash_table_size (db->device_ht) == 0 &&
diff --git a/libwacom/libwacomint.h b/libwacom/libwacomint.h
index 66202b0..5dcff6a 100644
--- a/libwacom/libwacomint.h
+++ b/libwacom/libwacomint.h
@@ -54,7 +54,6 @@
 
 
 #define GENERIC_DEVICE_MATCH "generic"
-#define STYLUS_DATA_FILE "libwacom.stylus"
 
 typedef enum {
        IS_BUILTIN_UNSET        = -1,
-- 
1.7.10


------------------------------------------------------------------------------
Better than sec? Nothing is better than sec when it comes to
monitoring Big Data applications. Try Boundary one-second 
resolution app monitoring today. Free.
http://p.sf.net/sfu/Boundary-dev2dev
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to