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)