From 3c43afc99c905220893ad497b2c009a5fe0ce3c0 Mon Sep 17 00:00:00 2001 From: KimJeongYeon Date: Wed, 23 Mar 2016 07:31:17 +0900 Subject: [PATCH] alsa: Fix device reservation fails when a device string has seperator(,) For example, the device parameter of pa_alsa_get_reserve_name() is "hw:USB,0", snd_card_get_index() always fails. Because seperator(,) wasn't regarded. Therefore, JACK couldn't obtain audio device from Pulseaudio. Signed-off-by: KimJeongYeon --- src/modules/alsa/alsa-util.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c index a4bb449..73e0365 100644 --- a/src/modules/alsa/alsa-util.c +++ b/src/modules/alsa/alsa-util.c @@ -1344,23 +1344,36 @@ char *pa_alsa_get_driver_name_by_pcm(snd_pcm_t *pcm) { } char *pa_alsa_get_reserve_name(const char *device) { - const char *t; + char *card_name, *start, *end; int i; pa_assert(device); - if ((t = strchr(device, ':'))) - device = t+1; + card_name = pa_xstrdup(device); + + if ((start = strchr(card_name, ':'))) { + start++; + + if ((end = strchr(start, ','))) { + *end = '\0'; + } + + strcpy(card_name, start); + } - if ((i = snd_card_get_index(device)) < 0) { + if ((i = snd_card_get_index(card_name)) < 0) { int32_t k; - if (pa_atoi(device, &k) < 0) + if (pa_atoi(device, &k) < 0) { + pa_xfree(card_name); return NULL; + } i = (int) k; } + pa_xfree(card_name); + return pa_sprintf_malloc("Audio%i", i); } -- 1.7.9.5