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

Reply via email to