winecfg: Added support for auto detecting all drivers by attempting to
authorRobert Reif <reif@earthlink.net>
Wed, 7 Dec 2005 12:07:30 +0000 (13:07 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 7 Dec 2005 12:07:30 +0000 (13:07 +0100)
open them.

programs/winecfg/audio.c

index 87f38991a3fb9b5d544c1354387b15de3b3c4893..6f0cb5f4b38d8b12a5c3c89d22b88ae165c6e16c 100644 (file)
@@ -426,68 +426,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++;
-  }
-
-  /* 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++;
-  }
+    const char *driversFound[10];
+    const char *name[10];
+    int numFound = 0;
+    const AUDIO_DRIVER *pAudioDrv = NULL;
+    int i;
 
-  /* 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++;
-  }
+    pAudioDrv = getAudioDrivers();
 
-  /* 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++;
-  }
+    for (i = 0; *pAudioDrv->szName; i++, pAudioDrv++)
+    {
+        if (strlen(pAudioDrv->szDriver))
+        {
+            HDRVR hdrv;
+            char driver[MAX_PATH];
 
-  /* try to detect nas */
-  /* TODO */
+            sprintf(driver, "wine%s.drv", pAudioDrv->szDriver);
 
-  /* try to detect audioIO (solaris) */
-  /* TODO */
+            if ((hdrv = OpenDriverA(driver, 0, 0)))
+            {
+                CloseDriver(hdrv, 0, 0);
+                driversFound[numFound] = pAudioDrv->szDriver;
+                name[numFound] = pAudioDrv->szName;
+                numFound++;
+            }
+        }
+    }
 
   if(numFound == 0)
   {