[PATCH 3/3] [WinMM]: transform the mmio proc kind into a boolean (to distinguish between ANSI and Unicode)
Eric Pouech
eric.pouech at orange.fr
Wed Oct 14 14:56:13 CDT 2009
A+
---
dlls/winmm/mmio.c | 101 ++++++++++++++++++++++-----------------------------
dlls/winmm/winemm.h | 4 +-
2 files changed, 44 insertions(+), 61 deletions(-)
diff --git a/dlls/winmm/mmio.c b/dlls/winmm/mmio.c
index 7b34050..5205e8a 100644
--- a/dlls/winmm/mmio.c
+++ b/dlls/winmm/mmio.c
@@ -227,8 +227,8 @@ static LRESULT CALLBACK mmioMemIOProc(LPMMIOINFO lpmmioinfo, UINT uMessage,
*/
static struct IOProcList defaultProcs[] = {
- {&defaultProcs[1], FOURCC_DOS, (LPMMIOPROC)mmioDosIOProc, MMIO_PROC_32A, 0},
- {NULL, FOURCC_MEM, (LPMMIOPROC)mmioMemIOProc, MMIO_PROC_32A, 0},
+ {&defaultProcs[1], FOURCC_DOS, (LPMMIOPROC)mmioDosIOProc, FALSE, 0},
+ {NULL, FOURCC_MEM, (LPMMIOPROC)mmioMemIOProc, FALSE, 0},
};
static struct IOProcList* pIOProcListAnchor = &defaultProcs[0];
@@ -254,13 +254,13 @@ static struct IOProcList* MMIO_FindProcNode(FOURCC fccIOProc)
* MMIO_InstallIOProc [INTERNAL]
*/
static LPMMIOPROC MMIO_InstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc,
- DWORD dwFlags, enum mmioProcType type)
+ DWORD dwFlags, BOOL is_unicode)
{
LPMMIOPROC lpProc = NULL;
struct IOProcList* pListNode;
struct IOProcList** ppListNode;
- TRACE("(%08x, %p, %08X, %i)\n", fccIOProc, pIOProc, dwFlags, type);
+ TRACE("(%08x, %p, %08X, %s)\n", fccIOProc, pIOProc, dwFlags, is_unicode ? "unicode" : "ansi");
if (dwFlags & MMIO_GLOBALPROC)
FIXME("Global procedures not implemented\n");
@@ -274,7 +274,7 @@ static LPMMIOPROC MMIO_InstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc,
/* Fill in this node */
pListNode->fourCC = fccIOProc;
pListNode->pIOProc = pIOProc;
- pListNode->type = type;
+ pListNode->is_unicode = is_unicode;
pListNode->count = 0;
/* Stick it on the end of the list */
@@ -339,7 +339,7 @@ static LPMMIOPROC MMIO_InstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc,
*/
static LRESULT send_message(struct IOProcList* ioProc, LPMMIOINFO mmioinfo,
DWORD wMsg, LPARAM lParam1,
- LPARAM lParam2, enum mmioProcType type)
+ LPARAM lParam2, BOOL is_unicode)
{
LRESULT result = MMSYSERR_ERROR;
LPARAM lp1 = lParam1, lp2 = lParam2;
@@ -349,24 +349,17 @@ static LRESULT send_message(struct IOProcList* ioProc, LPMMIOINFO mmioinfo,
result = MMSYSERR_INVALPARAM;
}
- switch (ioProc->type) {
- case MMIO_PROC_32A:
- case MMIO_PROC_32W:
- if (ioProc->type != type) {
- /* map (lParam1, lParam2) into (lp1, lp2) 32 A<=>W */
- FIXME("NIY 32 A<=>W mapping\n");
- }
- result = (ioProc->pIOProc)((LPSTR)mmioinfo, wMsg, lp1, lp2);
+ if (ioProc->is_unicode != is_unicode) {
+ /* map (lParam1, lParam2) into (lp1, lp2) 32 A<=>W */
+ FIXME("NIY 32 A<=>W mapping\n");
+ }
+ result = (ioProc->pIOProc)((LPSTR)mmioinfo, wMsg, lp1, lp2);
#if 0
- if (ioProc->type != type) {
+ if (ioProc->is_unicode != is_unicode) {
/* unmap (lParam1, lParam2) into (lp1, lp2) 32 A<=>W */
}
#endif
- break;
- default:
- FIXME("Internal error\n");
- }
return result;
}
@@ -499,11 +492,10 @@ static MMRESULT MMIO_Flush(WINE_MMIO* wm, UINT uFlags)
/* not quite sure what to do here, but I'll guess */
if (wm->info.dwFlags & MMIO_DIRTY) {
/* FIXME: error handling */
- send_message(wm->ioProc, &wm->info, MMIOM_SEEK,
- wm->info.lBufOffset, SEEK_SET, MMIO_PROC_32A);
- send_message(wm->ioProc, &wm->info, MMIOM_WRITE,
+ send_message(wm->ioProc, &wm->info, MMIOM_SEEK, wm->info.lBufOffset, SEEK_SET, FALSE);
+ send_message(wm->ioProc, &wm->info, MMIOM_WRITE,
(LPARAM)wm->info.pchBuffer,
- wm->info.pchNext - wm->info.pchBuffer, MMIO_PROC_32A);
+ wm->info.pchNext - wm->info.pchBuffer, FALSE);
}
if (uFlags & MMIO_EMPTYBUF)
wm->info.pchNext = wm->info.pchEndRead = wm->info.pchBuffer;
@@ -522,7 +514,7 @@ static LONG MMIO_GrabNextBuffer(LPWINE_MMIO wm, int for_read)
TRACE("bo=%x do=%x of=%lx\n",
wm->info.lBufOffset, wm->info.lDiskOffset,
- send_message(wm->ioProc, &wm->info, MMIOM_SEEK, 0, SEEK_CUR, MMIO_PROC_32A));
+ send_message(wm->ioProc, &wm->info, MMIOM_SEEK, 0, SEEK_CUR, FALSE));
wm->info.lBufOffset = wm->info.lDiskOffset;
wm->info.pchNext = wm->info.pchBuffer;
@@ -531,8 +523,8 @@ static LONG MMIO_GrabNextBuffer(LPWINE_MMIO wm, int for_read)
wm->bBufferLoaded = TRUE;
if (for_read) {
- size = send_message(wm->ioProc, &wm->info, MMIOM_READ,
- (LPARAM)wm->info.pchBuffer, size, MMIO_PROC_32A);
+ size = send_message(wm->ioProc, &wm->info, MMIOM_READ,
+ (LPARAM)wm->info.pchBuffer, size, FALSE);
if (size > 0)
wm->info.pchEndRead += size;
else
@@ -586,13 +578,12 @@ static MMRESULT MMIO_SetBuffer(WINE_MMIO* wm, void* pchBuffer, LONG cchBuffer,
/**************************************************************************
* MMIO_Open [internal]
*/
-static HMMIO MMIO_Open(LPSTR szFileName, MMIOINFO* refmminfo, DWORD dwOpenFlags,
- enum mmioProcType type)
+static HMMIO MMIO_Open(LPSTR szFileName, MMIOINFO* refmminfo, DWORD dwOpenFlags, BOOL is_unicode)
{
LPWINE_MMIO wm;
MMIOINFO mmioinfo;
- TRACE("('%s', %p, %08X, %d);\n", szFileName, refmminfo, dwOpenFlags, type);
+ TRACE("('%s', %p, %08X, %s);\n", szFileName, refmminfo, dwOpenFlags, is_unicode ? "unicode" : "ansi");
if (!refmminfo) {
refmminfo = &mmioinfo;
@@ -601,7 +592,7 @@ static HMMIO MMIO_Open(LPSTR szFileName, MMIOINFO* refmminfo, DWORD dwOpenFlags,
mmioinfo.pIOProc = NULL;
mmioinfo.pchBuffer = NULL;
mmioinfo.cchBuffer = 0;
- type = MMIO_PROC_32A;
+ is_unicode = FALSE;
}
if (dwOpenFlags & (MMIO_PARSE|MMIO_EXIST)) {
@@ -642,7 +633,7 @@ static HMMIO MMIO_Open(LPSTR szFileName, MMIOINFO* refmminfo, DWORD dwOpenFlags,
else {
wm->info.fccIOProc = refmminfo->fccIOProc;
MMIO_InstallIOProc(wm->info.fccIOProc, refmminfo->pIOProc,
- MMIO_INSTALLPROC, type);
+ MMIO_INSTALLPROC, is_unicode);
if (!(wm->ioProc = MMIO_FindProcNode(wm->info.fccIOProc))) goto error2;
assert(wm->ioProc->pIOProc == refmminfo->pIOProc);
wm->bTmpIOProc = TRUE;
@@ -669,8 +660,8 @@ static HMMIO MMIO_Open(LPSTR szFileName, MMIOINFO* refmminfo, DWORD dwOpenFlags,
wm->info.adwInfo[0] = refmminfo->adwInfo[0];
/* call IO proc to actually open file */
- refmminfo->wErrorRet = send_message(wm->ioProc, &wm->info, MMIOM_OPEN,
- (LPARAM)szFileName, 0, MMIO_PROC_32A);
+ refmminfo->wErrorRet = send_message(wm->ioProc, &wm->info, MMIOM_OPEN,
+ (LPARAM)szFileName, 0, FALSE);
/* grab file size, when possible */
wm->dwFileSize = GetFileSize((HANDLE)wm->info.adwInfo[0], NULL);
@@ -701,7 +692,7 @@ HMMIO WINAPI mmioOpenW(LPWSTR szFileName, MMIOINFO* lpmmioinfo,
WideCharToMultiByte( CP_ACP, 0, szFileName, -1, szFn, len, NULL, NULL );
}
- ret = MMIO_Open(szFn, lpmmioinfo, dwOpenFlags, MMIO_PROC_32W);
+ ret = MMIO_Open(szFn, lpmmioinfo, dwOpenFlags, TRUE);
HeapFree(GetProcessHeap(), 0, szFn);
return ret;
@@ -713,7 +704,7 @@ HMMIO WINAPI mmioOpenW(LPWSTR szFileName, MMIOINFO* lpmmioinfo,
HMMIO WINAPI mmioOpenA(LPSTR szFileName, MMIOINFO* lpmmioinfo,
DWORD dwOpenFlags)
{
- return MMIO_Open(szFileName, lpmmioinfo, dwOpenFlags, MMIO_PROC_32A);
+ return MMIO_Open(szFileName, lpmmioinfo, dwOpenFlags, FALSE);
}
/**************************************************************************
@@ -732,8 +723,7 @@ MMRESULT WINAPI mmioClose(HMMIO hmmio, UINT uFlags)
if ((result = MMIO_Flush(wm, 0)) != MMSYSERR_NOERROR)
return result;
- result = send_message(wm->ioProc, &wm->info, MMIOM_CLOSE,
- uFlags, 0, MMIO_PROC_32A);
+ result = send_message(wm->ioProc, &wm->info, MMIOM_CLOSE, uFlags, 0, FALSE);
MMIO_SetBuffer(wm, NULL, 0, 0);
@@ -741,7 +731,7 @@ MMRESULT WINAPI mmioClose(HMMIO hmmio, UINT uFlags)
if (wm->bTmpIOProc)
MMIO_InstallIOProc(wm->info.fccIOProc, wm->ioProc->pIOProc,
- MMIO_REMOVEPROC, wm->ioProc->type);
+ MMIO_REMOVEPROC, wm->ioProc->is_unicode);
MMIO_Destroy(wm);
@@ -763,8 +753,7 @@ LONG WINAPI mmioRead(HMMIO hmmio, HPSTR pch, LONG cch)
/* unbuffered case first */
if (!wm->info.pchBuffer)
- return send_message(wm->ioProc, &wm->info, MMIOM_READ,
- (LPARAM)pch, cch, MMIO_PROC_32A);
+ return send_message(wm->ioProc, &wm->info, MMIOM_READ, (LPARAM)pch, cch, FALSE);
/* first try from current buffer */
if (wm->info.pchNext != wm->info.pchEndRead) {
@@ -844,8 +833,7 @@ LONG WINAPI mmioWrite(HMMIO hmmio, HPCSTR pch, LONG cch)
}
count = bytesW;
} else {
- count = send_message(wm->ioProc, &wm->info, MMIOM_WRITE,
- (LPARAM)pch, cch, MMIO_PROC_32A);
+ count = send_message(wm->ioProc, &wm->info, MMIOM_WRITE, (LPARAM)pch, cch, FALSE);
wm->info.lBufOffset = wm->info.lDiskOffset;
}
@@ -868,8 +856,7 @@ LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, INT iOrigin)
/* not buffered, direct seek on file */
if (!wm->info.pchBuffer)
- return send_message(wm->ioProc, &wm->info, MMIOM_SEEK,
- lOffset, iOrigin, MMIO_PROC_32A);
+ return send_message(wm->ioProc, &wm->info, MMIOM_SEEK, lOffset, iOrigin, FALSE);
switch (iOrigin) {
case SEEK_SET:
@@ -908,7 +895,7 @@ LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, INT iOrigin)
/* this also sets the wm->info.lDiskOffset field */
send_message(wm->ioProc, &wm->info, MMIOM_SEEK,
(offset / wm->info.cchBuffer) * wm->info.cchBuffer,
- SEEK_SET, MMIO_PROC_32A) == -1)
+ SEEK_SET, FALSE) == -1)
return -1;
MMIO_GrabNextBuffer(wm, TRUE);
}
@@ -1017,11 +1004,9 @@ MMRESULT WINAPI mmioAdvance(HMMIO hmmio, MMIOINFO* lpmmioinfo, UINT uFlags)
if (uFlags == MMIO_WRITE && (lpmmioinfo->dwFlags & MMIO_DIRTY))
{
- send_message(wm->ioProc, &wm->info, MMIOM_SEEK,
- lpmmioinfo->lBufOffset, SEEK_SET, MMIO_PROC_32A);
- send_message(wm->ioProc, &wm->info, MMIOM_WRITE,
- (LPARAM)lpmmioinfo->pchBuffer,
- lpmmioinfo->pchNext - lpmmioinfo->pchBuffer, MMIO_PROC_32A);
+ send_message(wm->ioProc, &wm->info, MMIOM_SEEK, lpmmioinfo->lBufOffset, SEEK_SET, FALSE);
+ send_message(wm->ioProc, &wm->info, MMIOM_WRITE, (LPARAM)lpmmioinfo->pchBuffer,
+ lpmmioinfo->pchNext - lpmmioinfo->pchBuffer, FALSE);
lpmmioinfo->dwFlags &= ~MMIO_DIRTY;
}
if (MMIO_Flush(wm, 0) != MMSYSERR_NOERROR)
@@ -1085,7 +1070,7 @@ FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR sz, UINT uFlags)
LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC fccIOProc,
LPMMIOPROC pIOProc, DWORD dwFlags)
{
- return MMIO_InstallIOProc(fccIOProc, pIOProc, dwFlags, MMIO_PROC_32A);
+ return MMIO_InstallIOProc(fccIOProc, pIOProc, dwFlags, FALSE);
}
/**************************************************************************
@@ -1094,7 +1079,7 @@ LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC fccIOProc,
LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC fccIOProc,
LPMMIOPROC pIOProc, DWORD dwFlags)
{
- return MMIO_InstallIOProc(fccIOProc, pIOProc, dwFlags, MMIO_PROC_32W);
+ return MMIO_InstallIOProc(fccIOProc, pIOProc, dwFlags, TRUE);
}
/******************************************************************
@@ -1103,11 +1088,11 @@ LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC fccIOProc,
*
*/
static LRESULT MMIO_SendMessage(HMMIO hmmio, UINT uMessage, LPARAM lParam1,
- LPARAM lParam2, enum mmioProcType type)
+ LPARAM lParam2, BOOL is_unicode)
{
LPWINE_MMIO wm;
- TRACE("(%p, %u, %ld, %ld, %d)\n", hmmio, uMessage, lParam1, lParam2, type);
+ TRACE("(%p, %u, %ld, %ld, %s)\n", hmmio, uMessage, lParam1, lParam2, is_unicode ? "unicode" : "ansi");
if (uMessage < MMIOM_USER)
return MMSYSERR_INVALPARAM;
@@ -1115,7 +1100,7 @@ static LRESULT MMIO_SendMessage(HMMIO hmmio, UINT uMessage, LPARAM lParam1,
if ((wm = MMIO_Get(hmmio)) == NULL)
return MMSYSERR_INVALHANDLE;
- return send_message(wm->ioProc, &wm->info, uMessage, lParam1, lParam2, type);
+ return send_message(wm->ioProc, &wm->info, uMessage, lParam1, lParam2, is_unicode);
}
/**************************************************************************
@@ -1124,7 +1109,7 @@ static LRESULT MMIO_SendMessage(HMMIO hmmio, UINT uMessage, LPARAM lParam1,
LRESULT WINAPI mmioSendMessage(HMMIO hmmio, UINT uMessage,
LPARAM lParam1, LPARAM lParam2)
{
- return MMIO_SendMessage(hmmio, uMessage, lParam1, lParam2, MMIO_PROC_32A);
+ return MMIO_SendMessage(hmmio, uMessage, lParam1, lParam2, FALSE);
}
/**************************************************************************
@@ -1329,7 +1314,7 @@ MMRESULT WINAPI mmioRenameA(LPCSTR szFileName, LPCSTR szNewFileName,
ioProc = &tmp;
tmp.fourCC = lpmmioinfo->fccIOProc;
tmp.pIOProc = lpmmioinfo->pIOProc;
- tmp.type = MMIO_PROC_32A;
+ tmp.is_unicode = FALSE;
tmp.count = 1;
}
@@ -1337,7 +1322,7 @@ MMRESULT WINAPI mmioRenameA(LPCSTR szFileName, LPCSTR szNewFileName,
* or make a copy of it because it's const ???
*/
return send_message(ioProc, (MMIOINFO*)lpmmioinfo, MMIOM_RENAME,
- (LPARAM)szFileName, (LPARAM)szNewFileName, MMIO_PROC_32A);
+ (LPARAM)szFileName, (LPARAM)szNewFileName, FALSE);
}
/**************************************************************************
diff --git a/dlls/winmm/winemm.h b/dlls/winmm/winemm.h
index d3ccdcb..50edb72 100644
--- a/dlls/winmm/winemm.h
+++ b/dlls/winmm/winemm.h
@@ -153,14 +153,12 @@ typedef struct tagWINE_MCIDRIVER {
#define WINE_TIMER_IS32 0x80
-enum mmioProcType {MMIO_PROC_32A,MMIO_PROC_32W};
-
struct IOProcList
{
struct IOProcList*pNext; /* Next item in linked list */
FOURCC fourCC; /* four-character code identifying IOProc */
LPMMIOPROC pIOProc; /* pointer to IProc */
- enum mmioProcType type; /* 16, 32A or 32W */
+ BOOL is_unicode; /* 32A or 32W */
int count; /* number of objects linked to it */
};
More information about the wine-patches
mailing list