From: Florian Forster Date: Mon, 12 Jul 2010 09:44:12 +0000 (+0200) Subject: src/utils_search.[ch]: Implement "search_to_ident" and "search_graph_title_matches". X-Git-Tag: v4.0.0~102 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=50e4d660056be2bd4fd96b4cc1c980df5064202d;p=collection4.git src/utils_search.[ch]: Implement "search_to_ident" and "search_graph_title_matches". The "title" argument has been added to the "search_graph_inst_matches" function, too. --- diff --git a/src/utils_search.c b/src/utils_search.c index ba5927b..e2a89f3 100644 --- a/src/utils_search.c +++ b/src/utils_search.c @@ -234,8 +234,43 @@ void search_destroy (search_info_t *si) /* {{{ */ array_destroy (si->terms); } /* }}} void search_destroy */ +graph_ident_t *search_to_ident (search_info_t *si) /* {{{ */ +{ + if (si == NULL) + return (NULL); + + return (ident_create ((si->host == NULL) ? ANY_TOKEN : si->host, + (si->plugin == NULL) ? ANY_TOKEN : si->plugin, + (si->plugin_instance == NULL) ? ANY_TOKEN : si->plugin_instance, + (si->type == NULL) ? ANY_TOKEN : si->type, + (si->type_instance == NULL) ? ANY_TOKEN : si->type_instance)); +} /* }}} graph_ident_t *search_to_ident */ + +_Bool search_graph_title_matches (search_info_t *si, /* {{{ */ + const char *title) +{ + char **argv; + int argc; + int i; + + if ((si == NULL) || (title == NULL)) + return (0); + + if (si->terms == NULL) + return (1); + + argc = array_argc (si->terms); + argv = array_argv (si->terms); + for (i = 0; i < argc; i++) + if (strstr (title, argv[i]) == NULL) + return (0); + + return (1); +} /* }}} _Bool search_graph_title_matches */ + _Bool search_graph_inst_matches (search_info_t *si, /* {{{ */ - graph_config_t *cfg, graph_instance_t *inst) + graph_config_t *cfg, graph_instance_t *inst, + const char *title) { char **argv; int argc; @@ -266,8 +301,15 @@ _Bool search_graph_inst_matches (search_info_t *si, /* {{{ */ argc = array_argc (si->terms); argv = array_argv (si->terms); for (i = 0; i < argc; i++) - if (!inst_matches_string (cfg, inst, argv[i])) - return (0); + { + if (inst_matches_string (cfg, inst, argv[i])) + continue; + + if ((title != NULL) && (strstr (title, argv[i]) != NULL)) + continue; + + return (0); + } return (1); } /* }}} _Bool search_graph_inst_matches */ diff --git a/src/utils_search.h b/src/utils_search.h index fc3f40c..5e3e2b8 100644 --- a/src/utils_search.h +++ b/src/utils_search.h @@ -32,8 +32,13 @@ typedef struct search_info_s search_info_t; search_info_t *search_parse (const char *search); void search_destroy (search_info_t *si); +graph_ident_t *search_to_ident (search_info_t *si); + +_Bool search_graph_title_matches (search_info_t *si, const char *title); + _Bool search_graph_inst_matches (search_info_t *si, - graph_config_t *cfg, graph_instance_t *inst); + graph_config_t *cfg, graph_instance_t *inst, + const char *title); #endif /* UTILS_SEARCH_H */ /* vim: set sw=2 sts=2 et fdm=marker : */