From cb6ddfc75bf3d295e657699d9e85146b8cf1237e Mon Sep 17 00:00:00 2001 From: Andrew Nguyen Date: Sun, 25 Jan 2009 02:56:48 -0600 Subject: [PATCH] winmm: Make the return behavior of waveOutPrepareHeader consistent for 16-bit and 32-bit. --- dlls/winmm/mmsystem.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/dlls/winmm/mmsystem.c b/dlls/winmm/mmsystem.c index f3046b61d8c..69f14fcb04d 100644 --- a/dlls/winmm/mmsystem.c +++ b/dlls/winmm/mmsystem.c @@ -1279,15 +1279,26 @@ UINT16 WINAPI waveOutPrepareHeader16(HWAVEOUT16 hWaveOut, /* [in] */ { LPWINE_MLD wmld; LPWAVEHDR lpWaveOutHdr = MapSL(lpsegWaveOutHdr); + UINT16 result; TRACE("(%04X, %08x, %u);\n", hWaveOut, lpsegWaveOutHdr, uSize); if (lpWaveOutHdr == NULL) return MMSYSERR_INVALPARAM; if ((wmld = MMDRV_Get(HWAVEOUT_32(hWaveOut), MMDRV_WAVEOUT, FALSE)) == NULL) - return MMSYSERR_INVALHANDLE; + return MMSYSERR_INVALHANDLE; + + if ((result = MMDRV_Message(wmld, WODM_PREPARE, lpsegWaveOutHdr, + uSize, FALSE)) != MMSYSERR_NOTSUPPORTED) + return result; - return MMDRV_Message(wmld, WODM_PREPARE, lpsegWaveOutHdr, uSize, FALSE); + if (lpWaveOutHdr->dwFlags & WHDR_INQUEUE) + return WAVERR_STILLPLAYING; + + lpWaveOutHdr->dwFlags |= WHDR_PREPARED; + lpWaveOutHdr->dwFlags &= ~WHDR_DONE; + + return MMSYSERR_NOERROR; } /************************************************************************** -- 2.11.4.GIT