]> granicus.if.org Git - graphviz/commitdiff
gvplugin_list: use a 'strview_t' for handling prefix of 'str'
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 26 Jun 2022 19:58:01 +0000 (12:58 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 2 Jul 2022 00:13:06 +0000 (17:13 -0700)
Slightly more readable and less error prone than doing this inline.

lib/gvc/gvplugin.c

index 6987d315ac9f77ea70aad9085e02b2f7326e69f4..d2520bdd877e344e56de654a23be97f90ccbf8ab 100644 (file)
@@ -352,24 +352,17 @@ char *gvplugin_list(GVC_t * gvc, api_t api, const char *str)
     }
 
     /* does str have a :path modifier? */
-    size_t str_size = strlen(str);
-    {
-        const char *end = strchr(str, ':');
-        if (end != NULL) {
-            str_size = (size_t)(end - str);
-        }
-    }
+    const strview_t strv = strview(str, ':');
 
     /* point to the beginning of the linked list of plugins for this api */
     plugin = gvc->apis[api];
 
-    if (str[str_size] == ':') { /* if str contains a ':', and if we find a match for the type,
-                                   then just list the alternative paths for the plugin */
+    if (strv.data[strv.size] == ':') { /* if str contains a ':', and if we find a match for the type,
+                                          then just list the alternative paths for the plugin */
         for (pnext = plugin; pnext; pnext = pnext->next) {
             const strview_t type = strview(pnext->typestr, ':');
             /* list only the matching type, or all types if s is an empty string */
-            if (!str[0] ||
-                (type.size == str_size && strncasecmp(str, type.data, str_size) == 0)) {
+            if (!str[0] || strview_case_eq(strv, type)) {
                 /* list each member of the matching type as "type:path" */
                 agxbprint(&xb, " %s:%s", pnext->typestr, pnext->package->name);
                 new = false;