]> granicus.if.org Git - graphviz/commitdiff
remove an unnecessary use of sfstropen in GVPR
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 3 Jan 2021 01:54:57 +0000 (17:54 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Wed, 17 Feb 2021 03:17:09 +0000 (19:17 -0800)
Related to #1873.

lib/gvpr/compile.c

index fbc230367d573ef8f6e07d976d7538d43cda2ea2..855260b9c801669fce52a444434e8111d79b5b6b 100644 (file)
@@ -191,12 +191,21 @@ static char *symName(Expr_t * ex, int op)
     if (op >= MINNAME && op <= MAXNAME)
        return gprnames[op];
     else {
-       Sfio_t *sf = sfstropen();
-       char *s;
+       // calculate how much space we need to construct a name
+       int bytes = vsnprintf(NULL, 0, "<unknown (%d)>", op);
+       if (bytes < 0) {
+               fprintf(stderr, "%s: vsnprintf failure\n", __func__);
+               exit(EXIT_FAILURE);
+       }
+
+       // construct a managed buffer to store this name
+       char *s = vmalloc(ex->ve, (size_t)bytes + 1);
+
+       // make the name
+       if (s != NULL) {
+               snprintf(s, (size_t)bytes + 1, "<unknown (%d)>", op);
+       }
 
-       sfprintf(sf, "<unknown (%d)>", op);
-       s = exstring(ex, sfstruse(sf));
-       sfclose(sf);
        return s;
     }
 }