volume: moved code to oss_mixer_find()

This commit is contained in:
Max Kellermann 2008-11-14 18:05:13 +01:00
parent eb199ca207
commit 19131f1eda

View File

@ -87,6 +87,27 @@ static void closeOssMixer(void)
volume_ossFd = -1; volume_ossFd = -1;
} }
static int
oss_find_mixer(const char *name)
{
const char *labels[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_LABELS;
for (unsigned i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
ssize_t len = strlen(labels[i]);
char *duplicated = alloca(len + 1);
/* eliminate spaces at the end */
memcpy(duplicated, labels[i], len + 1);
len -= 2;
while (len >= 0 && duplicated[len] == ' ')
duplicated[len--] = '\0';
if (strcasecmp(duplicated, name) == 0)
return i;
}
return -1;
}
static int prepOssMixer(const char *device) static int prepOssMixer(const char *device)
{ {
ConfigParam *param; ConfigParam *param;
@ -97,7 +118,6 @@ static int prepOssMixer(const char *device)
} }
if ((param = getConfigParam(CONF_MIXER_CONTROL))) { if ((param = getConfigParam(CONF_MIXER_CONTROL))) {
const char *labels[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_LABELS;
int i; int i;
int devmask = 0; int devmask = 0;
@ -107,20 +127,9 @@ static int prepOssMixer(const char *device)
return -1; return -1;
} }
for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) { i = oss_find_mixer(param->value);
ssize_t len = strlen(labels[i]);
char *duplicated = alloca(len + 1);
/* eliminate spaces at the end */ if (i < 0) {
memcpy(duplicated, labels[i], len + 1);
len -= 2;
while (len >= 0 && duplicated[len] == ' ')
duplicated[len--] = '\0';
if (strcasecmp(duplicated, param->value) == 0)
break;
}
if (i >= SOUND_MIXER_NRDEVICES) {
WARNING("mixer control \"%s\" not found at line %i\n", WARNING("mixer control \"%s\" not found at line %i\n",
param->value, param->line); param->value, param->line);
closeOssMixer(); closeOssMixer();