a few mmio fixes
eric pouech
eric.pouech at wanadoo.fr
Sat Jun 16 13:54:39 CDT 2001
Andi reported an error in mmio file name parsing
here's the fix
i've also attached a few other changes sitting in my tree
A+
--
---------------
Eric Pouech (http://perso.wanadoo.fr/eric.pouech/)
"The future will be better tomorrow", Vice President Dan Quayle
-------------- next part --------------
Name: mmio
ChangeLog: fixed bugs in output functions (ascend, createChunk)
cleaned up trace messages
fixed some mmioOpen file name parsing
GenDate: 2001/06/16 18:42:31 UTC
ModifiedFiles: dlls/winmm/mmio.c
AddedFiles:
===================================================================
RCS file: /usr/share/cvs/cvsroot/wine/wine/dlls/winmm/mmio.c,v
retrieving revision 1.21
diff -u -u -r1.21 mmio.c
--- dlls/winmm/mmio.c 2001/03/10 19:15:49 1.21
+++ dlls/winmm/mmio.c 2001/06/16 07:51:39
@@ -127,7 +126,6 @@
* lParam2 = new name
* Returns: zero on success, non-zero on failure
*/
- FIXME("MMIOM_RENAME incomplete\n");
if (!MoveFileA((const char*)lParam1, (const char*)lParam2))
ret = MMIOERR_FILENOTFOUND;
break;
@@ -517,11 +515,11 @@
LPSTR extStart;
extStart = extEnd;
- while (extStart > szFileName && extStart[0] != '.') {
+ while (extStart >= szFileName && extStart[0] != '.') {
extStart--;
}
- if (extStart == szFileName) {
+ if (extStart < szFileName) {
ERR("+ but no . in szFileName: %s\n", debugstr_a(szFileName));
} else {
CHAR ext[5];
@@ -617,8 +615,8 @@
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;
+ if (uFlags & MMIO_EMPTYBUF)
+ wm->info.pchNext = wm->info.pchEndRead = wm->info.pchBuffer;
}
wm->info.dwFlags &= ~MMIO_DIRTY;
@@ -647,6 +645,7 @@
if (size > 0)
wm->info.pchEndRead += size;
}
+
wm->bBufferLoaded = TRUE;
return size;
}
@@ -663,7 +662,7 @@
if (cchBuffer > 0xFFFF)
WARN("Untested handling of huge mmio buffers (%ld >= 64k)\n", cchBuffer);
- if (MMIO_Flush(wm, MMIO_EMPTYBUF) != 0)
+ if (MMIO_Flush(wm, 0) != 0)
return MMIOERR_CANNOTWRITE;
if ((!cchBuffer || pchBuffer) && (wm->info.dwFlags & MMIO_ALLOCBUF)) {
@@ -902,7 +893,7 @@
if ((wm = MMIO_Get(NULL, hmmio)) == NULL)
return MMSYSERR_INVALHANDLE;
- if ((result = MMIO_Flush(wm, MMIO_EMPTYBUF)) != 0)
+ if ((result = MMIO_Flush(wm, 0)) != 0)
return result;
result = MMIO_SendMessage(wm, MMIOM_CLOSE, uFlags, 0, MMIO_PROC_32A);
@@ -1093,7 +1127,7 @@
/* condition to change buffer */
if ((wm->info.fccIOProc == FOURCC_MEM) ||
- MMIO_Flush(wm, MMIO_EMPTYBUF) ||
+ MMIO_Flush(wm, 0) ||
/* this also sets the wm->info.lDiskOffset field */
MMIO_SendMessage(wm, MMIOM_SEEK,
(offset / wm->info.cchBuffer) * wm->info.cchBuffer,
@@ -1123,7 +1157,7 @@
{
LPWINE_MMIO wm;
- TRACE("mmioGetInfo\n");
+ TRACE("(0x%04x,%p,0x%08x)\n",hmmio,lpmmioinfo,uFlags);
if ((wm = MMIO_Get(NULL, hmmio)) == NULL)
return MMSYSERR_INVALHANDLE;
@@ -1178,7 +1212,7 @@
{
LPWINE_MMIO wm;
- TRACE("mmioSetInfo\n");
+ TRACE("(0x%04x,%p,0x%08x)\n",hmmio,lpmmioinfo,uFlags);
if ((wm = MMIO_Get(NULL, hmmio)) == NULL)
return MMSYSERR_INVALHANDLE;
@@ -1211,7 +1245,7 @@
{
LPWINE_MMIO wm;
- TRACE("mmioSetInfo\n");
+ TRACE("(0x%04x,%p,0x%08x)\n",hmmio,lpmmioinfo,uFlags);
if ((wm = MMIO_Get(NULL, hmmio)) == NULL)
return MMSYSERR_INVALHANDLE;
@@ -1305,7 +1339,7 @@
if (uFlags != MMIO_READ && uFlags != MMIO_WRITE)
return MMSYSERR_INVALPARAM;
- if (MMIO_Flush(wm, MMIO_EMPTYBUF))
+ if (MMIO_Flush(wm, 0))
return MMIOERR_CANNOTWRITE;
MMIO_GrabNextBuffer(wm, uFlags == MMIO_READ);
@@ -1327,7 +1361,7 @@
{
LPWINE_MMIO wm;
- TRACE("mmioAdvance\n");
+ TRACE("hmmio=%04X, lpmmioinfo=%p, uFlags=%04X\n", hmmio, lpmmioinfo, uFlags);
if ((wm = MMIO_Get(NULL, hmmio)) == NULL)
return MMSYSERR_INVALHANDLE;
@@ -1338,7 +1372,7 @@
if (uFlags != MMIO_READ && uFlags != MMIO_WRITE)
return MMSYSERR_INVALPARAM;
- if (MMIO_Flush(wm, MMIO_EMPTYBUF))
+ if (MMIO_Flush(wm, 0))
return MMIOERR_CANNOTWRITE;
MMIO_GrabNextBuffer(wm, uFlags == MMIO_READ);
@@ -1371,12 +1405,9 @@
}
/* Pad with spaces */
- while (i < 4) {
- cc[i] = ' ';
- i++;
- }
+ while (i < 4) cc[i++] = ' ';
- TRACE("Got %c%c%c%c\n",cc[0],cc[1],cc[2],cc[3]);
+ TRACE("Got '%.4s'\n",cc);
return mmioFOURCC(cc[0],cc[1],cc[2],cc[3]);
}
@@ -1587,22 +1618,25 @@
TRACE("(%04X, %p, %04X);\n", hmmio, lpck, uFlags);
if (lpck->dwFlags & MMIO_DIRTY) {
- DWORD dwOldPos, dwNewSize, dwSizePos;
+ DWORD dwOldPos, dwNewSize;
- TRACE("chunk is marked MMIO_DIRTY, correcting chunk size\n");
+ TRACE("Chunk is dirty, checking if chunk's size is correct\n");
dwOldPos = mmioSeek(hmmio, 0, SEEK_CUR);
TRACE("dwOldPos=%ld lpck->dwDataOffset = %ld\n", dwOldPos, lpck->dwDataOffset);
dwNewSize = dwOldPos - lpck->dwDataOffset;
if (dwNewSize != lpck->cksize) {
- TRACE("dwNewSize=%ld\n", dwNewSize);
+ TRACE("Nope: lpck->cksize=%ld dwNewSize=%ld\n", lpck->cksize, dwNewSize);
lpck->cksize = dwNewSize;
- dwSizePos = lpck->dwDataOffset - sizeof(DWORD);
- TRACE("dwSizePos=%ld\n", dwSizePos);
-
- mmioSeek(hmmio, dwSizePos, SEEK_SET);
+ /* pad odd size with 0 */
+ if (dwNewSize & 1) {
+ char ch = 0;
+ mmioWrite(hmmio, &ch, 1);
+ }
+ mmioSeek(hmmio, lpck->dwDataOffset - sizeof(DWORD), SEEK_SET);
mmioWrite(hmmio, (LPSTR)&dwNewSize, sizeof(DWORD));
}
+ lpck->dwFlags = 0;
}
mmioSeek(hmmio, lpck->dwDataOffset + ((lpck->cksize + 1) & ~1), SEEK_SET);
@@ -1619,9 +1653,9 @@
}
/**************************************************************************
- * mmioCreateChunk [MMSYSTEM.1225]
+ * mmioCreateChunk [WINMM.115]
*/
-UINT16 WINAPI mmioCreateChunk16(HMMIO16 hmmio, MMCKINFO* lpck, UINT16 uFlags)
+UINT WINAPI mmioCreateChunk(HMMIO hmmio, MMCKINFO* lpck, UINT uFlags)
{
DWORD dwOldPos;
LONG size;
@@ -1637,7 +1671,7 @@
else if (uFlags == MMIO_CREATERIFF)
lpck->ckid = FOURCC_RIFF;
- TRACE("ckid=%08lX\n", lpck->ckid);
+ TRACE("ckid=%.4s\n", (LPSTR)&lpck->ckid);
size = 2 * sizeof(DWORD);
lpck->dwDataOffset = dwOldPos + size;
@@ -1653,16 +1687,16 @@
WARN("return CannotWrite\n");
return MMIOERR_CANNOTWRITE;
}
-
+
return 0;
}
/**************************************************************************
- * mmioCreateChunk [WINMM.115]
+ * mmioCreateChunk [MMSYSTEM.1225]
*/
-UINT WINAPI mmioCreateChunk(HMMIO hmmio, MMCKINFO* lpck, UINT uFlags)
+UINT16 WINAPI mmioCreateChunk16(HMMIO16 hmmio, MMCKINFO* lpck, UINT16 uFlags)
{
- return mmioCreateChunk16(hmmio, lpck, uFlags);
+ return mmioCreateChunk(hmmio, lpck, uFlags);
}
/**************************************************************************
More information about the wine-patches
mailing list