]> granicus.if.org Git - graphviz/commitdiff
common stylefn: replace 'strtok' with tokenize.h
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 10 Jul 2022 03:55:23 +0000 (20:55 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Fri, 22 Jul 2022 00:41:58 +0000 (17:41 -0700)
This removes dynamic allocation in this code and improves thread safety.

lib/common/htmllex.c

index 289f5892ee5adaa928f6103f08f1e31939bea875..d9a15b74da0dbaea7b374d937302a5fdd250d466 100644 (file)
@@ -16,6 +16,8 @@
 #include <cdt/cdt.h>
 #include <ctype.h>
 #include <cgraph/strcasecmp.h>
+#include <cgraph/strview.h>
+#include <cgraph/tokenize.h>
 #include <limits.h>
 #include <stddef.h>
 
@@ -170,21 +172,21 @@ static int portfn(htmldata_t * p, char *v)
 static int stylefn(htmldata_t * p, char *v)
 {
     int rv = 0;
-    char* tk;
-    char* buf = strdup (v);
-    for (tk = strtok (buf, DELIM); tk; tk = strtok (NULL, DELIM)) {
-       if (!strcasecmp(tk, "ROUNDED")) p->style |= ROUNDED;
-       else if (!strcasecmp(tk, "RADIAL")) p->style |= RADIAL;
-       else if(!strcasecmp(tk,"SOLID")) p->style &= (unsigned short)~(DOTTED|DASHED);
-       else if(!strcasecmp(tk,"INVISIBLE") || !strcasecmp(tk,"INVIS")) p->style |= INVISIBLE;
-       else if(!strcasecmp(tk,"DOTTED")) p->style |= DOTTED;
-       else if(!strcasecmp(tk,"DASHED")) p->style |= DASHED;
+    for (tok_t t = tok(v, DELIM); !tok_end(&t); tok_next(&t)) {
+       strview_t tk = tok_get(&t);
+       if (strview_case_str_eq(tk, "ROUNDED")) p->style |= ROUNDED;
+       else if (strview_case_str_eq(tk, "RADIAL")) p->style |= RADIAL;
+       else if (strview_case_str_eq(tk,"SOLID")) p->style &= (unsigned short)~(DOTTED|DASHED);
+       else if (strview_case_str_eq(tk,"INVISIBLE") ||
+                strview_case_str_eq(tk,"INVIS")) p->style |= INVISIBLE;
+       else if (strview_case_str_eq(tk,"DOTTED")) p->style |= DOTTED;
+       else if (strview_case_str_eq(tk,"DASHED")) p->style |= DASHED;
        else {
-           agerr(AGWARN, "Illegal value %s for STYLE - ignored\n", tk);
+           agerr(AGWARN, "Illegal value %.*s for STYLE - ignored\n", (int)tk.size,
+                 tk.data);
            rv = 1;
        }
     }
-    free (buf);
     return rv;
 }