From: Florian Forster Date: Mon, 12 Jul 2010 08:31:35 +0000 (+0200) Subject: src/utils_search.h: Implement "search_graph_inst_matches". X-Git-Tag: v4.0.0~109 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=693d0fc42b7f32eddc61c266dc4fb2dc716c8ea6;p=collection4.git src/utils_search.h: Implement "search_graph_inst_matches". --- diff --git a/src/utils_search.c b/src/utils_search.c index 6ed9c17..ba5927b 100644 --- a/src/utils_search.c +++ b/src/utils_search.c @@ -28,6 +28,7 @@ #include #include "utils_search.h" +#include "graph_instance.h" #include "utils_array.h" #include @@ -233,4 +234,42 @@ void search_destroy (search_info_t *si) /* {{{ */ array_destroy (si->terms); } /* }}} void search_destroy */ +_Bool search_graph_inst_matches (search_info_t *si, /* {{{ */ + graph_config_t *cfg, graph_instance_t *inst) +{ + char **argv; + int argc; + int i; + + if ((si == NULL) || (cfg == NULL) || (inst == NULL)) + return (0); + + if ((si->host != NULL) + && !inst_matches_field (inst, GIF_HOST, si->host)) + return (0); + else if ((si->plugin != NULL) + && !inst_matches_field (inst, GIF_PLUGIN, si->plugin)) + return (0); + else if ((si->plugin_instance != NULL) + && !inst_matches_field (inst, GIF_PLUGIN_INSTANCE, si->plugin_instance)) + return (0); + else if ((si->type != NULL) + && !inst_matches_field (inst, GIF_TYPE, si->type)) + return (0); + else if ((si->type_instance != NULL) + && !inst_matches_field (inst, GIF_TYPE_INSTANCE, si->type_instance)) + 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 (!inst_matches_string (cfg, inst, argv[i])) + return (0); + + return (1); +} /* }}} _Bool search_graph_inst_matches */ + /* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/utils_search.h b/src/utils_search.h index a1fa643..fc3f40c 100644 --- a/src/utils_search.h +++ b/src/utils_search.h @@ -24,12 +24,17 @@ #ifndef UTILS_SEARCH_H #define UTILS_SEARCH_H 1 +#include "graph_types.h" + struct search_info_s; typedef struct search_info_s search_info_t; search_info_t *search_parse (const char *search); void search_destroy (search_info_t *si); +_Bool search_graph_inst_matches (search_info_t *si, + graph_config_t *cfg, graph_instance_t *inst); + #endif /* UTILS_SEARCH_H */ /* vim: set sw=2 sts=2 et fdm=marker : */