aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-10-04 10:52:57 +0200
committerTakashi Iwai <tiwai@suse.de>2009-10-04 10:52:57 +0200
commit227a8a8fc79f312a12974b8be4e51fcd76e7a943 (patch)
tree7d9c5b76e900a39676d282f00bd2a8daaf479c92
parente83eaee21ce27beb3ed122aa2426b47d8324651a (diff)
downloadsalsa-lib-227a8a8fc79f312a12974b8be4e51fcd76e7a943.tar.gz
Add the device path support to snd_card_get_index()
A device file name can be passed snd_card_get_index().
-rw-r--r--src/cards.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/cards.c b/src/cards.c
index 5a90329..b91e80c 100644
--- a/src/cards.c
+++ b/src/cards.c
@@ -92,6 +92,23 @@ static int get_card_info(int card, snd_ctl_card_info_t *info)
return err;
}
+static int snd_card_load2(const char *control)
+{
+ int open_dev;
+ snd_ctl_card_info_t info;
+
+ open_dev = open(control, O_RDONLY);
+ if (open_dev < 0)
+ return -errno;
+ if (ioctl(open_dev, SNDRV_CTL_IOCTL_CARD_INFO, &info) < 0) {
+ int err = -errno;
+ close(open_dev);
+ return err;
+ }
+ close(open_dev);
+ return info.card;
+}
+
int snd_card_get_index(const char *string)
{
int card;
@@ -99,6 +116,8 @@ int snd_card_get_index(const char *string)
if (!string || *string == '\0')
return -EINVAL;
+ if (*string == '/') /* device name */
+ return snd_card_load2(string);
if (sscanf(string, "%i", &card) == 1) {
if (card < 0 || card > 31)
return -EINVAL;