[WINECFG] autodetect sound driver cleanup

Robert Reif reif at earthlink.net
Tue Dec 6 18:28:49 CST 2005


ChangeLog:
- Added support for auto detecting all drivers by attempting to open them.

This removes any driver/os specific knowledge from this program
and uses winmm and the drivers to detect themselves.
-------------- next part --------------
cvs diff: Diffing programs/winecfg
Index: programs/winecfg/audio.c
===================================================================
RCS file: /home/wine/wine/programs/winecfg/audio.c,v
retrieving revision 1.15
diff -p -u -r1.15 audio.c
--- programs/winecfg/audio.c	3 Nov 2005 19:31:45 -0000	1.15
+++ programs/winecfg/audio.c	6 Dec 2005 23:58:16 -0000
@@ -162,68 +162,32 @@ static void initAudioDlg (HWND hDlg)
 
 static const char *audioAutoDetect(void)
 {
-  struct stat buf;
-  const char *argv_new[4];
-  int fd;
-
-  const char *driversFound[10];
-  const char *name[10];
-  int numFound = 0,i;
-
-  argv_new[0] = "/bin/sh";
-  argv_new[1] = "-c";
-  argv_new[3] = NULL;
-
-  /* try to detect oss */
-  fd = open("/dev/dsp", O_WRONLY | O_NONBLOCK);
-  if(fd)
-  {
-    close(fd);
-    driversFound[numFound] = "oss";
-    name[numFound] = "OSS";
-    numFound++;
-  }
-  
-    /* try to detect alsa */
-  if(!stat("/proc/asound", &buf))
-  {
-    driversFound[numFound] = "alsa";
-    name[numFound] = "ALSA";
-    numFound++;
-  }
+    const char *driversFound[10];
+    const char *name[10];
+    int numFound = 0;
+    const AUDIO_DRIVER *pAudioDrv = NULL;
+    int i;
 
-  /* try to detect arts */
-  argv_new[2] = "ps awx|grep artsd|grep -v grep|grep artsd > /dev/null";
-  if(!spawnvp(_P_WAIT, "/bin/sh", argv_new))
-  {
-    driversFound[numFound] = "arts";
-    name[numFound] = "aRts";
-    numFound++;
-  }
+    pAudioDrv = getAudioDrivers();
 
-  /* try to detect jack */
-  argv_new[2] = "ps awx|grep jackd|grep -v grep|grep jackd > /dev/null";
-  if(!spawnvp(_P_WAIT, "/bin/sh", argv_new))
-  {
-    driversFound[numFound] = "jack";
-    name[numFound] = "JACK";
-    numFound++;
-  }
-
-  /* try to detect EsounD */
-  argv_new[2] = "ps awx|grep esd|grep -v grep|grep esd > /dev/null";
-  if(!spawnvp(_P_WAIT, "/bin/sh", argv_new))
-  {
-    driversFound[numFound] = "esd";
-    name[numFound] = "EsounD";
-    numFound++;
-  }
-
-  /* try to detect nas */
-  /* TODO */
-
-  /* try to detect audioIO (solaris) */
-  /* TODO */
+    for (i = 0; *pAudioDrv->szName; i++, pAudioDrv++)
+    {
+        if (strlen(pAudioDrv->szDriver))
+        {
+            HDRVR hdrv;
+            char driver[MAX_PATH];
+
+            sprintf(driver, "wine%s.drv", pAudioDrv->szDriver);
+
+            if ((hdrv = OpenDriverA(driver, 0, 0)))
+            {
+                CloseDriver(hdrv, 0, 0);
+                driversFound[numFound] = pAudioDrv->szDriver;
+                name[numFound] = pAudioDrv->szName;
+                numFound++;
+            }
+        }
+    }
 
   if(numFound == 0)
   {


More information about the wine-patches mailing list