From: Florian Forster Date: Wed, 14 Jul 2010 14:49:20 +0000 (+0200) Subject: src/graph_ident.[ch]: Implement "ident_describe". X-Git-Tag: v4.0.0~91 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=0d346a62412563396fe2ad3e40066ed5c21a69ee;p=collection4.git src/graph_ident.[ch]: Implement "ident_describe". --- diff --git a/src/graph_ident.c b/src/graph_ident.c index 119571f..6111fe7 100644 --- a/src/graph_ident.c +++ b/src/graph_ident.c @@ -531,6 +531,39 @@ char *ident_to_json (const graph_ident_t *ident) /* {{{ */ #undef ADD_FIELD +int ident_describe (const graph_ident_t *ident, /* {{{ */ + const graph_ident_t *selector, + char *buffer, size_t buffer_size) +{ + if ((ident == NULL) || (selector == NULL) + || (buffer == NULL) || (buffer_size < 2)) + return (EINVAL); + + buffer[0] = 0; + +#define CHECK_FIELD(field) do { \ + if (strcasecmp (selector->field, ident->field) != 0) \ + { \ + if (buffer[0] != 0) \ + strlcat (buffer, "/", buffer_size); \ + strlcat (buffer, ident->field, buffer_size); \ + } \ +} while (0) + + CHECK_FIELD (host); + CHECK_FIELD (plugin); + CHECK_FIELD (plugin_instance); + CHECK_FIELD (type); + CHECK_FIELD (type_instance); + +#undef CHECK_FIELD + + if (buffer[0] == 0) + strlcat (buffer, "default", buffer_size); + + return (0); +} /* }}} int ident_describe */ + time_t ident_get_mtime (const graph_ident_t *ident) /* {{{ */ { char *file; diff --git a/src/graph_ident.h b/src/graph_ident.h index e433fa7..5787ad5 100644 --- a/src/graph_ident.h +++ b/src/graph_ident.h @@ -88,6 +88,9 @@ 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); +int ident_describe (const graph_ident_t *ident, const graph_ident_t *selector, + char *buffer, size_t buffer_size); + time_t ident_get_mtime (const graph_ident_t *ident); /* vim: set sw=2 sts=2 et fdm=marker : */