From eceb676f7780ab7490b32708131f5c115e838427 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 12 Jul 2010 18:55:07 +0200 Subject: [PATCH] src/graph_ident.[ch]: Implement "ident_intersect". --- src/graph_ident.c | 21 +++++++++++++++++++++ src/graph_ident.h | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/src/graph_ident.c b/src/graph_ident.c index 7dda849..119571f 100644 --- a/src/graph_ident.c +++ b/src/graph_ident.c @@ -426,6 +426,27 @@ _Bool ident_matches (const graph_ident_t *selector, /* {{{ */ return (1); } /* }}} _Bool ident_matches */ +_Bool ident_intersect (const graph_ident_t *s0, /* {{{ */ + const graph_ident_t *s1) +{ +#define INTERSECT_PART(p) do { \ + if (!IS_ANY (s0->p) && !IS_ALL (s0->p) \ + && !IS_ANY (s1->p) && !IS_ALL (s1->p) \ + && (strcmp (s0->p, s1->p) != 0)) \ + return (0); \ +} while (0) + + INTERSECT_PART (host); + INTERSECT_PART (plugin); + INTERSECT_PART (plugin_instance); + INTERSECT_PART (type); + INTERSECT_PART (type_instance); + +#undef INTERSECT_PART + + return (1); +} /* }}} _Bool ident_intersect */ + char *ident_to_string (const graph_ident_t *ident) /* {{{ */ { char buffer[PATH_MAX]; diff --git a/src/graph_ident.h b/src/graph_ident.h index 4eced2d..e433fa7 100644 --- a/src/graph_ident.h +++ b/src/graph_ident.h @@ -78,6 +78,12 @@ int ident_compare (const graph_ident_t *i0, _Bool ident_matches (const graph_ident_t *selector, const graph_ident_t *ident); +/* The "ident_intersect" function takes two selectors and returns true if a + * file may apply to both selectors. If the selectors contradict one another, + * for example one issuing "plugin = cpu" and the other "plugin = memory", + * then false is returned. */ +_Bool ident_intersect (const graph_ident_t *s0, const graph_ident_t *s1); + char *ident_to_string (const graph_ident_t *ident); char *ident_to_file (const graph_ident_t *ident); char *ident_to_json (const graph_ident_t *ident); -- 2.11.0