diff --git a/dlls/winmm/wineoss/midi.c b/dlls/winmm/wineoss/midi.c index 0782252bbdc19c8770ae56859e028c6bf89ab90e..73cd463dab1579c40066b82d146ec83581c6c782 100644 --- a/dlls/winmm/wineoss/midi.c +++ b/dlls/winmm/wineoss/midi.c @@ -553,6 +553,7 @@ static VOID WINAPI midTimeCallback(HWND hwnd, UINT msg, UINT id, DWORD dwTime) len = read(midiSeqFD, buffer, sizeof(buffer)); + if (len < 0) return; if ((len % 4) != 0) { WARN("bad length %d (%d)\n", len, errno); return; @@ -627,6 +628,7 @@ static DWORD midOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags) WARN("Invalid Parameter !\n"); return MMSYSERR_INVALPARAM; } + /* FIXME : * how to check that content of lpDesc is correct ? */ @@ -638,8 +640,12 @@ static DWORD midOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags) WARN("device already open !\n"); return MMSYSERR_ALLOCATED; } + if ((dwFlags & MIDI_IO_STATUS) != 0) { + WARN("No support for MIDI_IO_STATUS in dwFlags yet, ignoring it\n"); + dwFlags &= ~MIDI_IO_STATUS; + } if ((dwFlags & ~CALLBACK_TYPEMASK) != 0) { - FIXME("No support for MIDI_IO_STATUS in dwFlags\n"); + FIXME("Bad dwFlags\n"); return MMSYSERR_INVALFLAG; } diff --git a/include/mmsystem.h b/include/mmsystem.h index 5e05c1c9e3f021084527c8dbfb5360e9b6d3c266..6cf3c14cc8416d09248f337e7192ef5c9ac1613b 100644 --- a/include/mmsystem.h +++ b/include/mmsystem.h @@ -114,6 +114,8 @@ typedef struct { #define MM_MOM_DONE 0x3C9 #define MM_MOM_POSITIONCB 0x3CA +#define MM_MIM_MOREDATA 0x3CC + #define MMSYSERR_BASE 0 #define WAVERR_BASE 32 #define MIDIERR_BASE 64 @@ -471,6 +473,9 @@ typedef WORD *LPKEYARRAY; #define MIDIMAPPER (-1) #define MIDI_MAPPER (-1) +/* Only on Win95 and up */ +#define MIDI_IO_STATUS 0x00000020L + /* flags for wFlags parm of midiOutCachePatches(), midiOutCacheDrumPatches() */