#include <ctype.h>
+#include <limits.h>
#include <setjmp.h>
#include <stdlib.h>
#include <common/render.h>
c_cnt++;
pin = TRUE;
}
- dfs (g, n, out, &stk);
+ if (dfs (g, n, out, &stk) == SIZE_MAX) {
+ error = 1;
+ goto packerror;
+ }
}
/* Remaining nodes */
sprintf(name + len, "%zu", c_cnt);
out = agsubg(g, name,1);
agbindrec(out, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); //node custom data
- dfs(g, n, out, &stk);
+ if (dfs(g, n, out, &stk) == SIZE_MAX) {
+ error = 1;
+ goto packerror;
+ }
if (c_cnt == bnd) {
bnd *= 2;
ccs = RALLOC(bnd, ccs, Agraph_t *);
sprintf(name + len, "%zu", c_cnt);
out = agsubg(g, name,1);
agbindrec(out, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); //node custom data
- dfs(g, n, out, &stk);
+ if (dfs(g, n, out, &stk) == SIZE_MAX) {
+ freeStk (&stk);
+ free (ccs);
+ if (name != buffer)
+ free(name);
+ *ncc = 0;
+ return NULL;
+ }
if (c_cnt == bnd) {
bnd *= 2;
ccs = RALLOC(bnd, ccs, Agraph_t *);
agbindrec(out, GRECNAME, sizeof(ccgraphinfo_t), FALSE);
GD_cc_subg(out) = 1;
n_cnt = dfs(dg, dn, dout, &stk);
+ if (n_cnt == SIZE_MAX) {
+ agclose(dg);
+ agclean (g, AGRAPH, GRECNAME);
+ agclean (g, AGNODE, NRECNAME);
+ freeStk (&stk);
+ free(ccs);
+ if (name != buffer)
+ free(name);
+ *ncc = 0;
+ return NULL;
+ }
unionNodes(dout, out);
e_cnt = (size_t) nodeInduce(out);
subGInduce(g, out);
n = agfstnode(g);
cnt = dfs(g, agfstnode(g), NULL, &stk);
+ freeStk (&stk);
+ if (cnt == SIZE_MAX) { /* dfs failed */
+ return -1;
+ }
if (cnt != (size_t) agnnodes(g))
ret = 0;
- freeStk (&stk);
return ret;
}