summaryrefslogtreecommitdiff
path: root/lib/ovsdb-data.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2010-09-23 09:43:46 -0700
committerBen Pfaff <blp@nicira.com>2010-09-23 11:45:35 -0700
commite4af561537cfea7d35d2075596b4474847876794 (patch)
tree26a332fc82ad8254b506634ae7fa309757a3ff29 /lib/ovsdb-data.c
parent4f2226487d3522654876885d769510b835c5f5ee (diff)
downloadopenvswitch-e4af561537cfea7d35d2075596b4474847876794.tar.gz
ovsdb-data: New function ovsdb_datum_from_shash().
Diffstat (limited to 'lib/ovsdb-data.c')
-rw-r--r--lib/ovsdb-data.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/ovsdb-data.c b/lib/ovsdb-data.c
index 9c54fe81b..492da7fa5 100644
--- a/lib/ovsdb-data.c
+++ b/lib/ovsdb-data.c
@@ -1444,6 +1444,31 @@ ovsdb_datum_to_string(const struct ovsdb_datum *datum,
}
}
+/* Initializes 'datum' as a string-to-string map whose contents are taken from
+ * 'sh'. Destroys 'sh'. */
+void
+ovsdb_datum_from_shash(struct ovsdb_datum *datum, struct shash *sh)
+{
+ struct shash_node *node, *next;
+ size_t i;
+
+ datum->n = shash_count(sh);
+ datum->keys = xmalloc(datum->n * sizeof *datum->keys);
+ datum->values = xmalloc(datum->n * sizeof *datum->values);
+
+ i = 0;
+ SHASH_FOR_EACH_SAFE (node, next, sh) {
+ datum->keys[i].string = node->name;
+ datum->values[i].string = node->data;
+ shash_steal(sh, node);
+ i++;
+ }
+ assert(i == datum->n);
+
+ shash_destroy(sh);
+ ovsdb_datum_sort_unique(datum, OVSDB_TYPE_STRING, OVSDB_TYPE_STRING);
+}
+
static uint32_t
hash_atoms(enum ovsdb_atomic_type type, const union ovsdb_atom *atoms,
unsigned int n, uint32_t basis)