diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/HtmlSearch.c | 14 | ||||
-rw-r--r-- | src/NodeSearch.c | 2 | ||||
-rw-r--r-- | src/XpathParser.c | 3 |
3 files changed, 11 insertions, 8 deletions
diff --git a/src/HtmlSearch.c b/src/HtmlSearch.c index e59dc1e..c3608dd 100644 --- a/src/HtmlSearch.c +++ b/src/HtmlSearch.c @@ -41,7 +41,7 @@ static void find_child_nodes(TidyDoc tdoc, TidyNode node, const QuickMediaNodeSe } while(0) /* If we search without param, then it's a match */ - if(!search_data->param_defined) { + if(!search_data->param.defined) { on_match(); continue; } @@ -123,8 +123,12 @@ static int quickmedia_html_find_nodes(const char *html_source, QuickMediaNodeSea int quickmedia_html_find_nodes_xpath(const char *html_source, const char *xpath, QuickMediaHtmlSearchResultCallback result_callback, void *userdata) { QuickMediaNodeSearch search_data; - int xpath_result = quickmedia_parse_xpath(xpath, &search_data); - if(xpath_result != 0) - return xpath_result; - return quickmedia_html_find_nodes(html_source, &search_data, result_callback, userdata); + quickmedia_node_search_init(&search_data); + int result = quickmedia_parse_xpath(xpath, &search_data); + if(result != 0) + goto cleanup; + result = quickmedia_html_find_nodes(html_source, &search_data, result_callback, userdata); + cleanup: + quickmedia_node_search_deinit(&search_data); + return result; } diff --git a/src/NodeSearch.c b/src/NodeSearch.c index 198b8cd..0a36215 100644 --- a/src/NodeSearch.c +++ b/src/NodeSearch.c @@ -4,6 +4,7 @@ void quickmedia_node_search_param_init(QuickMediaNodeSearchParam *self) { self->name = NULL; self->value = NULL; + self->defined = 0; } static void quickmedia_node_search_param_deinit(QuickMediaNodeSearchParam *self) { @@ -17,7 +18,6 @@ void quickmedia_node_search_init(QuickMediaNodeSearch *self) { self->name = NULL; self->recursive = 0; quickmedia_node_search_param_init(&self->param); - self->param_defined = 0; self->child = NULL; } diff --git a/src/XpathParser.c b/src/XpathParser.c index 24e1d6e..4326e85 100644 --- a/src/XpathParser.c +++ b/src/XpathParser.c @@ -35,6 +35,7 @@ static int xpath_parse_param(QuickMediaXpathParser *self, QuickMediaNodeSearchPa if(token != QUICKMEDIA_XPATH_TOKEN_CLOSING_BRACKET) return -4; + result->defined = 1; return 0; } @@ -55,8 +56,6 @@ static int xpath_parse_node(QuickMediaXpathParser *self, QuickMediaNodeSearch *r if(param_result < 0) { quickmedia_node_search_deinit(result); return param_result; - } else if(param_result == 0) { - result->param_defined = 1; } result->child = malloc(sizeof(QuickMediaNodeSearch)); |