44 TRACE(
"(%p, %X, 0x%lx, 0x%lx);\n", lpmmioinfo, uMessage, lParam1, lParam2);
58 FIXME(
"MMIO_GETTEMP not implemented\n");
127 if (!
MoveFileA((
const char*)lParam1, (
const char*)lParam2))
132 FIXME(
"unexpected message %u\n", uMessage);
145 TRACE(
"(%p,0x%04x,0x%08lx,0x%08lx)\n", lpmmioinfo, uMessage, lParam1, lParam2);
178 FIXME(
"MMIOM_READ on memory files should not occur, buffer may be lost!\n");
192 FIXME(
"MMIOM_WRITE on memory files should not occur, buffer may be lost!\n");
202 FIXME(
"MMIOM_SEEK on memory files should not occur, buffer may be lost!\n");
206 FIXME(
"unexpected message %u\n", uMessage);
232 if (pListNode->
fourCC == fccIOProc) {
252 FIXME(
"Global procedures not implemented\n");
261 pListNode->
fourCC = fccIOProc;
264 pListNode->
count = 0;
285 while ((*ppListNode) &&
287 (*ppListNode)->fourCC != fccIOProc :
288 (*ppListNode)->pIOProc !=
pIOProc))
289 ppListNode = &((*ppListNode)->pNext);
295 if ((*ppListNode)->count) {
296 ERR(
"Cannot remove a mmIOProc while in use\n");
302 WARN(
"Tried to remove built-in mmio proc. Skipping\n");
306 lpProc = (*ppListNode)->
pIOProc;
307 *ppListNode = (*ppListNode)->
pNext;
331 LPARAM lp1 = lParam1, lp2 = lParam2;
334 ERR(
"ioProc NULL\n");
340 FIXME(
"NIY 32 A<=>W mapping\n");
378 extStart =
strrchr(szFileName,
'.');
386 extEnd =
strchr(extStart,
'+');
389 if (extEnd - extStart - 1 > 4)
390 WARN(
"Extension length > 4\n");
395 if (
strlen(extStart) > 4) {
396 WARN(
"Extension length > 4\n");
433 static WORD MMIO_counter = 0;
461 while (*
m && *
m != wm)
m = &(*m)->
lpNext;
501 TRACE(
"bo=%x do=%x of=%lx\n",
532 WARN(
"Untested handling of huge mmio buffers (%d >= 64k)\n",
cchBuffer);
572 TRACE(
"('%s', %p, %08X, %s);\n", szFileName, refmminfo, dwOpenFlags,
is_unicode ?
"unicode" :
"ansi");
575 refmminfo = &mmioinfo;
679 if (!szFn)
return NULL;
764 if (
size <= 0)
break;
809 FIXME(
"memory file expansion not implemented!\n");
840 TRACE(
"(%p, %08X, %d);\n", hmmio, lOffset, iOrigin);
909 *lpmmioinfo = wm->
info;
948 TRACE(
"(hmmio=%p, pchBuf=%p, cchBuf=%d, uFlags=%#08x)\n",
979 TRACE(
"hmmio=%p, lpmmioinfo=%p, uFlags=%04X\n", hmmio, lpmmioinfo,
uFlags);
1029 for (
i = 0;
i < 4 && sz[
i];
i++) {
1038 while (
i < 4)
cc[
i++] =
' ';
1083 TRACE(
"(%p, %u, %ld, %ld, %s)\n", hmmio, uMessage, lParam1, lParam2,
is_unicode ?
"unicode" :
"ansi");
1113 TRACE(
"(%p, %p, %p, %04X);\n", hmmio, lpck, lpckParent,
uFlags);
1119 TRACE(
"dwOldPos=%d\n", dwOldPos);
1121 if (lpckParent !=
NULL) {
1124 if (dwOldPos < lpckParent->dwDataOffset ||
1126 WARN(
"outside parent chunk\n");
1140 srchCkId = lpck->
ckid;
1155 TRACE(
"searching for %4.4s.%4.4s\n",
1156 (
LPCSTR)&srchCkId, srchType ? (
LPCSTR)&srchType :
"any");
1163 if (ix < 2*
sizeof(
DWORD))
1166 WARN(
"return ChunkNotFound\n");
1170 lpck->dwDataOffset = dwOldPos + 2 *
sizeof(
DWORD);
1171 TRACE(
"ckid=%4.4s fcc=%4.4s cksize=%08X !\n",
1173 srchType ? (
LPCSTR)&lpck->fccType:
"<na>",
1175 if ( (!srchCkId || (srchCkId == lpck->ckid)) &&
1176 (!srchType || (srchType == lpck->fccType)) )
1179 dwOldPos = lpck->dwDataOffset + ((lpck->cksize + 1) & ~1);
1195 TRACE(
"lpck: ckid=%.4s, cksize=%d, dwDataOffset=%d fccType=%08X (%.4s)!\n",
1209 DWORD dwOldPos, dwNewSize;
1211 TRACE(
"Chunk is dirty, checking if chunk's size is correct\n");
1215 if (dwNewSize != lpck->
cksize) {
1216 TRACE(
"Nope: lpck->cksize=%d dwNewSize=%d\n", lpck->
cksize, dwNewSize);
1217 lpck->
cksize = dwNewSize;
1220 if (dwNewSize & 1) {
1247 TRACE(
"dwOldPos=%d\n", dwOldPos);
1264 TRACE(
"after mmioWrite ix = %d req = %d, errno = %d\n", ix,
size,
errno);
1267 WARN(
"return CannotWrite\n");
1284 TRACE(
"('%s', '%s', %p, %08X);\n",
1331 if (!szFn)
goto done;
1338 if (!sznFn)
goto done;
LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags)
struct IOProcList * ioProc
MMRESULT WINAPI mmioFlush(HMMIO hmmio, UINT uFlags)
LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags)
#define WideCharToMultiByte
LONG WINAPI _llseek(HFILE hFile, LONG lOffset, int iOrigin)
ACPI_SIZE strlen(const char *String)
#define MMIOERR_CANNOTWRITE
GLuint GLuint GLsizei count
MMRESULT WINAPI mmioAscend(HMMIO hmmio, LPMMCKINFO lpck, UINT uFlags)
static LPWINE_MMIO MMIO_Create(void)
static MMRESULT MMIO_Flush(WINE_MMIO *wm, UINT uFlags)
static LONG MMIO_GrabNextBuffer(LPWINE_MMIO wm, int for_read)
BOOL WINAPI MoveFileA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName)
MMRESULT WINAPI mmioClose(HMMIO hmmio, UINT uFlags)
HMMIO WINAPI mmioOpenW(LPWSTR szFileName, MMIOINFO *lpmmioinfo, DWORD dwOpenFlags)
#define MMSYSERR_INVALHANDLE
static LRESULT CALLBACK mmioMemIOProc(LPMMIOINFO lpmmioinfo, UINT uMessage, LPARAM lParam1, LPARAM lParam2)
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
#define MMIOERR_FILENOTFOUND
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
static WINE_MMIO * MMIOList
HMMIO WINAPI mmioOpenA(LPSTR szFileName, MMIOINFO *lpmmioinfo, DWORD dwOpenFlags)
LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, INT iOrigin)
struct IOProcList * pNext
int WINAPI _lclose(HFILE hFile)
FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR sz, UINT uFlags)
GLfloat GLfloat GLfloat GLfloat h
DWORD WINAPI GetFullPathNameA(IN LPCSTR lpFileName, IN DWORD nBufferLength, OUT LPSTR lpBuffer, OUT LPSTR *lpFilePart)
#define MMIO_DEFAULTBUFFER
LRESULT WINAPI mmioSendMessage(HMMIO hmmio, UINT uMessage, LPARAM lParam1, LPARAM lParam2)
static BOOL MMIO_Destroy(LPWINE_MMIO wm)
static FOURCC MMIO_ParseExtA(LPCSTR szFileName)
long WINAPI _hwrite(HFILE hFile, LPCSTR lpBuffer, long lBytes)
DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName)
UINT WINAPI _lread(_In_ HFILE hFile, _Out_writes_bytes_to_(uBytes, return) LPVOID lpBuffer, _In_ UINT uBytes)
LONG WINAPI mmioWrite(HMMIO hmmio, HPCSTR pch, LONG cch)
static DWORD DWORD void LPSTR DWORD cch
#define MMIOERR_UNBUFFERED
FOURCC WINAPI mmioStringToFOURCCA(LPCSTR sz, UINT uFlags)
HFILE WINAPI OpenFile(LPCSTR lpFileName, LPOFSTRUCT lpReOpenBuff, UINT uStyle)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
CRITICAL_SECTION WINMM_cs
#define MMIOERR_OUTOFMEMORY
WINE_DEFAULT_DEBUG_CHANNEL(mmio)
static LPMMIOPROC MMIO_InstallIOProc(FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags, BOOL is_unicode)
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
#define INVALID_FILE_ATTRIBUTES
static LPWINE_MMIO MMIO_Get(HMMIO h)
MMRESULT WINAPI mmioCreateChunk(HMMIO hmmio, MMCKINFO *lpck, UINT uFlags)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define mmioFOURCC(c0, c1, c2, c3)
#define memcpy(s1, s2, n)
MMRESULT WINAPI mmioRenameA(LPCSTR szFileName, LPCSTR szNewFileName, const MMIOINFO *lpmmioinfo, DWORD dwFlags)
static struct IOProcList * pIOProcListAnchor
MMRESULT WINAPI mmioAdvance(HMMIO hmmio, MMIOINFO *lpmmioinfo, UINT uFlags)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
MMRESULT WINAPI mmioGetInfo(HMMIO hmmio, MMIOINFO *lpmmioinfo, UINT uFlags)
#define MMSYSERR_INVALPARAM
#define MMIOERR_CHUNKNOTFOUND
MMRESULT WINAPI mmioDescend(HMMIO hmmio, LPMMCKINFO lpck, const MMCKINFO *lpckParent, UINT uFlags)
struct tagWINE_MMIO * lpNext
static struct IOProcList * MMIO_FindProcNode(FOURCC fccIOProc)
MMRESULT WINAPI mmioSetInfo(HMMIO hmmio, const MMIOINFO *lpmmioinfo, UINT uFlags)
static HMMIO MMIO_Open(LPSTR szFileName, MMIOINFO *refmminfo, DWORD dwOpenFlags, BOOL is_unicode)
MMRESULT WINAPI mmioSetBuffer(HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer, UINT uFlags)
char * strchr(const char *String, int ch)
MMRESULT WINAPI mmioRenameW(LPCWSTR szFileName, LPCWSTR szNewFileName, const MMIOINFO *lpmmioinfo, DWORD dwFlags)
#define MMIOERR_CANNOTOPEN
char * strcpy(char *DstString, const char *SrcString)
static LRESULT send_message(struct IOProcList *ioProc, LPMMIOINFO mmioinfo, DWORD wMsg, LPARAM lParam1, LPARAM lParam2, BOOL is_unicode)
static LRESULT MMIO_SendMessage(HMMIO hmmio, UINT uMessage, LPARAM lParam1, LPARAM lParam2, BOOL is_unicode)
static MMRESULT MMIO_SetBuffer(WINE_MMIO *wm, void *pchBuffer, LONG cchBuffer, UINT uFlags)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
static LRESULT CALLBACK mmioDosIOProc(LPMMIOINFO lpmmioinfo, UINT uMessage, LPARAM lParam1, LPARAM lParam2)
#define HeapFree(x, y, z)
static struct IOProcList defaultProcs[]
LONG WINAPI mmioRead(HMMIO hmmio, HPSTR pch, LONG cch)