]> granicus.if.org Git - graphviz/commitdiff
Make sure each run of gvpr creates a $T file with a unique name.
authorerg <devnull@localhost>
Wed, 8 Sep 2010 18:54:26 +0000 (18:54 +0000)
committererg <devnull@localhost>
Wed, 8 Sep 2010 18:54:26 +0000 (18:54 +0000)
lib/gvpr/gprstate.c
lib/gvpr/gvpr.c

index 90e75c1ad4b10b3a9cfce249fb94efd0183ff7a6..4601305c27769a68b241ac02cdebb2349a6fef9d 100644 (file)
@@ -29,6 +29,8 @@
 #include <error.h>
 #include <sfstr.h>
 
+static int name_used;
+
 int validTVT(int c)
 {
     return ((TV_flat <= c) && (c <= TV_prepostrev));
@@ -55,6 +57,7 @@ Gpr_t *openGPRState(gpr_info* info)
     }
 
     state->tvt = TV_flat;
+    state->name_used = name_used;
     state->tvroot = 0;
     state->tvedge = 0;
     state->outFile = info->outFile;
@@ -131,6 +134,7 @@ void addBindings (Gpr_t* state, gvprbinding* bindings)
 void closeGPRState(Gpr_t* state)
 {
     if (!state) return;
+    name_used = state->name_used;
     if (state->tmp)
        sfclose (state->tmp);
     free (state->dp);
index 0b29f6a966a5dc2ea438010cc8ea9ebe22225f9a..e588183a3de5145316fce206099f7e05b0946dc0 100644 (file)
@@ -710,6 +710,12 @@ static int traverse(Gpr_t * state, Expr_t* prog, comp_block * bp, int cleanup)
        } 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);
+       }
        state->target = openSubg(state->curgraph, target);
     }
     if (!state->outgraph)