]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
src/daemon/metric.[ch]: Export `label_set_get` and `label_set_update`.
authorFlorian Forster <octo@collectd.org>
Sat, 23 Dec 2023 19:30:05 +0000 (20:30 +0100)
committerFlorian Forster <octo@collectd.org>
Thu, 28 Dec 2023 19:13:31 +0000 (20:13 +0100)
src/daemon/metric.c
src/daemon/metric.h

index f7b816c90c67e6091c57932e331dd686a877f473..e8ae2398da93475ef791159c56fd792c029d0510 100644 (file)
@@ -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) {
index ba80fcf0316dd7a2bf187894f9204dcbdbf330b1..e741ab9e78e5f2a2479ff62c06a1059863a4130b 100644 (file)
@@ -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);