winmm: Perform stricter MIDI-related error checking.
This commit is contained in:
parent
ed7a366202
commit
06d6dd3e72
|
@ -130,6 +130,10 @@ const char* WINMM_ErrorToString(MMRESULT error)
|
||||||
ERR_TO_STR(WAVERR_STILLPLAYING);
|
ERR_TO_STR(WAVERR_STILLPLAYING);
|
||||||
ERR_TO_STR(WAVERR_UNPREPARED);
|
ERR_TO_STR(WAVERR_UNPREPARED);
|
||||||
ERR_TO_STR(WAVERR_SYNC);
|
ERR_TO_STR(WAVERR_SYNC);
|
||||||
|
ERR_TO_STR(MIDIERR_INVALIDSETUP);
|
||||||
|
ERR_TO_STR(MIDIERR_NODEVICE);
|
||||||
|
ERR_TO_STR(MIDIERR_STILLPLAYING);
|
||||||
|
ERR_TO_STR(MIDIERR_UNPREPARED);
|
||||||
}
|
}
|
||||||
#undef ERR_TO_STR
|
#undef ERR_TO_STR
|
||||||
return wine_dbg_sprintf("Unknown(0x%08x)", error);
|
return wine_dbg_sprintf("Unknown(0x%08x)", error);
|
||||||
|
@ -882,9 +886,7 @@ static LPWINE_MIDI MIDI_OutAlloc(HMIDIOUT* lphMidiOut, DWORD_PTR* lpdwCallback,
|
||||||
|
|
||||||
lpwm = (LPWINE_MIDI)MMDRV_Alloc(size, MMDRV_MIDIOUT, &hMidiOut, lpdwFlags,
|
lpwm = (LPWINE_MIDI)MMDRV_Alloc(size, MMDRV_MIDIOUT, &hMidiOut, lpdwFlags,
|
||||||
lpdwCallback, lpdwInstance);
|
lpdwCallback, lpdwInstance);
|
||||||
|
*lphMidiOut = hMidiOut;
|
||||||
if (lphMidiOut != NULL)
|
|
||||||
*lphMidiOut = hMidiOut;
|
|
||||||
|
|
||||||
if (lpwm) {
|
if (lpwm) {
|
||||||
lpwm->mod.hMidi = hMidiOut;
|
lpwm->mod.hMidi = hMidiOut;
|
||||||
|
@ -1777,8 +1779,7 @@ MMRESULT WINAPI midiStreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID,
|
||||||
return MMSYSERR_NOMEM;
|
return MMSYSERR_NOMEM;
|
||||||
}
|
}
|
||||||
lpMidiStrm->hDevice = hMidiOut;
|
lpMidiStrm->hDevice = hMidiOut;
|
||||||
if (lphMidiStrm)
|
*lphMidiStrm = (HMIDISTRM)hMidiOut;
|
||||||
*lphMidiStrm = (HMIDISTRM)hMidiOut;
|
|
||||||
|
|
||||||
lpwm->mld.uDeviceID = *lpuDeviceID;
|
lpwm->mld.uDeviceID = *lpuDeviceID;
|
||||||
|
|
||||||
|
@ -1820,11 +1821,19 @@ MMRESULT WINAPI midiStreamOut(HMIDISTRM hMidiStrm, LPMIDIHDR lpMidiHdr,
|
||||||
|
|
||||||
TRACE("(%p, %p, %u)!\n", hMidiStrm, lpMidiHdr, cbMidiHdr);
|
TRACE("(%p, %p, %u)!\n", hMidiStrm, lpMidiHdr, cbMidiHdr);
|
||||||
|
|
||||||
|
if (cbMidiHdr < sizeof(MIDIHDR) || !lpMidiHdr || !lpMidiHdr->lpData)
|
||||||
|
return MMSYSERR_INVALPARAM;
|
||||||
|
|
||||||
|
if (!(lpMidiHdr->dwFlags & MHDR_PREPARED))
|
||||||
|
return MIDIERR_UNPREPARED;
|
||||||
|
|
||||||
|
if (lpMidiHdr->dwFlags & MHDR_INQUEUE)
|
||||||
|
return MIDIERR_STILLPLAYING;
|
||||||
|
|
||||||
if (!MMSYSTEM_GetMidiStream(hMidiStrm, &lpMidiStrm, NULL)) {
|
if (!MMSYSTEM_GetMidiStream(hMidiStrm, &lpMidiStrm, NULL)) {
|
||||||
ret = MMSYSERR_INVALHANDLE;
|
ret = MMSYSERR_INVALHANDLE;
|
||||||
} else if (!lpMidiHdr) {
|
|
||||||
ret = MMSYSERR_INVALPARAM;
|
|
||||||
} else {
|
} else {
|
||||||
|
lpMidiHdr->dwFlags |= MHDR_ISSTRM;
|
||||||
if (!PostThreadMessageA(lpMidiStrm->dwThreadID,
|
if (!PostThreadMessageA(lpMidiStrm->dwThreadID,
|
||||||
WINE_MSM_HEADER, cbMidiHdr,
|
WINE_MSM_HEADER, cbMidiHdr,
|
||||||
(LPARAM)lpMidiHdr)) {
|
(LPARAM)lpMidiHdr)) {
|
||||||
|
|
Loading…
Reference in New Issue