From e4af561537cfea7d35d2075596b4474847876794 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 23 Sep 2010 09:43:46 -0700 Subject: [PATCH] ovsdb-data: New function ovsdb_datum_from_shash(). --- lib/ovsdb-data.c | 25 +++++++++++++++++++++++++ lib/ovsdb-data.h | 3 +++ 2 files changed, 28 insertions(+) diff --git a/lib/ovsdb-data.c b/lib/ovsdb-data.c index 9c54fe81..492da7fa 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) diff --git a/lib/ovsdb-data.h b/lib/ovsdb-data.h index ae0faa26..f7e98a84 100644 --- a/lib/ovsdb-data.h +++ b/lib/ovsdb-data.h @@ -22,6 +22,7 @@ struct ds; struct ovsdb_symbol_table; +struct shash; /* One value of an atomic type (given by enum ovs_atomic_type). */ union ovsdb_atom { @@ -167,6 +168,8 @@ char *ovsdb_datum_from_string(struct ovsdb_datum *, void ovsdb_datum_to_string(const struct ovsdb_datum *, const struct ovsdb_type *, struct ds *); +void ovsdb_datum_from_shash(struct ovsdb_datum *, struct shash *); + /* Comparison. */ uint32_t ovsdb_datum_hash(const struct ovsdb_datum *, const struct ovsdb_type *, uint32_t basis); -- 2.30.2