From 7d69e795357293d107bb7ca7a60984bc60f44ed9 Mon Sep 17 00:00:00 2001 From: c9s Date: Sun, 1 Jun 2014 14:53:12 +0800 Subject: [PATCH] gvc fix --- include/r3.h | 3 --- include/r3_gvc.h | 6 +++++- src/gvc.c | 19 ++++++++++--------- tests/check_gvc.c | 5 ++++- tests/check_tree.c | 7 +++---- 5 files changed, 22 insertions(+), 18 deletions(-) diff --git a/include/r3.h b/include/r3.h index 761d015..9b5be9b 100644 --- a/include/r3.h +++ b/include/r3.h @@ -115,9 +115,6 @@ node * r3_tree_insert_pathl_(node *tree, const char *path, int path_len, route * void r3_tree_dump(const node * n, int level); -int r3_tree_render_file(const node * tree, const char * format, const char * filename); - -int r3_tree_render_dot(node * tree); edge * r3_node_find_edge_str(const node * n, const char * str, int str_len); diff --git a/include/r3_gvc.h b/include/r3_gvc.h index e6ef6ea..4d6599d 100644 --- a/include/r3_gvc.h +++ b/include/r3_gvc.h @@ -9,6 +9,10 @@ #include -void r3_tree_build_ag_nodes(Agraph_t * g, Agnode_t * ag_parent_node, node * n, int node_cnt); +void r3_tree_build_ag_nodes(Agraph_t * g, Agnode_t * ag_parent_node, const node * n, int node_cnt); + +int r3_tree_render_dot(node * tree); + +int r3_tree_render_file(const node * tree, const char * format, const char * filename); #endif /* !R3_GVC_H */ diff --git a/src/gvc.c b/src/gvc.c index f850c16..e9672a6 100644 --- a/src/gvc.c +++ b/src/gvc.c @@ -12,14 +12,7 @@ #include "r3_gvc.h" #include "zmalloc.h" - -static char * node_id_str(int id) { - char * name = zmalloc(sizeof(char) * 20); - sprintf(name, "#%d", id); - return name; -} - -void r3_tree_build_ag_nodes(Agraph_t * g, Agnode_t * ag_parent_node, node * n, int node_cnt) { +void r3_tree_build_ag_nodes(Agraph_t * g, Agnode_t * ag_parent_node, const node * n, int node_cnt) { edge * e; Agnode_t *agn_child; Agedge_t *agn_edge; @@ -28,7 +21,15 @@ void r3_tree_build_ag_nodes(Agraph_t * g, Agnode_t * ag_parent_node, node * n, i e = n->edges[i]; node_cnt++; - agn_child = agnode(g, node_id_str(node_cnt) , 1); + + char *nodename = NULL; + if ( n->combined_pattern ) { + asprintf(&nodename,"%s", n->combined_pattern); + } else { + asprintf(&nodename,"#%d", node_cnt); + } + + agn_child = agnode(g, nodename, 1); agn_edge = agedge(g, ag_parent_node, agn_child, 0, 1); agsafeset(agn_edge, "label", e->pattern, ""); if (e->child && e->child->endpoint) { diff --git a/tests/check_gvc.c b/tests/check_gvc.c index 44191f9..0eb8e7d 100644 --- a/tests/check_gvc.c +++ b/tests/check_gvc.c @@ -48,7 +48,10 @@ START_TEST (test_gvc_render_file) r3_tree_insert_path(n, "/user/{id}", NULL); r3_tree_insert_path(n, "/post/{title:\\w+}", NULL); - r3_tree_compile(n, NULL); + char *errstr = NULL; + int errcode; + errcode = r3_tree_compile(n, &errstr); + r3_tree_render_file(n, "png", "check_gvc.png"); r3_tree_free(n); } diff --git a/tests/check_tree.c b/tests/check_tree.c index 50eb021..61b0daf 100644 --- a/tests/check_tree.c +++ b/tests/check_tree.c @@ -33,7 +33,6 @@ START_TEST (test_r3_node_find_edge) node * child = r3_tree_create(3); fail_if( r3_node_connect(n, zstrdup("/add") , child) == FALSE ); - fail_if( r3_node_find_edge(n, "/add") == NULL ); fail_if( r3_node_find_edge(n, "/bar") != NULL ); @@ -108,9 +107,9 @@ START_TEST (test_pcre_patterns_insert) char *errstr = NULL; - int errno; - errno = r3_tree_compile(n, &errstr); - ck_assert(errno == 0); // no error + int errcode; + errcode = r3_tree_compile(n, &errstr); + ck_assert(errcode == 0); // no error // r3_tree_dump(n, 0);