X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fsmap.c;h=b81ac09c2509c46878c4c46eec1023ece877690f;hb=f606c7e99465477cf0533ecbc4795a0f8fe635e0;hp=e612ac7bad7749bf1a8212cf98af2e91ad177704;hpb=cccc13569249376eb2e1a364e07dfc33a745d791;p=openvswitch diff --git a/lib/smap.c b/lib/smap.c index e612ac7b..b81ac09c 100644 --- a/lib/smap.c +++ b/lib/smap.c @@ -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)