X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fovsdb-data.c;h=3e6f20bbee239b85291e0680891d9d608d4fb8de;hb=32cd83a272ab4b00ba6c167e021ebfdddf6337ec;hp=1781811917d2ee04df5f190da7622df3073a8e91;hpb=6a6f8d167357a1f1751cdd54b9491c531a371ae1;p=openvswitch diff --git a/lib/ovsdb-data.c b/lib/ovsdb-data.c index 17818119..3e6f20bb 100644 --- a/lib/ovsdb-data.c +++ b/lib/ovsdb-data.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2010, 2011 Nicira Networks +/* Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ #include "ovsdb-parser.h" #include "json.h" #include "shash.h" +#include "smap.h" #include "sort.h" #include "unicode.h" @@ -590,6 +591,7 @@ ovsdb_atom_from_string(union ovsdb_atom *atom, error = ovsdb_atom_check_constraints(atom, base); if (error) { + ovsdb_atom_destroy(atom, base->type); msg = ovsdb_error_to_string(error); ovsdb_error_destroy(error); } @@ -1523,27 +1525,26 @@ ovsdb_datum_to_bare(const struct ovsdb_datum *datum, } /* Initializes 'datum' as a string-to-string map whose contents are taken from - * 'sh'. Destroys 'sh'. */ + * 'smap'. Destroys 'smap'. */ void -ovsdb_datum_from_shash(struct ovsdb_datum *datum, struct shash *sh) +ovsdb_datum_from_smap(struct ovsdb_datum *datum, struct smap *smap) { - struct shash_node *node, *next; + struct smap_node *node, *next; size_t i; - datum->n = shash_count(sh); + datum->n = smap_count(smap); 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); + SMAP_FOR_EACH_SAFE (node, next, smap) { + smap_steal(smap, node, + &datum->keys[i].string, &datum->values[i].string); i++; } assert(i == datum->n); - shash_destroy(sh); + smap_destroy(smap); ovsdb_datum_sort_unique(datum, OVSDB_TYPE_STRING, OVSDB_TYPE_STRING); } @@ -1687,6 +1688,9 @@ ovsdb_datum_includes_all(const struct ovsdb_datum *a, { size_t i; + if (a->n > b->n) { + return false; + } for (i = 0; i < a->n; i++) { if (ovsdb_datum_find(a, i, b, type) == UINT_MAX) { return false;