]> granicus.if.org Git - graphviz/commitdiff
gvpr traverse: use a local agxbuf instead of GVPR state’s 'tmp'
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 7 Aug 2022 16:42:49 +0000 (09:42 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 13 Aug 2022 16:18:53 +0000 (09:18 -0700)
This makes it clearer to both humans and the compiler that the data written to
this buffer is not required beyond this function. This also gets us closer to
removing an SFIO dependency.

Gitlab: #1873

lib/gvpr/gvpr.c

index 4af4a0b7d634a39ac2d17158097c539ce3dd9b1e..24598f39644924bf2cea9b69f3753ee27d2befa3 100644 (file)
@@ -719,22 +719,25 @@ static void doCleanup (Agraph_t* g)
  */
 static int traverse(Gpr_t * state, Expr_t* prog, comp_block * bp, int cleanup)
 {
-    char *target;
-
     if (!state->target) {
+       char *target;
+       agxbuf tmp = {0};
+       agxbinit(&tmp, 0, NULL);
+
        if (state->name_used) {
-           sfprintf(state->tmp, "%s%d", state->tgtname, state->name_used);
-           target = sfstruse(state->tmp);
+           agxbprint(&tmp, "%s%d", state->tgtname, state->name_used);
+           target = agxbuse(&tmp);
        } else
            target = state->tgtname;
        state->name_used++;
        /* make sure target subgraph does not exist */
        while (agsubg (state->curgraph, target, 0)) {
            state->name_used++;
-           sfprintf(state->tmp, "%s%d", state->tgtname, state->name_used);
-           target = sfstruse(state->tmp);
+           agxbprint(&tmp, "%s%d", state->tgtname, state->name_used);
+           target = agxbuse(&tmp);
        }
        state->target = openSubg(state->curgraph, target);
+       agxbfree(&tmp);
     }
     if (!state->outgraph)
        state->outgraph = state->target;