--- dlls/wineoss.drv/audio.c 2007-10-20 22:42:15.000000000 +0200 +++ dlls/wineoss.drv/audio.c 2007-10-21 13:07:00.000000000 +0200 @@ -1149,11 +1149,18 @@  LRESULT OSS_WaveInit(void)  {   char* str; + char* IND; + char* OND;   int i;     /* FIXME: Remove unneeded members of WOutDev and WInDev */   TRACE("()\n");   + /* Add INPUTDEV and OUTPUTDEV for more comfort. */ + + IND = getenv("INPUTDEV"); + OND = getenv("OUTPUTDEV"); +   str=getenv("AUDIODEV");   if (str!=NULL)   { @@ -1167,14 +1174,49 @@   }   else   { - WOutDev[0].ossdev.dev_name = WInDev[0].ossdev.dev_name = StrDup("/dev/dsp",NULL); - WOutDev[0].ossdev.mixer_name = WInDev[0].ossdev.mixer_name = StrDup("/dev/mixer",NULL); - for (i = 1; i < MAX_WAVEDRV; ++i) + if (OND!=NULL) + { + WOutDev[0].ossdev.dev_name = StrDup(OND,""); // WInDev[0].ossdev.dev_name = StrDup("/dev/dsp",NULL); + WOutDev[0].ossdev.mixer_name = StrDup(getenv("MIXEROUTDEV"),"/dev/mixer"); // WInDev[0].ossdev.mixer_name = StrDup("/dev/mixer",NULL); + for (i = 1; i < MAX_WAVEDRV; ++i) + { + WOutDev[i].ossdev.dev_name = StrDup("",NULL); + WOutDev[i].ossdev.mixer_name = StrDup("",NULL); + } + } + else + { + WOutDev[0].ossdev.dev_name = StrDup("/dev/dsp",NULL); + WOutDev[0].ossdev.mixer_name = StrDup("/dev/mixer",NULL); + for (i = 1; i < MAX_WAVEDRV; ++i) + { + WOutDev[i].ossdev.dev_name = HeapAlloc(GetProcessHeap(),0,11); + sprintf(WOutDev[i].ossdev.dev_name, "/dev/dsp%d", i); + WOutDev[i].ossdev.mixer_name = HeapAlloc(GetProcessHeap(),0,13); + sprintf(WOutDev[i].ossdev.mixer_name, "/dev/mixer%d", i); + } + } + if (IND!=NULL)   { - WOutDev[i].ossdev.dev_name = WInDev[i].ossdev.dev_name = HeapAlloc(GetProcessHeap(),0,11); - sprintf(WOutDev[i].ossdev.dev_name, "/dev/dsp%d", i); - WOutDev[i].ossdev.mixer_name = WInDev[i].ossdev.mixer_name = HeapAlloc(GetProcessHeap(),0,13); - sprintf(WOutDev[i].ossdev.mixer_name, "/dev/mixer%d", i); + WInDev[0].ossdev.dev_name = StrDup(IND,""); + WInDev[0].ossdev.mixer_name = StrDup(getenv("MIXERINDEV"),"/dev/mixer"); + for (i = 1; i < MAX_WAVEDRV; ++i) + { + WInDev[i].ossdev.dev_name = StrDup("",NULL); + WInDev[i].ossdev.mixer_name = StrDup("",NULL); + } + } + else + { + WInDev[0].ossdev.dev_name = StrDup("/dev/dsp",NULL); + WInDev[0].ossdev.mixer_name = StrDup("/dev/mixer",NULL); + for (i = 1; i < MAX_WAVEDRV; ++i) + { + WInDev[i].ossdev.dev_name = HeapAlloc(GetProcessHeap(),0,11); + sprintf(WInDev[i].ossdev.dev_name, "/dev/dsp%d", i); + WInDev[i].ossdev.mixer_name = HeapAlloc(GetProcessHeap(),0,13); + sprintf(WInDev[i].ossdev.mixer_name, "/dev/mixer%d", i); + }   }   }