]> granicus.if.org Git - graphviz/commitdiff
gv2gml: refactor 'parseStyle' to avoid 'strtok'
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Fri, 8 Jul 2022 04:07:31 +0000 (21:07 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Fri, 22 Jul 2022 00:41:58 +0000 (17:41 -0700)
This improves thread safety (`strtok` works by modifying global state) and
removes the need for dynamic allocation.

cmd/tools/gv2gml.c

index ca1a245f1550ebf72ba90ce697a3747d411500e2..48a8eb9aaf45c17236d0239d160b13a31a4cb8f7 100644 (file)
@@ -26,6 +26,8 @@
 
 #include <cgraph/cgraph.h>
 #include <cgraph/exit.h>
+#include <cgraph/strview.h>
+#include <cgraph/tokenize.h>
 #include <common/types.h>
 #include <common/utils.h>
 #include <ctype.h>
@@ -118,20 +120,18 @@ static int
 parseStyle (char* s)
 {
     int flags = 0;
-    char* ip;
     char* sep = " \t,";
 
-       s = strdup(s);
-    for (ip = strtok (s, sep); ip; ip = strtok (NULL, sep)) {
-       if (streq(ip,"invis")) flags |= INVIS;
-       else if (streq(ip,"filled")) flags |= FILL;
-       else if (streq(ip,"dashed")) flags |= DASH;
-       else if (streq(ip,"dotted")) flags |= DOT;
-       else if (streq(ip,"solid")) flags |= LINE;
-       else if (streq(ip,"bold")) flags |= BOLD;
+    for (tok_t t = tok(s, sep); !tok_end(&t); tok_next(&t)) {
+       strview_t ip = tok_get(&t);
+       if (strview_str_eq(ip, "invis")) flags |= INVIS;
+       else if (strview_str_eq(ip, "filled")) flags |= FILL;
+       else if (strview_str_eq(ip, "dashed")) flags |= DASH;
+       else if (strview_str_eq(ip, "dotted")) flags |= DOT;
+       else if (strview_str_eq(ip, "solid")) flags |= LINE;
+       else if (strview_str_eq(ip, "bold")) flags |= BOLD;
     }  
 
-    free (s);
     return flags;
 }