diff --git a/src/Makefile.am b/src/Makefile.am index e6711bc..5a9efa3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,5 @@ lib_LTLIBRARIES=libr3.la libr3_la_SOURCES=node.c edge.c list.c str.c token.c gvc.c libr3_la_LIBADD=$(DEPS_LIBS) -AM_CFLAGS=$(DEPS_CFLAGS) -I$(top_builddir) -I$(top_builddir)/include +AM_CFLAGS=$(DEPS_CFLAGS) -I$(top_builddir) -I$(top_builddir)/include -Wall # AM_CFLAGS=$(DEPS_CFLAGS) diff --git a/src/Makefile.in b/src/Makefile.in index 73140e5..f9a89cf 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -314,7 +314,7 @@ top_srcdir = @top_srcdir@ lib_LTLIBRARIES = libr3.la libr3_la_SOURCES = node.c edge.c list.c str.c token.c gvc.c libr3_la_LIBADD = $(DEPS_LIBS) -AM_CFLAGS = $(DEPS_CFLAGS) -I$(top_builddir) -I$(top_builddir)/include +AM_CFLAGS = $(DEPS_CFLAGS) -I$(top_builddir) -I$(top_builddir)/include -Wall all: all-am .SUFFIXES: diff --git a/src/node.c b/src/node.c index 1262110..a51a3ec 100644 --- a/src/node.c +++ b/src/node.c @@ -169,7 +169,7 @@ void r3_tree_compile_patterns(node * n) { const char *error; int erroffset; - unsigned int option_bits; + unsigned int option_bits = 0; if (n->pcre_pattern) free(n->pcre_pattern); @@ -179,7 +179,7 @@ void r3_tree_compile_patterns(node * n) { // n->pcre_pattern; n->pcre_pattern = pcre_compile( n->combined_pattern, /* the pattern */ - 0, /* default options */ + option_bits, /* default options */ &error, /* for error message */ &erroffset, /* for error offset */ NULL); /* use default character tables */ @@ -357,17 +357,15 @@ node * r3_tree_insert_pathn(node *tree, char *route, int route_len, void * route node * n = tree; edge * e = NULL; - char * p = route; - /* length of common prefix */ - int dl = 0; + int offset = 0; for( int i = 0 ; i < n->edge_len ; i++ ) { - dl = strndiff(route, n->edges[i]->pattern, n->edges[i]->pattern_len); + offset = strndiff(route, n->edges[i]->pattern, n->edges[i]->pattern_len); - // printf("dl: %d %s vs %s\n", dl, route, n->edges[i]->pattern ); + // printf("offset: %d %s vs %s\n", offset, route, n->edges[i]->pattern ); // no common, consider insert a new edge - if ( dl > 0 ) { + if ( offset > 0 ) { e = n->edges[i]; break; } @@ -377,13 +375,13 @@ node * r3_tree_insert_pathn(node *tree, char *route, int route_len, void * route char *slug_s = strchr(route, '{'); char *slug_e = strchr(route, '}'); if ( slug_s && slug_e ) { - if ( dl > (slug_s - route) && dl < (slug_e - route) ) { + if ( offset > (slug_s - route) && offset < (slug_e - route) ) { // break before '{' - dl = slug_s - route; + offset = slug_s - route; } } - if ( dl == 0 ) { + if ( offset == 0 ) { // not found, we should just insert a whole new edge node * child = r3_tree_create(3); r3_tree_add_child(n, strndup(route, route_len) , child); @@ -391,10 +389,10 @@ node * r3_tree_insert_pathn(node *tree, char *route, int route_len, void * route child->route_ptr = route_ptr; child->endpoint++; return child; - } else if ( dl == e->pattern_len ) { // fully-equal to the pattern of the edge + } else if ( offset == e->pattern_len ) { // fully-equal to the pattern of the edge - char * subroute = route + dl; - int subroute_len = route_len - dl; + char * subroute = route + offset; + int subroute_len = route_len - offset; // there are something more we can insert if ( subroute_len > 0 ) { @@ -406,8 +404,8 @@ node * r3_tree_insert_pathn(node *tree, char *route, int route_len, void * route return e->child; } - } else if ( dl < e->pattern_len ) { - // printf("branch the edge dl: %d\n", dl); + } else if ( offset < e->pattern_len ) { + // printf("branch the edge offset: %d\n", offset); /* it's partially matched with the pattern, @@ -415,14 +413,14 @@ node * r3_tree_insert_pathn(node *tree, char *route, int route_len, void * route */ node *c2; // child 1, child 2 edge *e2; // edge 1, edge 2 - char * s2 = route + dl; + char * s2 = route + offset; int s2_len = 0; - r3_edge_branch(e, dl); + r3_edge_branch(e, offset); // here is the new edge from. c2 = r3_tree_create(3); - s2_len = route_len - dl; + s2_len = route_len - offset; e2 = r3_edge_create(strndup(s2, s2_len), s2_len, c2); // printf("edge right: %s\n", e2->pattern); r3_tree_append_edge(e->child, e2); @@ -430,8 +428,8 @@ node * r3_tree_insert_pathn(node *tree, char *route, int route_len, void * route char *op = e->pattern; // truncate the original edge pattern - e->pattern = strndup(e->pattern, dl); - e->pattern_len = dl; + e->pattern = strndup(e->pattern, offset); + e->pattern_len = offset; free(op); // move n->edges to c1