The adwInfo[0] field was no longer used on mmioOpen (may contain file handle).
diff --git a/dlls/winmm/mmio.c b/dlls/winmm/mmio.c index 46c005b..229a9e4 100644 --- a/dlls/winmm/mmio.c +++ b/dlls/winmm/mmio.c
@@ -250,9 +250,7 @@ /************************************************************************** * MMIO_Open [internal] */ -static HMMIO16 MMIO_Open(LPSTR szFileName, FOURCC fccIOProc, LPMMIOPROC16 pIOProc, - HPSTR pchBuffer, LONG cchBuffer, - DWORD dwOpenFlags, LPUINT lpRet, int use16) +static HMMIO16 MMIO_Open(LPSTR szFileName, MMIOINFO* refmminfo, DWORD dwOpenFlags, int use16) { LPMMIOINFO16 lpmminfo; HMMIO16 hmmio; @@ -275,43 +273,45 @@ memset(lpmminfo, 0, sizeof(MMIOINFO16)); /* assume DOS file if not otherwise specified */ - if (fccIOProc == 0 && pIOProc == NULL) { + if (refmminfo->fccIOProc == 0 && refmminfo->pIOProc == NULL) { lpmminfo->fccIOProc = FOURCC_DOS; lpmminfo->pIOProc = (LPMMIOPROC16) mmioDosIOProc; } /* if just the four character code is present, look up IO proc */ - else if (pIOProc == NULL) { + else if (refmminfo->pIOProc == NULL) { - lpmminfo->fccIOProc = fccIOProc; - lpmminfo->pIOProc = mmioInstallIOProc16(fccIOProc, NULL, MMIO_FINDPROC); + lpmminfo->fccIOProc = refmminfo->fccIOProc; + lpmminfo->pIOProc = mmioInstallIOProc16(refmminfo->fccIOProc, NULL, MMIO_FINDPROC); } /* if IO proc specified, use it and specified four character code */ else { - lpmminfo->fccIOProc = fccIOProc; - lpmminfo->pIOProc = pIOProc; + lpmminfo->fccIOProc = refmminfo->fccIOProc; + lpmminfo->pIOProc = (LPMMIOPROC16)refmminfo->pIOProc; } if (dwOpenFlags & MMIO_ALLOCBUF) { - if ((*lpRet = mmioSetBuffer16(hmmio, NULL, MMIO_DEFAULTBUFFER, 0))) { + if ((refmminfo->wErrorRet = mmioSetBuffer16(hmmio, NULL, MMIO_DEFAULTBUFFER, 0))) { return 0; } } else if (lpmminfo->fccIOProc == FOURCC_MEM) { - if ((*lpRet = mmioSetBuffer16(hmmio, pchBuffer, cchBuffer, 0))) { + if ((refmminfo->wErrorRet = mmioSetBuffer16(hmmio, refmminfo->pchBuffer, refmminfo->cchBuffer, 0))) { return 0; } } + /* see mmioDosIOProc for that one */ + lpmminfo->adwInfo[0] = refmminfo->adwInfo[0]; lpmminfo->dwFlags = dwOpenFlags; lpmminfo->hmmio = hmmio; /* call IO proc to actually open file */ - *lpRet = (UINT16) mmioSendMessage(hmmio, MMIOM_OPEN, (LPARAM) szFileName, (LPARAM) use16); + refmminfo->wErrorRet = (UINT16) mmioSendMessage(hmmio, MMIOM_OPEN, (LPARAM) szFileName, (LPARAM) use16); GlobalUnlock16(hmmio); - if (*lpRet != 0) { + if (refmminfo->wErrorRet != 0) { GlobalFree16(hmmio); return 0; } @@ -322,22 +322,12 @@ /************************************************************************** * mmioOpenW [WINMM.123] */ -HMMIO WINAPI mmioOpenW(LPWSTR szFileName, MMIOINFO * lpmmioinfo, +HMMIO WINAPI mmioOpenW(LPWSTR szFileName, MMIOINFO* lpmmioinfo, DWORD dwOpenFlags) { LPSTR szFn = HEAP_strdupWtoA(GetProcessHeap(),0,szFileName); - HMMIO ret; - - if (lpmmioinfo) { - ret = MMIO_Open(szFn, lpmmioinfo->fccIOProc, - (LPMMIOPROC16)lpmmioinfo->pIOProc, - lpmmioinfo->pchBuffer, lpmmioinfo->cchBuffer, - dwOpenFlags, &lpmmioinfo->wErrorRet, FALSE); - } else { - UINT res; - ret = MMIO_Open(szFn, 0, NULL, NULL, 0, - dwOpenFlags, &res, FALSE); - } + HMMIO ret = mmioOpenA(szFn, lpmmioinfo, dwOpenFlags); + HeapFree(GetProcessHeap(),0,szFn); return ret; } @@ -349,15 +339,18 @@ DWORD dwOpenFlags) { HMMIO ret; - UINT res; if (lpmmioinfo) { - ret = MMIO_Open(szFileName, lpmmioinfo->fccIOProc, - (LPMMIOPROC16)lpmmioinfo->pIOProc, - lpmmioinfo->pchBuffer, lpmmioinfo->cchBuffer, - dwOpenFlags, &lpmmioinfo->wErrorRet, FALSE); + ret = MMIO_Open(szFileName, lpmmioinfo, dwOpenFlags, FALSE); } else { - ret = MMIO_Open(szFileName, 0, NULL, NULL, 0, dwOpenFlags, &res, FALSE); + MMIOINFO mmioinfo; + + mmioinfo.fccIOProc = 0; + mmioinfo.pIOProc = NULL; + mmioinfo.pchBuffer = NULL; + mmioinfo.cchBuffer = 0; + + ret = MMIO_Open(szFileName, &mmioinfo, dwOpenFlags, FALSE); } return ret; } @@ -368,16 +361,19 @@ HMMIO16 WINAPI mmioOpen16(LPSTR szFileName, MMIOINFO16* lpmmioinfo, DWORD dwOpenFlags) { - HMMIO ret; - UINT res; - + HMMIO ret; + MMIOINFO mmio; + if (lpmmioinfo) { - ret = MMIO_Open(szFileName, lpmmioinfo->fccIOProc, lpmmioinfo->pIOProc, - PTR_SEG_TO_LIN(lpmmioinfo->pchBuffer), lpmmioinfo->cchBuffer, - dwOpenFlags, &res, FALSE); - lpmmioinfo->wErrorRet = res; + mmio.fccIOProc = lpmmioinfo->fccIOProc; + mmio.pIOProc = (LPMMIOPROC)lpmmioinfo->pIOProc; + mmio.pchBuffer = PTR_SEG_TO_LIN(lpmmioinfo->pchBuffer); + mmio.cchBuffer = lpmmioinfo->cchBuffer; + mmio.adwInfo[0] = lpmmioinfo->adwInfo[0]; + ret = MMIO_Open(szFileName, &mmio, dwOpenFlags, FALSE); + lpmmioinfo->wErrorRet = mmio.wErrorRet; } else { - ret = MMIO_Open(szFileName, 0, NULL, NULL, 0, dwOpenFlags, &res, TRUE); + return mmioOpenA(szFileName, NULL, dwOpenFlags); } return ret; }