aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/ALc.c
diff options
context:
space:
mode:
Diffstat (limited to 'Alc/ALc.c')
-rw-r--r--Alc/ALc.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/Alc/ALc.c b/Alc/ALc.c
index d7d8f493..a721f0de 100644
--- a/Alc/ALc.c
+++ b/Alc/ALc.c
@@ -191,11 +191,52 @@ static void InitAL(void)
if(!done)
{
int i;
+ const char *devs;
InitializeCriticalSection(&g_mutex);
ALTHUNK_INIT();
ReadALConfig();
+ devs = GetConfigValue(NULL, "drivers", "");
+ if(devs[0])
+ {
+ int n;
+ size_t len;
+ const char *next = devs;
+
+ i = 0;
+
+ do {
+ devs = next;
+ next = strchr(devs, ',');
+
+ if(!devs[0] || devs[0] == ',')
+ continue;
+
+ len = (next ? ((size_t)(next-devs)) : strlen(devs));
+ for(n = i;BackendList[n].Init;n++)
+ {
+ if(len == strlen(BackendList[n].name) &&
+ strncmp(BackendList[n].name, devs, len) == 0)
+ {
+ const char *name = BackendList[i].name;
+ void (*Init)(BackendFuncs*) = BackendList[i].Init;
+
+ BackendList[i].name = BackendList[n].name;
+ BackendList[i].Init = BackendList[n].Init;
+
+ BackendList[n].name = name;
+ BackendList[n].Init = Init;
+
+ i++;
+ }
+ }
+ } while(next++);
+
+ BackendList[i].name = NULL;
+ BackendList[i].Init = NULL;
+ }
+
for(i = 0;BackendList[i].Init;i++)
BackendList[i].Init(&BackendList[i].Funcs);
done = 1;