X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flibcollectdclient%2Fclient.c;h=2adf6d48821d49590bde1186dd8c047c78eaa17a;hb=28460d4f235bb0272c98c830d14b9d7a73f812b7;hp=f5fe2049334d15c1050a2549fb1492f0d18b70b6;hpb=f1ba2733d2c58fed90c13e9ae31cb7c1f3c5613e;p=collectd.git diff --git a/src/libcollectdclient/client.c b/src/libcollectdclient/client.c index f5fe2049..2adf6d48 100644 --- a/src/libcollectdclient/client.c +++ b/src/libcollectdclient/client.c @@ -228,6 +228,53 @@ static void lcc_chomp (char *str) /* {{{ */ } } /* }}} void lcc_chomp */ +static int lcc_identifier_cmp (const void *a, const void *b) +{ + const lcc_identifier_t *ident_a, *ident_b; + + int status; + + ident_a = a; + ident_b = b; + + status = strcasecmp (ident_a->host, ident_b->host); + if (status != 0) + return (status); + + status = strcmp (ident_a->plugin, ident_b->plugin); + if (status != 0) + return (status); + + if ((*ident_a->plugin_instance != '\0') || (*ident_b->plugin_instance != '\0')) + { + if (*ident_a->plugin_instance == '\0') + return (-1); + else if (*ident_b->plugin_instance == '\0') + return (1); + + status = strcmp (ident_a->plugin_instance, ident_b->plugin_instance); + if (status != 0) + return (status); + } + + status = strcmp (ident_a->type, ident_b->type); + if (status != 0) + return (status); + + if ((*ident_a->type_instance != '\0') || (*ident_b->type_instance != '\0')) + { + if (*ident_a->type_instance == '\0') + return (-1); + else if (*ident_b->type_instance == '\0') + return (1); + + status = strcmp (ident_a->type_instance, ident_b->type_instance); + if (status != 0) + return (status); + } + return (0); +} /* }}} int lcc_identifier_cmp */ + static void lcc_response_free (lcc_response_t *res) /* {{{ */ { size_t i; @@ -1058,4 +1105,17 @@ int lcc_string_to_identifier (lcc_connection_t *c, /* {{{ */ return (0); } /* }}} int lcc_string_to_identifier */ +int lcc_sort_identifiers (lcc_connection_t *c, /* {{{ */ + lcc_identifier_t *idents, size_t idents_num) +{ + if (idents == NULL) + { + lcc_set_errno (c, EINVAL); + return (-1); + } + + qsort (idents, idents_num, sizeof (*idents), lcc_identifier_cmp); + return (0); +} /* }}} int lcc_sort_identifiers */ + /* vim: set sw=2 sts=2 et fdm=marker : */