[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