[pulseaudio-discuss] [PATCH 1/2] hashmap: Add pa_hashmap_remove_and_free()
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Wed Mar 26 08:39:47 PDT 2014
---
src/pulsecore/hashmap.c | 13 +++++++++++++
src/pulsecore/hashmap.h | 7 +++++++
2 files changed, 20 insertions(+)
diff --git a/src/pulsecore/hashmap.c b/src/pulsecore/hashmap.c
index acac1e0..2cc03cb 100644
--- a/src/pulsecore/hashmap.c
+++ b/src/pulsecore/hashmap.c
@@ -207,6 +207,19 @@ void* pa_hashmap_remove(pa_hashmap *h, const void *key) {
return data;
}
+int pa_hashmap_remove_and_free(pa_hashmap *h, const void *key) {
+ void *data;
+
+ pa_assert(h);
+
+ data = pa_hashmap_remove(h, key);
+
+ if (data && h->value_free_func)
+ h->value_free_func(data);
+
+ return data ? 0 : -1;
+}
+
void pa_hashmap_remove_all(pa_hashmap *h) {
pa_assert(h);
diff --git a/src/pulsecore/hashmap.h b/src/pulsecore/hashmap.h
index e42732a..8042f7b 100644
--- a/src/pulsecore/hashmap.h
+++ b/src/pulsecore/hashmap.h
@@ -52,6 +52,13 @@ void* pa_hashmap_get(pa_hashmap *h, const void *key);
/* Returns the data of the entry while removing */
void* pa_hashmap_remove(pa_hashmap *h, const void *key);
+/* Removes the entry and frees the entry data. Returns a negative value if the
+ * entry is not found. FIXME: This function shouldn't be needed.
+ * pa_hashmap_remove() should free the entry data, and the current semantics of
+ * pa_hashmap_remove() should be implemented by a function called
+ * pa_hashmap_steal(). */
+int pa_hashmap_remove_and_free(pa_hashmap *h, const void *key);
+
/* Remove all entries but don't free the hashmap */
void pa_hashmap_remove_all(pa_hashmap *h);
--
1.8.3.1
More information about the pulseaudio-discuss
mailing list