From f627aed58b16ef61be7d2fd94c548db668e89560 Mon Sep 17 00:00:00 2001 From: Francois Gouget Date: Mon, 26 Apr 2004 23:30:26 +0000 Subject: [PATCH] waveOutGetDevCaps(-1...) must return the capabilities of the Wave mapper. DRV_QUERYDEVICEINTERFACE is not supported on all Windows versions. Check the length returned by DRV_QUERYDEVICEINTERFACESIZE and fix memory leak. Some Windows sound drivers allow wild frequencies such as the 2MHz one. So modify this test to use an invalid number of bits per sample instead (hopefully that will fail really everywhere). --- dlls/winmm/tests/wave.c | 104 +++++++++++++++++++++--------------------------- 1 file changed, 46 insertions(+), 58 deletions(-) diff --git a/dlls/winmm/tests/wave.c b/dlls/winmm/tests/wave.c index e652524bf7b..6c4681e96b4 100644 --- a/dlls/winmm/tests/wave.c +++ b/dlls/winmm/tests/wave.c @@ -258,8 +258,8 @@ static void wave_out_tests() MMRESULT rc; UINT ndev,d,f; WCHAR * wname; - CHAR * name=NULL; - DWORD size; + CHAR * name; + DWORD size; ndev=waveOutGetNumDevs(); trace("found %d WaveOut devices\n",ndev); @@ -268,6 +268,10 @@ static void wave_out_tests() ok(rc==MMSYSERR_BADDEVICEID, "waveOutGetDevCapsA: MMSYSERR_BADDEVICEID expected, got %d\n",rc); + rc=waveOutGetDevCapsA(-1,&caps,sizeof(caps)); + ok(rc==MMSYSERR_NOERROR, + "waveOutGetDevCapsA: MMSYSERR_NOERROR expected, got %d\n",rc); + format.wFormatTag=WAVE_FORMAT_PCM; format.nChannels=2; format.wBitsPerSample=16; @@ -286,23 +290,32 @@ static void wave_out_tests() if (rc==MMSYSERR_BADDEVICEID) continue; + name=NULL; rc=waveOutMessage((HWAVEOUT)d, DRV_QUERYDEVICEINTERFACESIZE, (DWORD_PTR)&size, 0); - ok(rc==MMSYSERR_NOERROR, "waveOutMessage: failed to get interface size for device: %d rc=%d\n",d,rc); + ok(rc==MMSYSERR_NOERROR || rc==MMSYSERR_INVALPARAM || rc==MMSYSERR_NOTSUPPORTED, + "waveOutMessage: failed to get interface size for device: %d rc=%d\n",d,rc); if (rc==MMSYSERR_NOERROR) { wname = (WCHAR *)malloc(size); rc=waveOutMessage((HWAVEOUT)d, DRV_QUERYDEVICEINTERFACE, (DWORD_PTR)wname, size); - ok(rc==MMSYSERR_NOERROR,"waveOutMessage: failed to get interface name for device:: %d rc=%d\n",d,rc); + ok(rc==MMSYSERR_NOERROR,"waveOutMessage: failed to get interface name for device: %d rc=%d\n",d,rc); + ok(lstrlenW(wname)+1==size/sizeof(WCHAR),"got an incorrect size: %ld instead of %d\n",size,(lstrlenW(wname)+1)*sizeof(WCHAR)); if (rc==MMSYSERR_NOERROR) { name = malloc(size/sizeof(WCHAR)); WideCharToMultiByte(CP_ACP, 0, wname, size/sizeof(WCHAR), name, size/sizeof(WCHAR), NULL, NULL); } + free(wname); + } + else if (rc==MMSYSERR_NOTSUPPORTED) + { + name=strdup("not supported"); } trace(" %d: \"%s\" (%s) %d.%d (%d:%d): channels=%d formats=%05lx support=%04lx\n", - d,caps.szPname,name,caps.vDriverVersion >> 8, + d,caps.szPname,(name?name:"failed"),caps.vDriverVersion >> 8, caps.vDriverVersion & 0xff, caps.wMid,caps.wPid, caps.wChannels,caps.dwFormats,caps.dwSupport); + free(name); for (f=0;f> 8, + d,caps.szPname,(name?name:"failed"),caps.vDriverVersion >> 8, caps.vDriverVersion & 0xff, caps.wMid,caps.wPid, caps.wChannels,caps.dwFormats); + free(name); for (f=0;f