X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fsmap.c;h=0d757330552fd1b6758b11387b1d439bc2905de4;hb=0ef165ecb57943e17a8ee8270df68ffb8d032e29;hp=e612ac7bad7749bf1a8212cf98af2e91ad177704;hpb=cccc13569249376eb2e1a364e07dfc33a745d791;p=sliver-openvswitch.git diff --git a/lib/smap.c b/lib/smap.c index e612ac7ba..0d7573305 100644 --- a/lib/smap.c +++ b/lib/smap.c @@ -15,7 +15,7 @@ #include #include "smap.h" -#include +#include #include "hash.h" #include "json.h" @@ -125,6 +125,31 @@ smap_remove_node(struct smap *smap, struct smap_node *node) free(node); } +/* Deletes 'node' from 'smap'. + * + * If 'keyp' is nonnull, stores the node's key in '*keyp' and transfers + * ownership to the caller. Otherwise, frees the node's key. Similarly for + * 'valuep' and the node's value. */ +void +smap_steal(struct smap *smap, struct smap_node *node, + char **keyp, char **valuep) +{ + if (keyp) { + *keyp = node->key; + } else { + free(node->key); + } + + if (valuep) { + *valuep = node->value; + } else { + free(node->value); + } + + hmap_remove(&smap->map, &node->node); + free(node); +} + /* Removes all key-value pairs from 'smap'. */ void smap_clear(struct smap *smap) @@ -226,7 +251,7 @@ smap_sort(const struct smap *smap) SMAP_FOR_EACH (node, smap) { nodes[i++] = node; } - assert(i == n); + ovs_assert(i == n); qsort(nodes, n, sizeof *nodes, compare_nodes_by_key);