Fixed first seek on MEM mmio files.
diff --git a/dlls/winmm/mmio.c b/dlls/winmm/mmio.c
index d8d9c71..d7cb715 100644
--- a/dlls/winmm/mmio.c
+++ b/dlls/winmm/mmio.c
@@ -10,7 +10,6 @@
/* Still to be done:
* + correct handling of global/local IOProcs
* + mode of mmio objects is not used (read vs write vs readwrite)
- * + IO buffering is limited to 64k
* + optimization of internal buffers (seg / lin)
* + even in 32 bit only, a seg ptr IO buffer is allocated (after this is
* fixed, we'll have a proper 32/16 separation)
@@ -614,20 +613,18 @@
*/
static LRESULT MMIO_Flush(WINE_MMIO* wm, UINT uFlags)
{
- if ((!wm->info.cchBuffer) || (wm->info.fccIOProc == FOURCC_MEM)) {
- return 0;
+ if (wm->info.cchBuffer && (wm->info.fccIOProc != FOURCC_MEM)) {
+ /* not quite sure what to do here, but I'll guess */
+ if (wm->info.dwFlags & MMIO_DIRTY) {
+ MMIO_SendMessage(wm, MMIOM_SEEK, wm->info.lDiskOffset,
+ SEEK_SET, MMIO_PROC_32A);
+ MMIO_SendMessage(wm, MMIOM_WRITE, (LPARAM)wm->info.pchBuffer,
+ wm->info.pchNext - wm->info.pchBuffer, MMIO_PROC_32A);
+ }
+ if (uFlags & MMIO_EMPTYBUF)
+ wm->info.pchNext = wm->info.pchBuffer;
}
-
- /* not quite sure what to do here, but I'll guess */
- if (wm->info.dwFlags & MMIO_DIRTY) {
- MMIO_SendMessage(wm, MMIOM_SEEK, wm->info.lDiskOffset,
- SEEK_SET, MMIO_PROC_32A);
- MMIO_SendMessage(wm, MMIOM_WRITE, (LPARAM)wm->info.pchBuffer,
- wm->info.pchNext - wm->info.pchBuffer, MMIO_PROC_32A);
- wm->info.dwFlags &= ~MMIO_DIRTY;
- }
- if (uFlags & MMIO_EMPTYBUF)
- wm->info.pchNext = wm->info.pchBuffer;
+ wm->info.dwFlags &= ~MMIO_DIRTY;
return 0;
}
@@ -667,10 +664,8 @@
TRACE("(%p %p %ld %u %d)\n", wm, pchBuffer, cchBuffer, uFlags, bFrom32);
if (uFlags) return MMSYSERR_INVALPARAM;
- if (cchBuffer > 0xFFFF) {
- FIXME("Not handling huge mmio buffers yet (%ld >= 64k)\n", cchBuffer);
- return MMSYSERR_INVALPARAM;
- }
+ if (cchBuffer > 0xFFFF)
+ WARN("Untested handling of huge mmio buffers (%ld >= 64k)\n", cchBuffer);
if (MMIO_Flush(wm, MMIO_EMPTYBUF) != 0)
return MMIOERR_CANNOTWRITE;
@@ -790,6 +785,7 @@
type != MMIO_PROC_16);
if (refmminfo->wErrorRet != MMSYSERR_NOERROR)
goto error1;
+ wm->bBufferLoaded = TRUE;
} /* else => unbuffered, wm->info.pchBuffer == NULL */
/* see mmioDosIOProc for that one */
diff --git a/dlls/winmm/wineoss/audio.c b/dlls/winmm/wineoss/audio.c
index 27d052e..cc5f952 100644
--- a/dlls/winmm/wineoss/audio.c
+++ b/dlls/winmm/wineoss/audio.c
@@ -1417,7 +1417,7 @@
static HRESULT WINAPI IDsDriverImpl_Open(PIDSDRIVER iface)
{
ICOM_THIS(IDsDriverImpl,iface);
- int enable;
+ int enable = 0;
TRACE("(%p)\n",iface);
/* make sure the card doesn't start playing before we want it to */
@@ -1557,10 +1557,6 @@
* Low level WAVE IN implemantation *
*======================================================================*/
-/*======================================================================*
- * Low level WAVE IN implemantation *
- *======================================================================*/
-
/**************************************************************************
* widGetDevCaps [internal]
*/