[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-patches
Subject:    wavemap open bug patch
From:       Robert Reif <reif () earthlink ! net>
Date:       2004-05-31 2:22:45
Message-ID: 40BA96F5.2060704 () earthlink ! net
[Download RAW message or body]

Fixes a bug where wrong a return value was returned when mapping is not 
possible.

["wavemap.diff" (text/plain)]

Index: dlls/winmm/wavemap/wavemap.c
===================================================================
RCS file: /home/wine/wine/dlls/winmm/wavemap/wavemap.c,v
retrieving revision 1.32
diff -u -r1.32 wavemap.c
--- dlls/winmm/wavemap/wavemap.c	5 Sep 2003 23:08:27 -0000	1.32
+++ dlls/winmm/wavemap/wavemap.c	31 May 2004 02:19:31 -0000
@@ -121,6 +121,7 @@
 			      DWORD dwFlags)
 {
     DWORD	ret;
+    TRACE("(%p, %04x, %p, %p, %08lx)\n", wom, idx, lpDesc, lpwfx, dwFlags);
 
     /* destination is always PCM, so the formulas below apply */
     lpwfx->nBlockAlign = (lpwfx->nChannels * lpwfx->wBitsPerSample) / 8;
@@ -138,6 +139,7 @@
 	    wom->hAcmStream = 0;
 	}
     }
+    WARN("ret = %08lx\n", ret);
     return ret;
 }
 
@@ -146,6 +148,7 @@
     UINT 		ndlo, ndhi;
     UINT		i;
     WAVEMAPDATA*	wom = HeapAlloc(GetProcessHeap(), 0, sizeof(WAVEMAPDATA));
+    DWORD               res;
 
     TRACE("(%p %p %08lx)\n", lpdwUser, lpDesc, dwFlags);
 
@@ -187,7 +190,7 @@
         /* try some ACM stuff */
 
 #define	TRY(sps,bps)    wfx.nSamplesPerSec = (sps); wfx.wBitsPerSample = (bps); \
-                        switch (wodOpenHelper(wom, i, lpDesc, &wfx, dwFlags | \
WAVE_FORMAT_DIRECT)) { \ +                        switch (res=wodOpenHelper(wom, i, \
                lpDesc, &wfx, dwFlags | WAVE_FORMAT_DIRECT)) { \
                             case MMSYSERR_NOERROR: wom->avgSpeedInner = \
wfx.nAvgBytesPerSec; goto found; \  case WAVERR_BADFORMAT: break; \
                             default: goto error; \
@@ -255,6 +258,11 @@
     return MMSYSERR_NOERROR;
 error:
     HeapFree(GetProcessHeap(), 0, wom);
+    if (res==ACMERR_NOTPOSSIBLE) {
+        WARN("ret = WAVERR_BADFORMAT\n");
+        return WAVERR_BADFORMAT;
+    }
+    WARN("ret = MMSYSERR_ERROR\n");
     return MMSYSERR_ERROR;
 }
 
@@ -594,6 +602,7 @@
     UINT 		ndlo, ndhi;
     UINT		i;
     WAVEMAPDATA*	wim = HeapAlloc(GetProcessHeap(), 0, sizeof(WAVEMAPDATA));
+    DWORD               res;
 
     TRACE("(%p %p %08lx)\n", lpdwUser, lpDesc, dwFlags);
 
@@ -635,7 +644,7 @@
         /* try some ACM stuff */
         
 #define	TRY(sps,bps)    wfx.nSamplesPerSec = (sps); wfx.wBitsPerSample = (bps); \
-                        switch (widOpenHelper(wim, i, lpDesc, &wfx, dwFlags | \
WAVE_FORMAT_DIRECT)) { \ +                        switch (res=widOpenHelper(wim, i, \
                lpDesc, &wfx, dwFlags | WAVE_FORMAT_DIRECT)) { \
                         case MMSYSERR_NOERROR: wim->avgSpeedInner = \
wfx.nAvgBytesPerSec; goto found; \  case WAVERR_BADFORMAT: break; \
                         default: goto error; \
@@ -702,6 +711,11 @@
     return MMSYSERR_NOERROR;
 error:
     HeapFree(GetProcessHeap(), 0, wim);
+    if (res==ACMERR_NOTPOSSIBLE) {
+        WARN("ret = WAVERR_BADFORMAT\n");
+        return WAVERR_BADFORMAT;
+    }
+    WARN("ret = MMSYSERR_ERROR\n");
     return MMSYSERR_ERROR;
 }
 



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic