summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/smap.c20
-rw-r--r--lib/smap.h2
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/smap.c b/lib/smap.c
index 7fe3ce41c..8865a8898 100644
--- a/lib/smap.c
+++ b/lib/smap.c
@@ -302,6 +302,26 @@ smap_to_json(const struct smap *smap)
}
return json;
}
+
+/* Returns true if the two maps are equal, meaning that they have the same set
+ * of key-value pairs.
+ */
+bool
+smap_equal(const struct smap *smap1, const struct smap *smap2)
+{
+ if (smap_count(smap1) != smap_count(smap2)) {
+ return false;
+ }
+
+ const struct smap_node *node;
+ SMAP_FOR_EACH (node, smap1) {
+ const char *value2 = smap_get(smap2, node->key);
+ if (!value2 || strcmp(node->value, value2)) {
+ return false;
+ }
+ }
+ return true;
+}
/* Private Helpers. */
diff --git a/lib/smap.h b/lib/smap.h
index caf3efcac..cac387899 100644
--- a/lib/smap.h
+++ b/lib/smap.h
@@ -67,4 +67,6 @@ const struct smap_node **smap_sort(const struct smap *);
void smap_from_json(struct smap *, const struct json *);
struct json *smap_to_json(const struct smap *);
+bool smap_equal(const struct smap *, const struct smap *);
+
#endif /* smap.h */