$OpenBSD: patch-lib-src_portmixer_src_px_unix_oss_c,v 1.2 2007/12/08 11:08:38 ajacoutot Exp $
--- lib-src/portmixer/src/px_unix_oss.c.orig	Sat Nov 24 12:28:16 2007
+++ lib-src/portmixer/src/px_unix_oss.c	Sat Nov 24 12:31:44 2007
@@ -41,8 +41,12 @@
 #elif defined(__FreeBSD__)
 #include <sys/soundcard.h>
 #else
+#if defined(__OpenBSD__)
+#include <soundcard.h>
+#else
 #include <machine/soundcard.h> /* JH20010905 */
 #endif
+#endif
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -52,9 +56,12 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
+#include <ctype.h>
 
 #include "portaudio.h"
+#ifdef PX_USE_PA_V18
 #include "pa_unix_oss.h"
+#endif
 
 #include "portmixer.h"
 #include "px_mixer.h"
@@ -97,7 +104,7 @@ static int open_mixer(PxDev *dev, int cmd)
    int i;
    int id = 0;
 
-   for (i = strlen(dev->name) - 1; i >= 0; i++) {
+   for (i = strlen(dev->name) - 1; i >= 0; i--) {
       if (!isdigit(dev->name[i])) {
          break;
       }
@@ -108,11 +115,9 @@ static int open_mixer(PxDev *dev, int cmd)
       return -1;
    }
 
-   strcpy(name, MIXER_NAME_BASE);
-   if (id == 0)
-      name[strlen(MIXER_NAME_BASE)] = 0;
-   else
-      name[strlen(MIXER_NAME_BASE)] = '0' + (id - 1);
+   strlcpy(name, MIXER_NAME_BASE, sizeof(name));
+   if (id != 0)
+      strlcat(name, &dev->name[i + 1], sizeof(name));
 
    do {
       dev->fd = open(name, O_RDWR);
@@ -160,7 +165,11 @@ int OpenMixer_Unix_OSS(px_mixer *Px, int index)
    info->playback.num = 0;   
    
    do {
+#ifdef PX_USE_PA_V18
       info->capture.name = PaOSS_GetStreamInputDevice(Px->pa_stream);
+#else
+      info->capture.name = (Pa_GetDeviceInfo(index))->name;
+#endif
 
       if (info->capture.name) {
          if (!open_mixer(&info->capture, SOUND_MIXER_READ_RECMASK)) {
@@ -168,7 +177,11 @@ int OpenMixer_Unix_OSS(px_mixer *Px, int index)
          }
       }
       
+#ifdef PX_USE_PA_V18
       info->playback.name = PaOSS_GetStreamOutputDevice(Px->pa_stream);
+#else
+      info->playback.name = (Pa_GetDeviceInfo(index))->name;
+#endif
       if (info->playback.name) {
          if (!open_mixer(&info->playback, SOUND_MIXER_READ_DEVMASK)) {
             break;
