diff options
author | Chris Robinson <[email protected]> | 2007-12-12 03:46:43 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2007-12-12 03:46:43 -0800 |
commit | ba0252661237768f0da2634271de3ce18f731ec2 (patch) | |
tree | 702d59b417fc5a2ebf12a7d507604f0e2a76e96e /Alc | |
parent | 7ade93e38c531c9d252a7ebf05065c7e3fc928ff (diff) |
Implement "drivers" config option
Diffstat (limited to 'Alc')
-rw-r--r-- | Alc/ALc.c | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -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; |