[alsa-devel] Salsa-lib : doesn't handle multiple device
Hi,
it seems there is a bug in card parsing (snd_card_get_index).
If the device name is "hw:0,1", then in _snd_dev_get_device, snd_card_get_index will be called with "0,1".
But snd_card_get_index expect to be called with only the card string number or name : it first check that the string is a number [1], and then try for each card to compare with the card name [2]
I don't know what suppose to do snd_card_get_index, but I thing a easy way to fix it is to pass to snd_card_get_index only the string before the first comma.
Matthieu
[1] (isdigit(*string) && *(string + 1) == 0) || (isdigit(*string) && isdigit(*(string + 1)) && *(string + 2) == 0 [2] if (!strcmp((const char *)info.id, string))
At Tue, 30 Sep 2008 14:11:30 +0200, Matthieu CASTET wrote:
Hi,
it seems there is a bug in card parsing (snd_card_get_index).
If the device name is "hw:0,1", then in _snd_dev_get_device, snd_card_get_index will be called with "0,1".
But snd_card_get_index expect to be called with only the card string number or name : it first check that the string is a number [1], and then try for each card to compare with the card name [2]
Indeed.
I don't know what suppose to do snd_card_get_index, but I thing a easy way to fix it is to pass to snd_card_get_index only the string before the first comma.
I think the patch below is much simpler. Could you check whether this works?
thanks,
Takashi
diff -r 7ca6ae3d3edb src/cards.c --- a/src/cards.c Tue Sep 30 14:46:16 2008 +0200 +++ b/src/cards.c Tue Sep 30 14:51:10 2008 +0200 @@ -99,10 +99,7 @@
if (!string || *string == '\0') return -EINVAL; - if ((isdigit(*string) && *(string + 1) == 0) || - (isdigit(*string) && isdigit(*(string + 1)) && *(string + 2) == 0)) { - if (sscanf(string, "%i", &card) != 1) - return -EINVAL; + if (sscanf(string, "%i", &card) == 1) { if (card < 0 || card > 31) return -EINVAL; if (snd_card_load(card))
Takashi Iwai a écrit :
At Tue, 30 Sep 2008 14:11:30 +0200, Matthieu CASTET wrote:
Hi,
it seems there is a bug in card parsing (snd_card_get_index).
If the device name is "hw:0,1", then in _snd_dev_get_device, snd_card_get_index will be called with "0,1".
But snd_card_get_index expect to be called with only the card string number or name : it first check that the string is a number [1], and then try for each card to compare with the card name [2]
Indeed.
I don't know what suppose to do snd_card_get_index, but I thing a easy way to fix it is to pass to snd_card_get_index only the string before the first comma.
I think the patch below is much simpler. Could you check whether this works?
thanks, this patch also work.
Matthieu
At Tue, 30 Sep 2008 15:09:57 +0200, Matthieu CASTET wrote:
Takashi Iwai a écrit :
At Tue, 30 Sep 2008 14:11:30 +0200, Matthieu CASTET wrote:
Hi,
it seems there is a bug in card parsing (snd_card_get_index).
If the device name is "hw:0,1", then in _snd_dev_get_device, snd_card_get_index will be called with "0,1".
But snd_card_get_index expect to be called with only the card string number or name : it first check that the string is a number [1], and then try for each card to compare with the card name [2]
Indeed.
I don't know what suppose to do snd_card_get_index, but I thing a easy way to fix it is to pass to snd_card_get_index only the string before the first comma.
I think the patch below is much simpler. Could you check whether this works?
thanks, this patch also work.
Thanks for checking. Released as version 0.0.19 now.
Takashi
participants (2)
-
Matthieu CASTET
-
Takashi Iwai