CVS: winex/dlls/winmm mmio.c,1.9,1.10

[email protected] 31 Jul 2007 17:44:35 -0000
Newsgroups gmane.comp.emulators.winex.cvs
Message-ID <[email protected]>
Subject: winex/dlls/winmm mmio.c,1.9,1.10Update of /var/lib/cvsd/cvsroot/winex/dlls/winmm
In directory agravaine:/tmp/cvs-serv23150/dlls/winmm

Modified Files:
	mmio.c 
Log Message:

- mmioSetInfo() needs to flush dirty buffers to disc



Index: mmio.c
===================================================================
RCS file: /var/lib/cvsd/cvsroot/winex/dlls/winmm/mmio.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- mmio.c	27 Mar 2007 22:18:04 -0000	1.9
+++ mmio.c	31 Jul 2007 17:44:33 -0000	1.10
@@ -1231,6 +1231,23 @@
     wm->info.pchNext = lpmmioinfo->pchNext;
     wm->info.pchEndRead = lpmmioinfo->pchEndRead;
 
+    /* We set this to 1 for internal use; if 0, user called us, and we need to flush
+       out any data that's outstanding */
+    if (uFlags == 0)
+    {
+        if (((wm->info.dwFlags & MMIO_RWMODE) != MMIO_READ) &&
+            (lpmmioinfo->dwFlags & MMIO_DIRTY))
+        {
+            MMIO_SendMessage(wm, MMIOM_SEEK, lpmmioinfo->lBufOffset, SEEK_SET, MMIO_PROC_32A);
+            MMIO_SendMessage(wm, MMIOM_WRITE, (LPARAM)lpmmioinfo->pchBuffer,
+                             lpmmioinfo->pchNext - lpmmioinfo->pchBuffer, MMIO_PROC_32A);
+        }
+        if (MMIO_Flush(wm, 0) != MMSYSERR_NOERROR)
+            return MMIOERR_CANNOTWRITE;
+        wm->dwFileSize = max(wm->dwFileSize,
+                             lpmmioinfo->lBufOffset + (lpmmioinfo->pchNext - lpmmioinfo->pchBuffer));
+    }
+
     return MMSYSERR_NOERROR;
 }
 
@@ -1300,7 +1317,7 @@
 
     TRACE("hmmio=%04X, lpmmioinfo=%p, uFlags=%04X\n", hmmio, lpmmioinfo, uFlags);
 
-    if (lpmmioinfo && (ret = mmioSetInfo(hmmio, lpmmioinfo, 0)) != MMSYSERR_NOERROR)
+    if (lpmmioinfo && (ret = mmioSetInfo(hmmio, lpmmioinfo, 1)) != MMSYSERR_NOERROR)
         return ret;
 
     if ((wm = MMIO_Get(NULL, hmmio)) == NULL)