summary refs log tree commit diff
path: root/gnu/packages/patches/alsa-lib-add-environment-variable.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/alsa-lib-add-environment-variable.patch')
-rw-r--r--gnu/packages/patches/alsa-lib-add-environment-variable.patch110
1 files changed, 110 insertions, 0 deletions
diff --git a/gnu/packages/patches/alsa-lib-add-environment-variable.patch b/gnu/packages/patches/alsa-lib-add-environment-variable.patch
new file mode 100644
index 0000000000..a468a7fc4f
--- /dev/null
+++ b/gnu/packages/patches/alsa-lib-add-environment-variable.patch
@@ -0,0 +1,110 @@
+From 1822fb453128a1b5de93b4c590cd272d6488a077 Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Fri, 25 May 2018 19:26:58 +0200
+Subject: [PATCH] Add support for a ALSA_PLUGIN_DIR environment variable.
+
+If it is not set, default to previous behavior.
+---
+ src/control/control.c |  6 +++++-
+ src/dlmisc.c          |  9 +++++++--
+ src/pcm/pcm.c         |  9 +++++++--
+ src/pcm/pcm_rate.c    | 13 +++++++++----
+ 4 files changed, 28 insertions(+), 9 deletions(-)
+
+diff --git a/src/control/control.c b/src/control/control.c
+index 11f7815..9dba7dd 100644
+--- a/src/control/control.c
++++ b/src/control/control.c
+@@ -1331,7 +1331,11 @@ static int snd_ctl_open_conf(snd_ctl_t **ctlp, const char *name,
+ 			build_in++;
+ 		}
+ 		if (*build_in == NULL) {
+-			buf1 = malloc(strlen(str) + sizeof(ALSA_PLUGIN_DIR) + 32);
++			char* plugdir = ALSA_PLUGIN_DIR;
++			char* envplugdir = getenv("ALSA_PLUGIN_DIR");
++			if(envplugdir != NULL)
++				plugdir = envplugdir;
++			buf1 = malloc(strlen(str) + strlen(plugdir) + 32);
+ 			if (buf1 == NULL) {
+ 				err = -ENOMEM;
+ 				goto _err;
+diff --git a/src/dlmisc.c b/src/dlmisc.c
+index 3757d33..92aa864 100644
+--- a/src/dlmisc.c
++++ b/src/dlmisc.c
+@@ -82,9 +82,14 @@ void *snd_dlopen(const char *name, int mode, char *errbuf, size_t errbuflen)
+ 	char *filename = NULL;
+ 
+ 	if (name && name[0] != '/') {
+-		filename = alloca(sizeof(ALSA_PLUGIN_DIR) + 1 + strlen(name) + 1);
++		char* plugdir = ALSA_PLUGIN_DIR;
++		char* envplugdir = getenv("ALSA_PLUGIN_DIR");
++		if(envplugdir != NULL)
++			plugdir = envplugdir;
++
++		filename = malloc(strlen(plugdir) + 1 + strlen(name) + 1);
+ 		if (filename) {
+-			strcpy(filename, ALSA_PLUGIN_DIR);
++			strcpy(filename, plugdir);
+ 			strcat(filename, "/");
+ 			strcat(filename, name);
+ 			handle = dlopen(filename, mode);
+diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
+index 11aec80..590e8b6 100644
+--- a/src/pcm/pcm.c
++++ b/src/pcm/pcm.c
+@@ -2496,13 +2496,18 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name,
+ 			build_in++;
+ 		}
+ 		if (*build_in == NULL) {
+-			buf1 = malloc(strlen(str) + sizeof(ALSA_PLUGIN_DIR) + 32);
++			char* plugdir = ALSA_PLUGIN_DIR;
++			char* envplugdir = getenv("ALSA_PLUGIN_DIR");
++			if(envplugdir != NULL)
++				plugdir = envplugdir;
++			buf1 = malloc(strlen(str) + strlen(plugdir) + 32);
++
+ 			if (buf1 == NULL) {
+ 				err = -ENOMEM;
+ 				goto _err;
+ 			}
+ 			lib = buf1;
+-			sprintf(buf1, "%s/libasound_module_pcm_%s.so", ALSA_PLUGIN_DIR, str);
++			sprintf(buf1, "%s/libasound_module_pcm_%s.so", plugdir, str);
+ 		}
+ 	}
+ #ifndef PIC
+diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c
+index 4e0c7ca..8694a38 100644
+--- a/src/pcm/pcm_rate.c
++++ b/src/pcm/pcm_rate.c
+@@ -1260,7 +1260,8 @@ static const char *const default_rate_plugins[] = {
+ 
+ static int rate_open_func(snd_pcm_rate_t *rate, const char *type, const snd_config_t *converter_conf, int verbose)
+ {
+-	char open_name[64], open_conf_name[64], lib_name[128], *lib = NULL;
++	char open_name[64], open_conf_name[64], *lib = NULL;
++	char *buf1;
+ 	snd_pcm_rate_open_func_t open_func;
+ 	snd_pcm_rate_open_conf_func_t open_conf_func;
+ 	int err;
+@@ -1268,9 +1269,13 @@ static int rate_open_func(snd_pcm_rate_t *rate, const char *type, const snd_conf
+ 	snprintf(open_name, sizeof(open_name), "_snd_pcm_rate_%s_open", type);
+ 	snprintf(open_conf_name, sizeof(open_conf_name), "_snd_pcm_rate_%s_open_conf", type);
+ 	if (!is_builtin_plugin(type)) {
+-		snprintf(lib_name, sizeof(lib_name),
+-				 "%s/libasound_module_rate_%s.so", ALSA_PLUGIN_DIR, type);
+-		lib = lib_name;
++		char* plugdir = ALSA_PLUGIN_DIR;
++		char* envplugdir = getenv("ALSA_PLUGIN_DIR");
++		if(envplugdir != NULL)
++			plugdir = envplugdir;
++		buf1 = malloc(strlen(type) + strlen(plugdir) + 32);
++		sprintf(buf1, "%s/libasound_module_rate_%s.so", plugdir, type);
++		lib = buf1;
+ 	}
+ 
+ 	rate->rate_min = SND_PCM_PLUGIN_RATE_MIN;
+-- 
+2.17.0
+