mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
Removed snd_defaults_ functions.
Updated the syntax of configuration file to substitute values from the environment space. Updated alsa.conf to replace old snd_defaults_ functions.
This commit is contained in:
parent
5ce8fbeab5
commit
b7c05ad942
7 changed files with 80 additions and 158 deletions
|
|
@ -1,3 +1,10 @@
|
|||
# Include a new configuration file
|
||||
<filename>
|
||||
|
||||
# Replace with an environment variable
|
||||
# (default value is used if envvar is not present or empty)
|
||||
<@envvar[,envvar1][,envvar2...]:defaultval@>
|
||||
|
||||
# Server definition
|
||||
server.NAME {
|
||||
host STR # host where the server is located (if map to local address
|
||||
|
|
|
|||
|
|
@ -266,13 +266,6 @@ int snd_card_get_index(const char *name);
|
|||
int snd_card_get_name(int card, char **name);
|
||||
int snd_card_get_longname(int card, char **name);
|
||||
|
||||
int snd_defaults_card(void);
|
||||
int snd_defaults_mixer_card(void);
|
||||
int snd_defaults_pcm_card(void);
|
||||
int snd_defaults_pcm_device(void);
|
||||
int snd_defaults_rawmidi_card(void);
|
||||
int snd_defaults_rawmidi_device(void);
|
||||
|
||||
int snd_card_type_string_to_enum(const char *strid, snd_card_type_t *enumid);
|
||||
int snd_card_type_enum_to_string(snd_card_type_t enumid, char **strid);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
#
|
||||
# ALSA library configuration file
|
||||
#
|
||||
|
||||
pcm.default {
|
||||
type plug
|
||||
slave.pcm {
|
||||
type hw
|
||||
card 0
|
||||
device 0
|
||||
card <@ALSA_PCM_CARD,ALSA_CARD:0@>
|
||||
device <@ALSA_PCM_DEVICE:0@>
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -115,10 +118,11 @@ pcm.surround40 {
|
|||
$.1 DEV
|
||||
$.CARD {
|
||||
type integer
|
||||
default <@ALSA_SURROUND40_CARD,ALSA_PCM_CARD,ALSA_CARD:0@>
|
||||
}
|
||||
$.DEV {
|
||||
type integer
|
||||
default 0
|
||||
default <@ALSA_SURROUND40_DEVICE:0@>
|
||||
}
|
||||
type surround
|
||||
card $CARD
|
||||
|
|
@ -131,10 +135,11 @@ pcm.surround51 {
|
|||
$.1 DEV
|
||||
$.CARD {
|
||||
type integer
|
||||
default <@ALSA_SURROUND51_CARD,ALSA_PCM_CARD,ALSA_CARD:0@>
|
||||
}
|
||||
$.DEV {
|
||||
type integer
|
||||
default 0
|
||||
default <@ALSA_SURROUND51_DEVICE:0@>
|
||||
}
|
||||
type surround
|
||||
card $CARD
|
||||
|
|
@ -148,7 +153,7 @@ pcm.null {
|
|||
|
||||
ctl.default {
|
||||
type hw
|
||||
card 0
|
||||
card <@ALSA_CARD:0@>
|
||||
}
|
||||
|
||||
ctl.hw {
|
||||
|
|
@ -174,6 +179,12 @@ ctl.shm {
|
|||
ctl $PCM
|
||||
}
|
||||
|
||||
rawmidi.default {
|
||||
type hw
|
||||
card <@ALSA_RAWMIDI_CARD,ALSA_CARD:0@>
|
||||
device <@ALSA_RAWMIDI_DEVICE:0@>
|
||||
}
|
||||
|
||||
rawmidi.hw {
|
||||
$.0 CARD
|
||||
$.1 DEV
|
||||
|
|
@ -194,6 +205,10 @@ rawmidi.hw {
|
|||
subdevice $SUBDEV
|
||||
}
|
||||
|
||||
seq.default {
|
||||
type hw
|
||||
}
|
||||
|
||||
seq.hw {
|
||||
type hw
|
||||
}
|
||||
|
|
@ -242,4 +257,3 @@ pcm.iec958 {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
63
src/conf.c
63
src/conf.c
|
|
@ -59,6 +59,7 @@ typedef struct {
|
|||
UNTERMINATED_QUOTE = -2,
|
||||
UNEXPECTED_CHAR = -3,
|
||||
UNEXPECTED_EOF = -4,
|
||||
BAD_ENV_DEFAULT = -5,
|
||||
} error;
|
||||
} input_t;
|
||||
|
||||
|
|
@ -112,19 +113,54 @@ static int get_char_skip_comments(input_t *input)
|
|||
while (1) {
|
||||
c = get_char(input);
|
||||
if (c == '<') {
|
||||
char *file;
|
||||
char *str;
|
||||
snd_input_t *in;
|
||||
struct filedesc *fd;
|
||||
int err = get_delimstring(&file, '>', input);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = snd_input_stdio_open(&in, file, "r");
|
||||
int err = get_delimstring(&str, '>', input);
|
||||
if (err < 0)
|
||||
return err;
|
||||
if (strlen(str) < 3 ||
|
||||
str[0] != '@' ||
|
||||
str[strlen(str)-1] != '@' ||
|
||||
strchr(str, ':') == NULL) {
|
||||
err = snd_input_stdio_open(&in, str, "r");
|
||||
if (err < 0)
|
||||
return err;
|
||||
} else {
|
||||
char *envvar = str + 1;
|
||||
char *envdef = strchr(str, ':');
|
||||
char *env, *end;
|
||||
|
||||
str[strlen(str)-1] = '\0';
|
||||
*envdef++ = '\0';
|
||||
if (*envdef == '\0') {
|
||||
free(str);
|
||||
input->error = BAD_ENV_DEFAULT;
|
||||
return -EINVAL;
|
||||
}
|
||||
while (1) {
|
||||
end = strchr(envvar, ',');
|
||||
if (end)
|
||||
*end = '\0';
|
||||
env = getenv(envvar);
|
||||
if (env != NULL && *env != '\0')
|
||||
break;
|
||||
if (end) {
|
||||
*end = ','; /* repair for fd->name */
|
||||
envvar = end + 1;
|
||||
} else {
|
||||
env = envdef;
|
||||
break;
|
||||
}
|
||||
}
|
||||
err = snd_input_buffer_open(&in, env, strlen(env));
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
fd = malloc(sizeof(*fd));
|
||||
if (!fd)
|
||||
return -ENOMEM;
|
||||
fd->name = file;
|
||||
fd->name = str;
|
||||
fd->in = in;
|
||||
fd->next = input->current;
|
||||
fd->line = 1;
|
||||
|
|
@ -839,6 +875,9 @@ int snd_config_load(snd_config_t *config, snd_input_t *in)
|
|||
case UNEXPECTED_EOF:
|
||||
str = "Unexpected end of file";
|
||||
break;
|
||||
case BAD_ENV_DEFAULT:
|
||||
str = "Bad environment default value";
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
break;
|
||||
|
|
@ -1196,10 +1235,10 @@ int snd_config_search_alias(snd_config_t *config,
|
|||
}
|
||||
|
||||
/** Environment variable containing files list for #snd_config_update */
|
||||
#define ASOUND_CONFIGS_VAR "ASOUND_CONFIGS"
|
||||
#define ALSA_CONFIG_PATH_VAR "ALSA_CONFIG_PATH"
|
||||
|
||||
/** Default files used by #snd_config_update */
|
||||
#define ASOUND_CONFIGS_DEFAULT DATADIR "/alsa/alsa.conf:/etc/asound.conf:~/.asoundrc"
|
||||
#define ALSA_CONFIG_PATH_DEFAULT DATADIR "/alsa/alsa.conf:/etc/asound.conf:~/.asoundrc"
|
||||
|
||||
/** \ingroup Config
|
||||
* Config top node */
|
||||
|
|
@ -1216,7 +1255,7 @@ static unsigned int files_info_count = 0;
|
|||
|
||||
/**
|
||||
* \brief Update #snd_config rereading (if needed) files specified in
|
||||
* environment variable ASOUND_CONFIGS. If it's not set the default value is
|
||||
* environment variable ALSA_CONFIG_PATH. If it's not set the default value is
|
||||
* "/usr/share/alsa/alsa.conf:/etc/asound.conf:~/.asoundrc"
|
||||
* \return 0 if no action is needed, 1 if tree has been rebuilt otherwise a negative error code
|
||||
*
|
||||
|
|
@ -1232,9 +1271,9 @@ int snd_config_update()
|
|||
size_t l;
|
||||
struct finfo *fi;
|
||||
unsigned int fi_count;
|
||||
configs = getenv(ASOUND_CONFIGS_VAR);
|
||||
configs = getenv(ALSA_CONFIG_PATH_VAR);
|
||||
if (!configs)
|
||||
configs = ASOUND_CONFIGS_DEFAULT;
|
||||
configs = ALSA_CONFIG_PATH_DEFAULT;
|
||||
for (k = 0, c = configs; (l = strcspn(c, ": ")) > 0; ) {
|
||||
c += l;
|
||||
k++;
|
||||
|
|
@ -1351,7 +1390,7 @@ snd_config_iterator_t snd_config_iterator_first(snd_config_t *node)
|
|||
}
|
||||
|
||||
/**
|
||||
* \brief Return an iterator pointing to next leaf
|
||||
q * \brief Return an iterator pointing to next leaf
|
||||
* \param iterator Config node iterator
|
||||
* \return iterator value for next leaf
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
EXTRA_LTLIBRARIES = libcontrol.la
|
||||
|
||||
libcontrol_la_SOURCES = cards.c cards_id.c hcontrol.c defaults.c \
|
||||
libcontrol_la_SOURCES = cards.c cards_id.c hcontrol.c \
|
||||
control.c control_hw.c control_shm.c \
|
||||
setup.c
|
||||
|
||||
|
|
|
|||
|
|
@ -1,131 +0,0 @@
|
|||
/*
|
||||
* Control Interface - defaults
|
||||
* Copyright (c) 1998 by Jaroslav Kysela <perex@suse.cz>
|
||||
*
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "local.h"
|
||||
|
||||
static int defaults_card(const char *env)
|
||||
{
|
||||
char *e;
|
||||
|
||||
e = getenv(env);
|
||||
if (!e)
|
||||
return -ENOENT;
|
||||
return snd_card_get_index(e);
|
||||
}
|
||||
|
||||
static int defaults_device(const char *env)
|
||||
{
|
||||
char *e;
|
||||
int dev;
|
||||
|
||||
e = getenv(env);
|
||||
if (e) {
|
||||
dev = atoi(env);
|
||||
if (dev >= 0 && dev < 1024 * 1024)
|
||||
return dev;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int snd_defaults_card(void)
|
||||
{
|
||||
int result;
|
||||
|
||||
result = defaults_card("ALSA_CARD");
|
||||
if (result >= 0)
|
||||
return result;
|
||||
result = -1;
|
||||
if (snd_card_next(&result))
|
||||
return -ENOENT;
|
||||
return result;
|
||||
}
|
||||
|
||||
int snd_defaults_mixer_card(void)
|
||||
{
|
||||
int result;
|
||||
|
||||
result = defaults_card("ALSA_MIXER_CARD");
|
||||
if (result >= 0)
|
||||
return result;
|
||||
return snd_defaults_card();
|
||||
}
|
||||
|
||||
int snd_defaults_pcm_card(void)
|
||||
{
|
||||
int result;
|
||||
|
||||
result = defaults_card("ALSA_PCM_CARD");
|
||||
if (result >= 0)
|
||||
return result;
|
||||
return snd_defaults_card();
|
||||
}
|
||||
|
||||
int snd_defaults_pcm_device(void)
|
||||
{
|
||||
snd_ctl_t *handle;
|
||||
char id[16];
|
||||
int result;
|
||||
|
||||
result = defaults_device("ALSA_PCM_DEVICE");
|
||||
if (result >= 0)
|
||||
return result;
|
||||
sprintf(id, "hw:%i", snd_defaults_pcm_card());
|
||||
if (snd_ctl_open(&handle, id, 0) < 0)
|
||||
return -ENOENT;
|
||||
result = -1;
|
||||
if (snd_ctl_pcm_next_device(handle, &result) < 0) {
|
||||
snd_ctl_close(handle);
|
||||
return -ENOENT;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
int snd_defaults_rawmidi_card(void)
|
||||
{
|
||||
int result;
|
||||
|
||||
result = defaults_card("ALSA_RAWMIDI_CARD");
|
||||
if (result >= 0)
|
||||
return result;
|
||||
return snd_defaults_card();
|
||||
}
|
||||
|
||||
int snd_defaults_rawmidi_device(void)
|
||||
{
|
||||
snd_ctl_t *handle;
|
||||
char id[16];
|
||||
int result;
|
||||
|
||||
result = defaults_device("ALSA_RAWMIDI_DEVICE");
|
||||
if (result >= 0)
|
||||
return result;
|
||||
sprintf(id, "hw:%i", snd_defaults_rawmidi_card());
|
||||
if (snd_ctl_open(&handle, id, 0) < 0)
|
||||
return -ENOENT;
|
||||
result = -1;
|
||||
if (snd_ctl_rawmidi_next_device(handle, &result) < 0) {
|
||||
snd_ctl_close(handle);
|
||||
return -ENOENT;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
@ -118,7 +118,7 @@ exit(0);
|
|||
AC_LANG_RESTORE
|
||||
|
||||
dnl Now that we know that we have the right version, let's see if we have the library and not just the headers.
|
||||
AC_CHECK_LIB([asound], [snd_defaults_card],,
|
||||
AC_CHECK_LIB([asound], [snd_seq_create_event],,
|
||||
[ifelse([$3], , [AC_MSG_ERROR(No linkable libasound was found.)])
|
||||
alsa_found=no]
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue