]> code.delx.au - pulseaudio/blobdiff - src/pulsecore/device-port.c
hashmap: Add the ability to free keys
[pulseaudio] / src / pulsecore / device-port.c
index acfc44df55d998ed9f542436909c8b1894e54d2a..0b65d5c49894ca09024ead06ed2cc8c5815b6f84 100644 (file)
 
 PA_DEFINE_PUBLIC_CLASS(pa_device_port, pa_object);
 
-void pa_device_port_set_available(pa_device_port *p, pa_available_t status)
-{
+pa_device_port_new_data *pa_device_port_new_data_init(pa_device_port_new_data *data) {
+    pa_assert(data);
+
+    pa_zero(*data);
+    data->available = PA_AVAILABLE_UNKNOWN;
+    return data;
+}
+
+void pa_device_port_new_data_set_name(pa_device_port_new_data *data, const char *name) {
+    pa_assert(data);
+
+    pa_xfree(data->name);
+    data->name = pa_xstrdup(name);
+}
+
+void pa_device_port_new_data_set_description(pa_device_port_new_data *data, const char *description) {
+    pa_assert(data);
+
+    pa_xfree(data->description);
+    data->description = pa_xstrdup(description);
+}
+
+void pa_device_port_new_data_set_available(pa_device_port_new_data *data, pa_available_t available) {
+    pa_assert(data);
+
+    data->available = available;
+}
+
+void pa_device_port_new_data_set_direction(pa_device_port_new_data *data, pa_direction_t direction) {
+    pa_assert(data);
+
+    data->direction = direction;
+}
+
+void pa_device_port_new_data_done(pa_device_port_new_data *data) {
+    pa_assert(data);
+
+    pa_xfree(data->name);
+    pa_xfree(data->description);
+}
+
+void pa_device_port_set_available(pa_device_port *p, pa_available_t status) {
     pa_core *core;
 
     pa_assert(p);
@@ -58,31 +98,35 @@ static void device_port_free(pa_object *o) {
         pa_proplist_free(p->proplist);
 
     if (p->profiles)
-        pa_hashmap_free(p->profiles, NULL);
+        pa_hashmap_free(p->profiles);
 
     pa_xfree(p->name);
     pa_xfree(p->description);
     pa_xfree(p);
 }
 
-
-pa_device_port *pa_device_port_new(pa_core *c, const char *name, const char *description, pa_direction_t direction, size_t extra) {
+pa_device_port *pa_device_port_new(pa_core *c, pa_device_port_new_data *data, size_t extra) {
     pa_device_port *p;
 
-    pa_assert(name);
+    pa_assert(data);
+    pa_assert(data->name);
+    pa_assert(data->description);
+    pa_assert(data->direction == PA_DIRECTION_OUTPUT || data->direction == PA_DIRECTION_INPUT);
 
     p = PA_DEVICE_PORT(pa_object_new_internal(PA_ALIGN(sizeof(pa_device_port)) + extra, pa_device_port_type_id, pa_device_port_check_type));
     p->parent.free = device_port_free;
 
-    p->core = c;
-    p->name = pa_xstrdup(name);
-    p->description = pa_xstrdup(description);
+    p->name = data->name;
+    data->name = NULL;
+    p->description = data->description;
+    data->description = NULL;
     p->core = c;
     p->card = NULL;
     p->priority = 0;
-    p->available = PA_AVAILABLE_UNKNOWN;
+    p->available = data->available;
     p->profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
-    p->direction = direction;
+    p->direction = data->direction;
+
     p->latency_offset = 0;
     p->proplist = pa_proplist_new();