diff options
author | Bastien Nocera <hadess@hadess.net> | 2012-02-02 05:28:17 +0000 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2012-02-02 05:28:17 +0000 |
commit | dfff16f3e32519ad071bdb1233c75bfe3ffa5557 (patch) | |
tree | 6b2dca39092529d8522e6ae3d002c4d8dca6cb83 | |
parent | 3d2e54526454ed1436b6436dffb0e8769fdbff1d (diff) |
Don't print duplicate udev rules
https://bugs.freedesktop.org/show_bug.cgi?id=45513
-rw-r--r-- | libfprint/fprint-list-udev-rules.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libfprint/fprint-list-udev-rules.c b/libfprint/fprint-list-udev-rules.c index e474dd7..182ee10 100644 --- a/libfprint/fprint-list-udev-rules.c +++ b/libfprint/fprint-list-udev-rules.c @@ -39,2 +39,4 @@ struct fp_driver whitelist = { +GHashTable *printed = NULL; + static void print_driver (struct fp_driver *driver) @@ -44,2 +46,4 @@ static void print_driver (struct fp_driver *driver) for (i = 0; driver->id_table[i].vendor != 0; i++) { + char *key; + blacklist = 0; @@ -49,2 +53,3 @@ static void print_driver (struct fp_driver *driver) blacklist = 1; + break; } @@ -54,2 +59,11 @@ static void print_driver (struct fp_driver *driver) + key = g_strdup_printf ("%04x:%04x", driver->id_table[i].vendor, driver->id_table[i].product); + + if (g_hash_table_lookup (printed, key) != NULL) { + g_free (key); + continue; + } + + g_hash_table_insert (printed, key, GINT_TO_POINTER (1)); + printf ("SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"%04x\", ATTRS{idProduct}==\"%04x\", ATTRS{dev}==\"*\", ATTR{power/control}=\"auto\"\n", driver->id_table[i].vendor, driver->id_table[i].product); @@ -65,2 +79,4 @@ int main (int argc, char **argv) + printed = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + for (i = 0; list[i] != NULL; i++) { @@ -71,2 +87,4 @@ int main (int argc, char **argv) + g_hash_table_destroy (printed); + return 0; |