smap: New function smap_steal().
authorBen Pfaff <blp@nicira.com>
Wed, 27 Jun 2012 18:06:10 +0000 (11:06 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 18 Jul 2012 17:30:50 +0000 (10:30 -0700)
An upcoming commit will add a caller.

Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/smap.c
lib/smap.h

index e612ac7bad7749bf1a8212cf98af2e91ad177704..ff785981226425d7a42dd34e44e44d2ea617a295 100644 (file)
@@ -125,6 +125,18 @@ smap_remove_node(struct smap *smap, struct smap_node *node)
     free(node);
 }
 
+/* Deletes 'node' from 'sh'.  Neither the node's key nor its value is freed;
+ * instead, ownership is transferred to the caller.  Returns the node's key. */
+char *
+smap_steal(struct smap *smap, struct smap_node *node)
+{
+    char *key = node->key;
+
+    hmap_remove(&smap->map, &node->node);
+    free(node);
+    return key;
+}
+
 /* Removes all key-value pairs from 'smap'. */
 void
 smap_clear(struct smap *smap)
index 8510a3761efabda1a127f680e64d1e8a36935931..13eec1c4f4d6262f3c458f3761a52c64f13a6f40 100644 (file)
@@ -48,7 +48,8 @@ void smap_add_format(struct smap *, const char *key, const char *, ...)
 void smap_replace(struct smap *, const char *, const char *);
 
 void smap_remove(struct smap *, const char *);
-void smap_remove_node(struct smap *smap, struct smap_node *);
+void smap_remove_node(struct smap *, struct smap_node *);
+char *smap_steal(struct smap *, struct smap_node *);
 void smap_clear(struct smap *);
 
 const char *smap_get(const struct smap *, const char *);