((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;
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;
return EINVAL;
}
- if (label_set_read(labels, name) != NULL) {
+ if (label_set_get(*labels, name) != NULL) {
return EEXIST;
}
errno = 0;
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;
}
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) {
* 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);