From: Florian Forster Date: Sat, 23 Dec 2023 19:30:05 +0000 (+0100) Subject: src/daemon/metric.[ch]: Export `label_set_get` and `label_set_update`. X-Git-Tag: 6.0.0-rc0~23^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ebc1acd2c82eb210f53727d9fe26c9847d2bb8f7;p=thirdparty%2Fcollectd.git src/daemon/metric.[ch]: Export `label_set_get` and `label_set_update`. --- diff --git a/src/daemon/metric.c b/src/daemon/metric.c index f7b816c90..e8ae2398d 100644 --- a/src/daemon/metric.c +++ b/src/daemon/metric.c @@ -64,8 +64,8 @@ static int label_name_compare(void const *a, void const *b) { ((label_pair_t const *)b)->name); } -static label_pair_t *label_set_read(label_set_t const *labels, - char const *name) { +static label_pair_t *label_set_lookup(label_set_t const *labels, + char const *name) { if (name == NULL) { errno = EINVAL; return NULL; @@ -88,6 +88,15 @@ static label_pair_t *label_set_read(label_set_t const *labels, return ret; } +char const *label_set_get(label_set_t labels, char const *name) { + label_pair_t *l = label_set_lookup(&labels, name); + if (l == NULL) { + return NULL; + } + + return l->value; +} + int label_set_add(label_set_t *labels, char const *name, char const *value) { if ((labels == NULL) || (name == NULL) || (value == NULL)) { return EINVAL; @@ -103,7 +112,7 @@ int label_set_add(label_set_t *labels, char const *name, char const *value) { return EINVAL; } - if (label_set_read(labels, name) != NULL) { + if (label_set_get(*labels, name) != NULL) { return EEXIST; } errno = 0; @@ -166,13 +175,12 @@ static int label_set_delete(label_set_t *labels, label_pair_t *elem) { return 0; } -static int label_set_update(label_set_t *labels, char const *name, - char const *value) { +int label_set_update(label_set_t *labels, char const *name, char const *value) { if ((labels == NULL) || (name == NULL)) { return EINVAL; } - label_pair_t *label = label_set_read(labels, name); + label_pair_t *label = label_set_lookup(labels, name); if ((label == NULL) && (errno != ENOENT)) { return errno; } @@ -318,12 +326,7 @@ char const *metric_label_get(metric_t const *m, char const *name) { return NULL; } - label_pair_t *set = label_set_read(&m->label, name); - if (set == NULL) { - return NULL; - } - - return set->value; + return label_set_get(m->label, name); } static int metric_list_add(metric_list_t *metrics, metric_t m) { diff --git a/src/daemon/metric.h b/src/daemon/metric.h index ba80fcf03..e741ab9e7 100644 --- a/src/daemon/metric.h +++ b/src/daemon/metric.h @@ -75,10 +75,19 @@ typedef struct { * returned. */ int label_set_clone(label_set_t *dest, label_set_t src); +/* label_set_get looks up the label pair by name, and returns the associated + * value. Returns NULL and sets errno to ENOENT if the label doesn't exist. */ +char const *label_set_get(label_set_t labels, char const *name); + /* label_set_add adds a label to the label set. If a label with name already * exists, EEXIST is returned. The set of labels is sorted by label name. */ int label_set_add(label_set_t *labels, char const *name, char const *value); +/* label_set_update adds, updates, or deletes a label pair. If "value" is NULL + * or an empty string, the label is removed. + * Removing a label that does not exist is *not* an error. */ +int label_set_update(label_set_t *labels, char const *name, char const *value); + /* label_set_reset frees all the memory referenced by the label set and * initializes the label set to zero. */ void label_set_reset(label_set_t *labels);