From 909192d03caa116a105e0be2d3c9a4fa65e155dd Mon Sep 17 00:00:00 2001 From: north Date: Thu, 26 Jan 2006 14:19:51 +0000 Subject: [PATCH] Fix "trouble in init_rank" when graph has a disconnected node with rank=max or rank=sink. b7.dot still dumps core. --- lib/dotgen/position.c | 5 +++-- lib/dotgen/rank.c | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/dotgen/position.c b/lib/dotgen/position.c index 71cc5c5ba..67e40ca48 100644 --- a/lib/dotgen/position.c +++ b/lib/dotgen/position.c @@ -73,7 +73,7 @@ connectGraph (graph_t* g) edge_t* e; rank_t* rp; - for (r = GD_minrank(g); r < GD_maxrank(g); r++) { + for (r = GD_minrank(g); r <= GD_maxrank(g); r++) { rp = GD_rank(g)+r; found =FALSE; tp = NULL; @@ -100,7 +100,8 @@ connectGraph (graph_t* g) } if (found || !tp) continue; tp = rp->v[0]; - hp = (rp+1)->v[0]; + if (r < GD_maxrank(g)) hp = (rp+1)->v[0]; + else hp = (rp-1)->v[0]; assert (hp); sn = virtual_node(g); ND_node_type(sn) = SLACKNODE; diff --git a/lib/dotgen/rank.c b/lib/dotgen/rank.c index e4e50e1ad..bae2ac50d 100644 --- a/lib/dotgen/rank.c +++ b/lib/dotgen/rank.c @@ -465,6 +465,7 @@ void dot_rank(graph_t * g) decompose(g, 0); acyclic(g); minmax_edges2(g, p); + decompose(g, 0); #ifdef ALLOW_LEVELS if ((N_level = agfindattr(g->proto->n, "level"))) setRanks(g, N_level); -- 2.40.0