I think the new place makes more sense. Or if nothing else, at least the parameter list of device_port_alsa_init() is now shorter. --- src/modules/alsa/alsa-mixer.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c index 316f546..5dc0d4f 100644 --- a/src/modules/alsa/alsa-mixer.c +++ b/src/modules/alsa/alsa-mixer.c @@ -4480,18 +4480,30 @@ void pa_alsa_profile_set_drop_unsupported(pa_alsa_profile_set *ps) { } static pa_device_port* device_port_alsa_init(pa_hashmap *ports, /* card ports */ - const char* name, - const char* description, pa_alsa_path *path, pa_alsa_setting *setting, pa_card_profile *cp, pa_hashmap *extra, /* sink/source ports */ pa_core *core) { + char *name = NULL; + char *description = NULL; pa_device_port *p; pa_assert(path); + if (setting) { + name = pa_sprintf_malloc("%s;%s", path->name, setting->name); + + if (setting->description[0]) + description = pa_sprintf_malloc("%s / %s", path->description, setting->description); + else + description = pa_xstrdup(path->description); + } else { + name = pa_xstrdup(path->name); + description = pa_xstrdup(path->description); + } + p = pa_hashmap_get(ports, name); if (!p) { @@ -4509,7 +4521,7 @@ static pa_device_port* device_port_alsa_init(pa_hashmap *ports, /* card ports */ if (!p) { pa_log("Failed to create port %s.", name); - goto fail; + goto finish; } pa_hashmap_put(ports, p->name, p); @@ -4530,10 +4542,11 @@ static pa_device_port* device_port_alsa_init(pa_hashmap *ports, /* card ports */ pa_device_port_ref(p); } - return p; +finish: + pa_xfree(description); + pa_xfree(name); -fail: - return NULL; + return p; } void pa_alsa_path_set_add_ports( @@ -4555,8 +4568,7 @@ void pa_alsa_path_set_add_ports( if (!path->settings || !path->settings->next) { /* If there is no or just one setting we only need a * single entry */ - pa_device_port *port = device_port_alsa_init(ports, path->name, - path->description, path, path->settings, cp, extra, core); + pa_device_port *port = device_port_alsa_init(ports, path, path->settings, cp, extra, core); if (!port) continue; @@ -4567,18 +4579,8 @@ void pa_alsa_path_set_add_ports( pa_alsa_setting *s; PA_LLIST_FOREACH(s, path->settings) { pa_device_port *port; - char *n, *d; - n = pa_sprintf_malloc("%s;%s", path->name, s->name); - - if (s->description[0]) - d = pa_sprintf_malloc("%s / %s", path->description, s->description); - else - d = pa_xstrdup(path->description); - - port = device_port_alsa_init(ports, n, d, path, s, cp, extra, core); - pa_xfree(n); - pa_xfree(d); + port = device_port_alsa_init(ports, path, s, cp, extra, core); if (!port) continue; -- 1.8.3.1