- Add support of /usr/share/alsa/conf.d/* files.
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=94
This commit is contained in:
parent
7cfe82adc9
commit
153c4db3ed
201
0030-conf-Allow-for-a-directory-to-be-given-as-a-config-f.patch
Normal file
201
0030-conf-Allow-for-a-directory-to-be-given-as-a-config-f.patch
Normal file
@ -0,0 +1,201 @@
|
||||
From 7924500688fdfeac71e5968e5f5875726a8dce14 Mon Sep 17 00:00:00 2001
|
||||
From: Colin Guthrie <colin@mageia.org>
|
||||
Date: Fri, 16 Sep 2011 10:04:26 +0100
|
||||
Subject: [PATCH] conf: Allow for a directory to be given as a config file.
|
||||
|
||||
When this is done, *.conf files can be placed in that directory and they
|
||||
will be processed by as if they were included directly.
|
||||
|
||||
A directory (typically /usr/share/alsa/alsa.conf.d/) has been
|
||||
added into the distribution.
|
||||
|
||||
v2: Used existing conf syntax rather than processing via autotools
|
||||
v3: Split file loading into separate function and made error handling
|
||||
more consistent.
|
||||
|
||||
Signed-off-by: Colin Guthrie <colin@mageia.org>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
configure.in | 3 +-
|
||||
src/conf.c | 78 ++++++++++++++++++++++++++++++++-----
|
||||
src/conf/Makefile.am | 2 +-
|
||||
src/conf/alsa.conf | 7 +++
|
||||
src/conf/alsa.conf.d/Makefile.am | 8 ++++
|
||||
src/conf/alsa.conf.d/README | 2 +
|
||||
6 files changed, 87 insertions(+), 13 deletions(-)
|
||||
create mode 100644 src/conf/alsa.conf.d/Makefile.am
|
||||
create mode 100644 src/conf/alsa.conf.d/README
|
||||
|
||||
diff --git a/configure.in b/configure.in
|
||||
index 7ee0ccc..13e38b8 100644
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -616,7 +616,8 @@ AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \
|
||||
src/pcm/Makefile src/pcm/scopes/Makefile \
|
||||
src/rawmidi/Makefile src/timer/Makefile \
|
||||
src/hwdep/Makefile src/seq/Makefile src/ucm/Makefile \
|
||||
- src/compat/Makefile src/alisp/Makefile src/conf/Makefile \
|
||||
+ src/compat/Makefile src/alisp/Makefile \
|
||||
+ src/conf/Makefile src/conf/alsa.conf.d/Makefile \
|
||||
src/conf/cards/Makefile \
|
||||
src/conf/pcm/Makefile \
|
||||
modules/Makefile modules/mixer/Makefile modules/mixer/simple/Makefile \
|
||||
diff --git a/src/conf.c b/src/conf.c
|
||||
index ddefff6..5b1b5a6 100644
|
||||
--- a/src/conf.c
|
||||
+++ b/src/conf.c
|
||||
@@ -417,6 +417,7 @@ beginning:</P>
|
||||
#include <stdarg.h>
|
||||
#include <limits.h>
|
||||
#include <sys/stat.h>
|
||||
+#include <dirent.h>
|
||||
#include <locale.h>
|
||||
#include "local.h"
|
||||
#ifdef HAVE_LIBPTHREAD
|
||||
@@ -3373,6 +3374,42 @@ static int snd_config_hooks(snd_config_t *config, snd_config_t *private_data)
|
||||
return err;
|
||||
}
|
||||
|
||||
+static int config_filename_filter(const struct dirent *dirent)
|
||||
+{
|
||||
+ size_t flen;
|
||||
+
|
||||
+ if (dirent == NULL)
|
||||
+ return 0;
|
||||
+ if (dirent->d_type == DT_DIR)
|
||||
+ return 0;
|
||||
+
|
||||
+ flen = strlen(dirent->d_name);
|
||||
+ if (flen <= 5)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (strncmp(&dirent->d_name[flen-5], ".conf", 5) == 0)
|
||||
+ return 1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int config_file_open(snd_config_t *root, const char *filename)
|
||||
+{
|
||||
+ snd_input_t *in;
|
||||
+ int err;
|
||||
+
|
||||
+ err = snd_input_stdio_open(&in, filename, "r");
|
||||
+ if (err >= 0) {
|
||||
+ err = snd_config_load(root, in);
|
||||
+ snd_input_close(in);
|
||||
+ if (err < 0)
|
||||
+ SNDERR("%s may be old or corrupted: consider to remove or fix it", filename);
|
||||
+ } else
|
||||
+ SNDERR("cannot access file %s", filename);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* \brief Loads and parses the given configurations files.
|
||||
* \param[in] root Handle to the root configuration node.
|
||||
@@ -3457,20 +3494,39 @@ int snd_config_hook_load(snd_config_t *root, snd_config_t *config, snd_config_t
|
||||
}
|
||||
} while (hit);
|
||||
for (idx = 0; idx < fi_count; idx++) {
|
||||
- snd_input_t *in;
|
||||
+ struct stat st;
|
||||
if (!errors && access(fi[idx].name, R_OK) < 0)
|
||||
continue;
|
||||
- err = snd_input_stdio_open(&in, fi[idx].name, "r");
|
||||
- if (err >= 0) {
|
||||
- err = snd_config_load(root, in);
|
||||
- snd_input_close(in);
|
||||
- if (err < 0) {
|
||||
- SNDERR("%s may be old or corrupted: consider to remove or fix it", fi[idx].name);
|
||||
- goto _err;
|
||||
- }
|
||||
- } else {
|
||||
- SNDERR("cannot access file %s", fi[idx].name);
|
||||
+ if (stat(fi[idx].name, &st) < 0) {
|
||||
+ SNDERR("cannot stat file/directory %s", fi[idx].name);
|
||||
+ continue;
|
||||
}
|
||||
+ if (S_ISDIR(st.st_mode)) {
|
||||
+ struct dirent **namelist;
|
||||
+ int n;
|
||||
+
|
||||
+ n = scandir(fi[idx].name, &namelist, config_filename_filter, versionsort);
|
||||
+ if (n > 0) {
|
||||
+ int j;
|
||||
+ err = 0;
|
||||
+ for (j = 0; j < n; ++j) {
|
||||
+ if (err >= 0) {
|
||||
+ int sl = strlen(fi[idx].name) + strlen(namelist[j]->d_name) + 2;
|
||||
+ char *filename = malloc(sl);
|
||||
+ snprintf(filename, sl, "%s/%s", fi[idx].name, namelist[j]->d_name);
|
||||
+ filename[sl-1] = '\0';
|
||||
+
|
||||
+ err = config_file_open(root, filename);
|
||||
+ free(filename);
|
||||
+ }
|
||||
+ free(namelist[j]);
|
||||
+ }
|
||||
+ free(namelist);
|
||||
+ if (err < 0)
|
||||
+ goto _err;
|
||||
+ }
|
||||
+ } else if (config_file_open(root, fi[idx].name) < 0)
|
||||
+ goto _err;
|
||||
}
|
||||
*dst = NULL;
|
||||
err = 0;
|
||||
diff --git a/src/conf/Makefile.am b/src/conf/Makefile.am
|
||||
index 2e5d0bf..456454f 100644
|
||||
--- a/src/conf/Makefile.am
|
||||
+++ b/src/conf/Makefile.am
|
||||
@@ -1,4 +1,4 @@
|
||||
-SUBDIRS=cards pcm
|
||||
+SUBDIRS=cards pcm alsa.conf.d
|
||||
|
||||
cfg_files = alsa.conf
|
||||
if BUILD_ALISP
|
||||
diff --git a/src/conf/alsa.conf b/src/conf/alsa.conf
|
||||
index a33c24e..bc91df3 100644
|
||||
--- a/src/conf/alsa.conf
|
||||
+++ b/src/conf/alsa.conf
|
||||
@@ -8,6 +8,13 @@
|
||||
{
|
||||
func load
|
||||
files [
|
||||
+ {
|
||||
+ @func concat
|
||||
+ strings [
|
||||
+ { @func datadir }
|
||||
+ "/alsa.conf.d/"
|
||||
+ ]
|
||||
+ }
|
||||
"/etc/asound.conf"
|
||||
"~/.asoundrc"
|
||||
]
|
||||
diff --git a/src/conf/alsa.conf.d/Makefile.am b/src/conf/alsa.conf.d/Makefile.am
|
||||
new file mode 100644
|
||||
index 0000000..c91661e
|
||||
--- /dev/null
|
||||
+++ b/src/conf/alsa.conf.d/Makefile.am
|
||||
@@ -0,0 +1,8 @@
|
||||
+alsaconfigdir = @ALSA_CONFIG_DIR@
|
||||
+alsadir = $(alsaconfigdir)/alsa.conf.d
|
||||
+cfg_files = README
|
||||
+
|
||||
+alsa_DATA = $(cfg_files)
|
||||
+
|
||||
+EXTRA_DIST = \
|
||||
+ $(cfg_files)
|
||||
diff --git a/src/conf/alsa.conf.d/README b/src/conf/alsa.conf.d/README
|
||||
new file mode 100644
|
||||
index 0000000..9997884
|
||||
--- /dev/null
|
||||
+++ b/src/conf/alsa.conf.d/README
|
||||
@@ -0,0 +1,2 @@
|
||||
+You can place files named *.conf in this folder and they will be processed
|
||||
+when initialising alsa-lib.
|
||||
--
|
||||
1.7.6.1
|
||||
|
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Sep 20 09:45:12 CEST 2011 - tiwai@suse.de
|
||||
|
||||
- Add support of /usr/share/alsa/conf.d/* files.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sat Sep 17 09:02:24 UTC 2011 - jengelh@medozas.de
|
||||
|
||||
|
@ -78,6 +78,7 @@ Patch26: 0026-Add-RME-RPM-to-HDSP_IO_Type.patch
|
||||
Patch27: 0027-ucm-fix-seg-fault-in-execute_cset.patch
|
||||
Patch28: 0028-ucm-tivial-code-style-fix.patch
|
||||
Patch29: 0029-ucm-add-another-sequence-msleep.patch
|
||||
Patch30: 0030-conf-Allow-for-a-directory-to-be-given-as-a-config-f.patch
|
||||
Patch99: alsa-lib-doxygen-avoid-crash-for-11.3.diff
|
||||
Url: http://www.alsa-project.org/
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
@ -154,6 +155,7 @@ Architecture.
|
||||
%patch27 -p1
|
||||
%patch28 -p1
|
||||
%patch29 -p1
|
||||
%patch30 -p1
|
||||
%if %suse_version == 1130
|
||||
%patch99 -p1
|
||||
%endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user