On Fri, Mar 13, 2015 at 05:21:31PM -0400, Benjamin Tissoires wrote: > The match count (and update to the first correct) has to be done > in libwacom_parse_tablet_keyfile() now. > --- > > changes in v3: > - libwacom_matchstr_to_match now returns a gboolean > > new in v2
series pushed, with a fix to the tablet-validity test case 40ece8c..c621fb6 master -> master thanks. Cheers, Peter > libwacom/libwacom-database.c | 81 > +++++++++++++++++++++----------------------- > 1 file changed, 39 insertions(+), 42 deletions(-) > > diff --git a/libwacom/libwacom-database.c b/libwacom/libwacom-database.c > index f4cb82a..3b39dba 100644 > --- a/libwacom/libwacom-database.c > +++ b/libwacom/libwacom-database.c > @@ -129,46 +129,32 @@ make_match_string (WacomBusType bus, int vendor_id, int > product_id) > return g_strdup_printf("%s:%04x:%04x", bus_to_str (bus), vendor_id, > product_id); > } > > -static int > -libwacom_matchstr_to_matches(WacomDevice *device, const char *match) > +static gboolean > +libwacom_matchstr_to_match(WacomDevice *device, const char *match) > { > int rc = 1; > - char **strs; > - int i, nmatches = 0; > - WacomBusType first_bus; > - int first_vendor_id, first_product_id; > + char busstr[64]; > + int vendor_id, product_id; > + WacomBusType bus; > > if (match == NULL) > - return 0; > - > - strs = g_strsplit(match, ";", 0); > - for (i = 0; strs[i] != NULL && *strs[i] != '\0'; i++) { > - char busstr[64]; > - int vendor_id, product_id; > - WacomBusType bus; > - rc = sscanf(strs[i], "%63[^:]:%x:%x", busstr, &vendor_id, > &product_id); > - if (rc != 3) { > - DBG("failed to match '%s' for product/vendor IDs. > Skipping.\n", strs[i]); > - continue; > - } > - bus = bus_from_str (busstr); > + return FALSE; > > - libwacom_update_match(device, bus, vendor_id, product_id); > + if (g_strcmp0 (match, GENERIC_DEVICE_MATCH) == 0) { > + libwacom_update_match(device, WBUSTYPE_UNKNOWN, 0, 0); > + return TRUE; > + } > > - if (nmatches == 0) { > - first_bus = bus; > - first_vendor_id = vendor_id; > - first_product_id = product_id; > - } > - nmatches++; > + rc = sscanf(match, "%63[^:]:%x:%x", busstr, &vendor_id, &product_id); > + if (rc != 3) { > + DBG("failed to match '%s' for product/vendor IDs. Skipping.\n", > match); > + return 0; > } > + bus = bus_from_str (busstr); > > - /* set default to first entry */ > - if (nmatches > 1) > - libwacom_update_match(device, first_bus, first_vendor_id, > first_product_id); > + libwacom_update_match(device, bus, vendor_id, product_id); > > - g_strfreev(strs); > - return i; > + return TRUE; > } > > static void > @@ -397,19 +383,30 @@ libwacom_parse_tablet_keyfile(const char *datadir, > const char *filename) > > device = g_new0 (WacomDevice, 1); > > - match = g_key_file_get_string(keyfile, DEVICE_GROUP, "DeviceMatch", > NULL); > - if (g_strcmp0 (match, GENERIC_DEVICE_MATCH) == 0) { > - libwacom_update_match(device, WBUSTYPE_UNKNOWN, 0, 0); > - } else { > - if (libwacom_matchstr_to_matches(device, match) == 0) { > - DBG("failed to match '%s' for product/vendor IDs in > '%s'\n", match, path); > - g_free (match); > - g_free (device); > - device = NULL; > - goto out; > + string_list = g_key_file_get_string_list(keyfile, DEVICE_GROUP, > "DeviceMatch", NULL, NULL); > + if (string_list) { > + guint i; > + guint nmatches = 0; > + guint first_valid_match = 0; > + for (i = 0; string_list[i]; i++) { > + if (libwacom_matchstr_to_match (device, string_list[i])) > + nmatches++; > + if (nmatches == 1) > + first_valid_match = i; > + } > + if (nmatches == 0) { > + DBG("failed to match '%s' for product/vendor IDs in > '%s'\n", string_list[i], path); > + g_strfreev (string_list); > + g_free (device); > + device = NULL; > + goto out; > } > + if (nmatches > 1) { > + /* set default to first entry */ > + libwacom_matchstr_to_match(device, > string_list[first_valid_match]); > + } > + g_strfreev (string_list); > } > - g_free (match); > > device->name = g_key_file_get_string(keyfile, DEVICE_GROUP, "Name", > NULL); > device->width = g_key_file_get_integer(keyfile, DEVICE_GROUP, "Width", > NULL); > -- > 2.3.1 > > > ------------------------------------------------------------------------------ > Dive into the World of Parallel Programming The Go Parallel Website, sponsored > by Intel and developed in partnership with Slashdot Media, is your hub for all > things parallel software development, from weekly thought leadership blogs to > news, videos, case studies, tutorials and more. Take a look and join the > conversation now. http://goparallel.sourceforge.net/ > _______________________________________________ > Linuxwacom-devel mailing list > Linuxwacom-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel > ------------------------------------------------------------------------------ Dive into the World of Parallel Programming The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel