return error;
}
-/* This is the same as ovsdb_datum_from_json(), except that duplicate values
- * in a set or map are dropped instead of being treated as an error. */
-struct ovsdb_error *
-ovsdb_datum_from_json_unique(struct ovsdb_datum *datum,
- const struct ovsdb_type *type,
- const struct json *json,
- struct ovsdb_symbol_table *symtab)
-{
- struct ovsdb_error *error;
-
- error = ovsdb_datum_from_json__(datum, type, json, symtab);
- if (!error) {
- ovsdb_datum_sort_unique(datum, type->key.type, type->value.type);
- }
- return error;
-}
-
/* Converts 'datum', of the specified 'type', to JSON format, and returns the
* JSON. The caller is responsible for freeing the returned JSON.
*
}
}
+/* 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)