X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgraph.c;h=fc6a636e4660dd32985b03127a3e9d469bfac832;hb=417610268a16cb4b84d79bf449b1f70142791676;hp=02b3ebf7bc36b692218ada66700d6ddeab043cd5;hpb=d3cf935b4ec35cb4acedb6c278177bdd4e1776cb;p=collection4.git diff --git a/src/graph.c b/src/graph.c index 02b3ebf..fc6a636 100644 --- a/src/graph.c +++ b/src/graph.c @@ -388,6 +388,8 @@ int graph_inst_search_field (graph_config_t *cfg, /* {{{ */ graph_inst_callback_t callback, void *user_data) { size_t i; + const char *selector_field; + _Bool need_check_instances = 0; if ((cfg == NULL) || (field_value == NULL) || (callback == NULL)) return (EINVAL); @@ -395,16 +397,24 @@ int graph_inst_search_field (graph_config_t *cfg, /* {{{ */ if (!graph_matches_field (cfg, field, field_value)) return (0); + selector_field = ident_get_field (cfg->select, field); + if (selector_field == NULL) + return (-1); + + if (IS_ALL (selector_field) || IS_ANY (selector_field)) + need_check_instances = 1; + for (i = 0; i < cfg->instances_num; i++) { - if (inst_matches_field (cfg->instances[i], field, field_value)) - { - int status; + int status; - status = (*callback) (cfg, cfg->instances[i], user_data); - if (status != 0) - return (status); - } + if (need_check_instances + && !inst_matches_field (cfg->instances[i], field, field_value)) + continue; + + status = (*callback) (cfg, cfg->instances[i], user_data); + if (status != 0) + return (status); } return (0);