quartz: Remove dead code from DSoundRender.
[wine/wine64.git] / dlls / winmm / tests / mmio.c
blob5fac90a72d661bf276783d8954350e0ab35574a8
1 /*
2 * Unit tests for mmio APIs
4 * Copyright 2005 Dmitry Timoshkov
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include <assert.h>
22 #include <stdarg.h>
24 #include "windef.h"
25 #include "winbase.h"
26 #include "wingdi.h"
27 #include "mmsystem.h"
28 #include "vfw.h"
29 #include "wine/test.h"
31 static DWORD RIFF_buf[] =
33 FOURCC_RIFF, 7*sizeof(DWORD)+sizeof(MainAVIHeader), mmioFOURCC('A','V','I',' '),
34 FOURCC_LIST, sizeof(DWORD)+sizeof(MMCKINFO)+sizeof(MainAVIHeader), listtypeAVIHEADER,
35 ckidAVIMAINHDR, sizeof(MainAVIHeader), 0xdeadbeef, 0xdeadbeef,
36 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
37 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
38 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
39 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
42 static void test_mmioDescend(char *fname)
44 MMRESULT ret;
45 HMMIO hmmio;
46 MMIOINFO mmio;
47 MMCKINFO ckRiff, ckList, ck;
49 memset(&mmio, 0, sizeof(mmio));
50 mmio.fccIOProc = fname ? FOURCC_DOS : FOURCC_MEM;
51 mmio.cchBuffer = sizeof(RIFF_buf);
52 mmio.pchBuffer = (char *)RIFF_buf;
53 hmmio = mmioOpen(fname, &mmio, MMIO_READ);
54 if (fname && !hmmio)
56 trace("%s file is missing, skipping the test\n", fname);
57 return;
59 ok(hmmio != 0, "mmioOpen error %u\n", mmio.wErrorRet);
61 /* first normal RIFF AVI parsing */
62 ret = mmioDescend(hmmio, &ckRiff, NULL, 0);
63 ok(ret == MMSYSERR_NOERROR, "mmioDescend error %u\n", ret);
64 ok(ckRiff.ckid == FOURCC_RIFF, "wrong ckid: %04x\n", ckRiff.ckid);
65 ok(ckRiff.fccType == formtypeAVI, "wrong fccType: %04x\n", ckRiff.fccType);
66 trace("ckid %4.4s cksize %04x fccType %4.4s off %04x flags %04x\n",
67 (LPCSTR)&ckRiff.ckid, ckRiff.cksize, (LPCSTR)&ckRiff.fccType,
68 ckRiff.dwDataOffset, ckRiff.dwFlags);
70 ret = mmioDescend(hmmio, &ckList, &ckRiff, 0);
71 ok(ret == MMSYSERR_NOERROR, "mmioDescend error %u\n", ret);
72 ok(ckList.ckid == FOURCC_LIST, "wrong ckid: %04x\n", ckList.ckid);
73 ok(ckList.fccType == listtypeAVIHEADER, "wrong fccType: %04x\n", ckList.fccType);
74 trace("ckid %4.4s cksize %04x fccType %4.4s off %04x flags %04x\n",
75 (LPCSTR)&ckList.ckid, ckList.cksize, (LPCSTR)&ckList.fccType,
76 ckList.dwDataOffset, ckList.dwFlags);
78 ret = mmioDescend(hmmio, &ck, &ckList, 0);
79 ok(ret == MMSYSERR_NOERROR, "mmioDescend error %u\n", ret);
80 ok(ck.ckid == ckidAVIMAINHDR, "wrong ckid: %04x\n", ck.ckid);
81 ok(ck.fccType == 0, "wrong fccType: %04x\n", ck.fccType);
82 trace("ckid %4.4s cksize %04x fccType %4.4s off %04x flags %04x\n",
83 (LPCSTR)&ck.ckid, ck.cksize, (LPCSTR)&ck.fccType,
84 ck.dwDataOffset, ck.dwFlags);
86 /* test various mmioDescend flags */
88 mmioSeek(hmmio, 0, SEEK_SET);
89 memset(&ck, 0x66, sizeof(ck));
90 ret = mmioDescend(hmmio, &ck, NULL, MMIO_FINDRIFF);
91 ok(ret == MMIOERR_CHUNKNOTFOUND ||
92 ret == MMIOERR_INVALIDFILE, "mmioDescend returned %u\n", ret);
94 mmioSeek(hmmio, 0, SEEK_SET);
95 memset(&ck, 0x66, sizeof(ck));
96 ck.ckid = 0;
97 ret = mmioDescend(hmmio, &ck, NULL, MMIO_FINDRIFF);
98 ok(ret == MMIOERR_CHUNKNOTFOUND ||
99 ret == MMIOERR_INVALIDFILE, "mmioDescend returned %u\n", ret);
101 mmioSeek(hmmio, 0, SEEK_SET);
102 memset(&ck, 0x66, sizeof(ck));
103 ck.fccType = 0;
104 ret = mmioDescend(hmmio, &ck, NULL, MMIO_FINDRIFF);
105 ok(ret == MMSYSERR_NOERROR, "mmioDescend error %u\n", ret);
106 ok(ck.ckid == FOURCC_RIFF, "wrong ckid: %04x\n", ck.ckid);
107 ok(ck.fccType == formtypeAVI, "wrong fccType: %04x\n", ck.fccType);
109 mmioSeek(hmmio, 0, SEEK_SET);
110 memset(&ck, 0x66, sizeof(ck));
111 ret = mmioDescend(hmmio, &ck, NULL, 0);
112 ok(ret == MMSYSERR_NOERROR, "mmioDescend error %u\n", ret);
113 ok(ck.ckid == FOURCC_RIFF, "wrong ckid: %04x\n", ck.ckid);
114 ok(ck.fccType == formtypeAVI, "wrong fccType: %04x\n", ck.fccType);
116 /* do NOT seek, use current file position */
117 memset(&ck, 0x66, sizeof(ck));
118 ck.fccType = 0;
119 ret = mmioDescend(hmmio, &ck, NULL, MMIO_FINDLIST);
120 ok(ret == MMSYSERR_NOERROR, "mmioDescend error %u\n", ret);
121 ok(ck.ckid == FOURCC_LIST, "wrong ckid: %04x\n", ck.ckid);
122 ok(ck.fccType == listtypeAVIHEADER, "wrong fccType: %04x\n", ck.fccType);
124 mmioSeek(hmmio, 0, SEEK_SET);
125 memset(&ck, 0x66, sizeof(ck));
126 ck.ckid = 0;
127 ck.fccType = listtypeAVIHEADER;
128 ret = mmioDescend(hmmio, &ck, NULL, MMIO_FINDCHUNK);
129 ok(ret == MMSYSERR_NOERROR, "mmioDescend error %u\n", ret);
130 ok(ck.ckid == FOURCC_RIFF, "wrong ckid: %04x\n", ck.ckid);
131 ok(ck.fccType == formtypeAVI, "wrong fccType: %04x\n", ck.fccType);
133 /* do NOT seek, use current file position */
134 memset(&ck, 0x66, sizeof(ck));
135 ck.ckid = FOURCC_LIST;
136 ret = mmioDescend(hmmio, &ck, NULL, MMIO_FINDCHUNK);
137 ok(ret == MMSYSERR_NOERROR, "mmioDescend error %u\n", ret);
138 ok(ck.ckid == FOURCC_LIST, "wrong ckid: %04x\n", ck.ckid);
139 ok(ck.fccType == listtypeAVIHEADER, "wrong fccType: %04x\n", ck.fccType);
141 mmioSeek(hmmio, 0, SEEK_SET);
142 memset(&ck, 0x66, sizeof(ck));
143 ck.ckid = FOURCC_RIFF;
144 ret = mmioDescend(hmmio, &ck, NULL, MMIO_FINDCHUNK);
145 ok(ret == MMSYSERR_NOERROR, "mmioDescend error %u\n", ret);
146 ok(ck.ckid == FOURCC_RIFF, "wrong ckid: %04x\n", ck.ckid);
147 ok(ck.fccType == formtypeAVI, "wrong fccType: %04x\n", ck.fccType);
149 /* do NOT seek, use current file position */
150 memset(&ckList, 0x66, sizeof(ckList));
151 ckList.ckid = 0;
152 ret = mmioDescend(hmmio, &ckList, &ck, MMIO_FINDCHUNK);
153 ok(ret == MMSYSERR_NOERROR, "mmioDescend error %u\n", ret);
154 ok(ckList.ckid == FOURCC_LIST, "wrong ckid: %04x\n", ckList.ckid);
155 ok(ckList.fccType == listtypeAVIHEADER, "wrong fccType: %04x\n", ckList.fccType);
157 mmioSeek(hmmio, 0, SEEK_SET);
158 memset(&ck, 0x66, sizeof(ck));
159 ret = mmioDescend(hmmio, &ck, NULL, MMIO_FINDCHUNK);
160 ok(ret == MMIOERR_CHUNKNOTFOUND ||
161 ret == MMIOERR_INVALIDFILE, "mmioDescend returned %u\n", ret);
162 ok(ck.ckid != 0x66666666, "wrong ckid: %04x\n", ck.ckid);
163 ok(ck.fccType != 0x66666666, "wrong fccType: %04x\n", ck.fccType);
164 ok(ck.dwDataOffset != 0x66666666, "wrong dwDataOffset: %04x\n", ck.dwDataOffset);
166 mmioSeek(hmmio, 0, SEEK_SET);
167 memset(&ck, 0x66, sizeof(ck));
168 ret = mmioDescend(hmmio, &ck, NULL, MMIO_FINDRIFF);
169 ok(ret == MMIOERR_CHUNKNOTFOUND ||
170 ret == MMIOERR_INVALIDFILE, "mmioDescend returned %u\n", ret);
172 mmioClose(hmmio, 0);
175 static void test_mmioOpen(char *fname)
177 char buf[256];
178 MMRESULT ret;
179 HMMIO hmmio;
180 MMIOINFO mmio;
182 memset(&mmio, 0, sizeof(mmio));
183 mmio.fccIOProc = fname ? FOURCC_DOS : FOURCC_MEM;
184 mmio.cchBuffer = sizeof(buf);
185 mmio.pchBuffer = buf;
186 hmmio = mmioOpen(fname, &mmio, MMIO_READ);
187 if (fname && !hmmio)
189 trace("%s file is missing, skipping the test\n", fname);
190 return;
192 ok(hmmio != 0, "mmioOpen error %u\n", mmio.wErrorRet);
194 memset(&mmio, 0, sizeof(mmio));
195 ret = mmioGetInfo(hmmio, &mmio, 0);
196 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
197 ok(mmio.dwFlags == MMIO_READ, "expected MMIO_READ, got %x\n", mmio.dwFlags);
198 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
199 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
200 ok(mmio.cchBuffer == sizeof(buf), "got %u\n", mmio.cchBuffer);
201 ok(mmio.pchBuffer == buf, "expected %p, got %p\n", buf, mmio.pchBuffer);
203 mmioClose(hmmio, 0);
205 memset(&mmio, 0, sizeof(mmio));
206 mmio.fccIOProc = fname ? FOURCC_DOS : FOURCC_MEM;
207 mmio.cchBuffer = 0;
208 mmio.pchBuffer = buf;
209 hmmio = mmioOpen(fname, &mmio, MMIO_READ);
210 ok(hmmio != 0, "mmioOpen error %u\n", mmio.wErrorRet);
212 memset(&mmio, 0, sizeof(mmio));
213 ret = mmioGetInfo(hmmio, &mmio, 0);
214 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
215 ok(mmio.dwFlags == MMIO_READ, "expected MMIO_READ, got %x\n", mmio.dwFlags);
216 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
217 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
218 ok(mmio.cchBuffer == 0, "expected 0, got %u\n", mmio.cchBuffer);
219 ok(mmio.pchBuffer == buf, "expected %p, got %p\n", buf, mmio.pchBuffer);
221 mmioClose(hmmio, 0);
223 memset(&mmio, 0, sizeof(mmio));
224 mmio.fccIOProc = fname ? FOURCC_DOS : FOURCC_MEM;
225 mmio.cchBuffer = 0;
226 mmio.pchBuffer = NULL;
227 hmmio = mmioOpen(fname, &mmio, MMIO_READ);
228 ok(hmmio != 0, "mmioOpen error %u\n", mmio.wErrorRet);
230 memset(&mmio, 0, sizeof(mmio));
231 ret = mmioGetInfo(hmmio, &mmio, 0);
232 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
233 ok(mmio.dwFlags == MMIO_READ, "expected MMIO_READ, got %x\n", mmio.dwFlags);
234 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
235 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
236 ok(mmio.cchBuffer == 0, "expected 0, got %u\n", mmio.cchBuffer);
237 ok(mmio.pchBuffer == NULL, "expected NULL\n");
239 mmioClose(hmmio, 0);
241 memset(&mmio, 0, sizeof(mmio));
242 mmio.fccIOProc = fname ? FOURCC_DOS : FOURCC_MEM;
243 mmio.cchBuffer = 256;
244 mmio.pchBuffer = NULL;
245 hmmio = mmioOpen(fname, &mmio, MMIO_READ);
246 ok(hmmio != 0, "mmioOpen error %u\n", mmio.wErrorRet);
248 memset(&mmio, 0, sizeof(mmio));
249 ret = mmioGetInfo(hmmio, &mmio, 0);
250 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
251 ok(mmio.dwFlags == (MMIO_READ|MMIO_ALLOCBUF), "expected MMIO_READ|MMIO_ALLOCBUF, got %x\n", mmio.dwFlags);
252 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
253 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
254 ok(mmio.cchBuffer == 256, "expected 256, got %u\n", mmio.cchBuffer);
255 ok(mmio.pchBuffer != NULL, "expected not NULL\n");
257 mmioClose(hmmio, 0);
259 memset(&mmio, 0, sizeof(mmio));
260 mmio.fccIOProc = fname ? FOURCC_DOS : FOURCC_MEM;
261 mmio.cchBuffer = sizeof(buf);
262 mmio.pchBuffer = buf;
263 hmmio = mmioOpen(fname, &mmio, MMIO_READ | MMIO_ALLOCBUF);
264 ok(hmmio != 0, "mmioOpen error %u\n", mmio.wErrorRet);
266 memset(&mmio, 0, sizeof(mmio));
267 ret = mmioGetInfo(hmmio, &mmio, 0);
268 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
269 ok(mmio.dwFlags == MMIO_READ, "expected MMIO_READ, got %x\n", mmio.dwFlags);
270 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
271 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
272 ok(mmio.cchBuffer == sizeof(buf), "got %u\n", mmio.cchBuffer);
273 ok(mmio.pchBuffer == buf, "expected %p, got %p\n", buf, mmio.pchBuffer);
275 mmioClose(hmmio, 0);
277 memset(&mmio, 0, sizeof(mmio));
278 mmio.fccIOProc = fname ? FOURCC_DOS : FOURCC_MEM;
279 mmio.cchBuffer = 0;
280 mmio.pchBuffer = buf;
281 hmmio = mmioOpen(fname, &mmio, MMIO_READ | MMIO_ALLOCBUF);
282 ok(hmmio != 0, "mmioOpen error %u\n", mmio.wErrorRet);
284 memset(&mmio, 0, sizeof(mmio));
285 ret = mmioGetInfo(hmmio, &mmio, 0);
286 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
287 ok(mmio.dwFlags == MMIO_READ, "expected MMIO_READ, got %x\n", mmio.dwFlags);
288 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
289 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
290 ok(mmio.cchBuffer == MMIO_DEFAULTBUFFER, "expected MMIO_DEFAULTBUFFER, got %u\n", mmio.cchBuffer);
291 ok(mmio.pchBuffer == buf, "expected %p, got %p\n", buf, mmio.pchBuffer);
293 mmioClose(hmmio, 0);
295 memset(&mmio, 0, sizeof(mmio));
296 mmio.fccIOProc = fname ? FOURCC_DOS : FOURCC_MEM;
297 mmio.cchBuffer = 0;
298 mmio.pchBuffer = NULL;
299 hmmio = mmioOpen(fname, &mmio, MMIO_READ | MMIO_ALLOCBUF);
300 ok(hmmio != 0, "mmioOpen error %u\n", mmio.wErrorRet);
302 memset(&mmio, 0, sizeof(mmio));
303 ret = mmioGetInfo(hmmio, &mmio, 0);
304 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
305 ok(mmio.dwFlags == (MMIO_READ|MMIO_ALLOCBUF), "expected MMIO_READ|MMIO_ALLOCBUF, got %x\n", mmio.dwFlags);
306 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
307 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
308 ok(mmio.cchBuffer == MMIO_DEFAULTBUFFER, "expected MMIO_DEFAULTBUFFER, got %u\n", mmio.cchBuffer);
309 ok(mmio.pchBuffer != NULL, "expected not NULL\n");
311 mmioClose(hmmio, 0);
313 memset(&mmio, 0, sizeof(mmio));
314 mmio.fccIOProc = fname ? FOURCC_DOS : FOURCC_MEM;
315 mmio.cchBuffer = 256;
316 mmio.pchBuffer = NULL;
317 hmmio = mmioOpen(fname, &mmio, MMIO_READ | MMIO_ALLOCBUF);
318 ok(hmmio != 0, "mmioOpen error %u\n", mmio.wErrorRet);
320 memset(&mmio, 0, sizeof(mmio));
321 ret = mmioGetInfo(hmmio, &mmio, 0);
322 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
323 ok(mmio.dwFlags == (MMIO_READ|MMIO_ALLOCBUF), "expected MMIO_READ|MMIO_ALLOCBUF, got %x\n", mmio.dwFlags);
324 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
325 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
326 ok(mmio.cchBuffer == 256, "expected 256, got %u\n", mmio.cchBuffer);
327 ok(mmio.pchBuffer != NULL, "expected not NULL\n");
329 mmioClose(hmmio, 0);
332 static void test_mmioSetBuffer(char *fname)
334 char buf[256];
335 MMRESULT ret;
336 HMMIO hmmio;
337 MMIOINFO mmio;
339 memset(&mmio, 0, sizeof(mmio));
340 mmio.fccIOProc = fname ? FOURCC_DOS : FOURCC_MEM;
341 mmio.cchBuffer = sizeof(buf);
342 mmio.pchBuffer = buf;
343 hmmio = mmioOpen(fname, &mmio, MMIO_READ);
344 if (fname && !hmmio)
346 trace("%s file is missing, skipping the test\n", fname);
347 return;
349 ok(hmmio != 0, "mmioOpen error %u\n", mmio.wErrorRet);
351 memset(&mmio, 0, sizeof(mmio));
352 ret = mmioGetInfo(hmmio, &mmio, 0);
353 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
354 ok(mmio.dwFlags == MMIO_READ, "expected MMIO_READ, got %x\n", mmio.dwFlags);
355 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
356 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
357 ok(mmio.cchBuffer == sizeof(buf), "got %u\n", mmio.cchBuffer);
358 ok(mmio.pchBuffer == buf, "expected %p, got %p\n", buf, mmio.pchBuffer);
360 ret = mmioSetBuffer(hmmio, NULL, 0, 0);
361 ok(ret == MMSYSERR_NOERROR, "mmioSetBuffer error %u\n", ret);
363 memset(&mmio, 0, sizeof(mmio));
364 ret = mmioGetInfo(hmmio, &mmio, 0);
365 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
366 ok(mmio.dwFlags == MMIO_READ, "expected MMIO_READ, got %x\n", mmio.dwFlags);
367 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
368 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
369 ok(mmio.cchBuffer == 0, "got not 0\n");
370 ok(mmio.pchBuffer == NULL, "got not NULL buf\n");
372 ret = mmioSetBuffer(hmmio, NULL, 0, MMIO_ALLOCBUF);
373 ok(ret == MMSYSERR_NOERROR, "mmioSetBuffer error %u\n", ret);
375 memset(&mmio, 0, sizeof(mmio));
376 ret = mmioGetInfo(hmmio, &mmio, 0);
377 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
378 ok(mmio.dwFlags == MMIO_READ, "expected MMIO_READ, got %x\n", mmio.dwFlags);
379 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
380 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
381 ok(mmio.cchBuffer == 0, "got not 0\n");
382 ok(mmio.pchBuffer == NULL, "got not NULL buf\n");
384 ret = mmioSetBuffer(hmmio, buf, 0, MMIO_ALLOCBUF);
385 ok(ret == MMSYSERR_NOERROR, "mmioSetBuffer error %u\n", ret);
387 memset(&mmio, 0, sizeof(mmio));
388 ret = mmioGetInfo(hmmio, &mmio, 0);
389 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
390 ok(mmio.dwFlags == MMIO_READ, "expected MMIO_READ, got %x\n", mmio.dwFlags);
391 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
392 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
393 ok(mmio.cchBuffer == 0, "got not 0\n");
394 ok(mmio.pchBuffer == buf, "expected %p, got %p\n", buf, mmio.pchBuffer);
396 ret = mmioSetBuffer(hmmio, NULL, 256, MMIO_WRITE|MMIO_ALLOCBUF);
397 ok(ret == MMSYSERR_NOERROR, "mmioSetBuffer error %u\n", ret);
399 memset(&mmio, 0, sizeof(mmio));
400 ret = mmioGetInfo(hmmio, &mmio, 0);
401 ok(ret == MMSYSERR_NOERROR, "mmioGetInfo error %u\n", ret);
402 ok(mmio.dwFlags == (MMIO_READ|MMIO_ALLOCBUF), "expected MMIO_READ|MMIO_ALLOCBUF, got %x\n", mmio.dwFlags);
403 ok(mmio.wErrorRet == MMSYSERR_NOERROR, "expected MMSYSERR_NOERROR, got %u\n", mmio.wErrorRet);
404 ok(mmio.fccIOProc == (fname ? FOURCC_DOS : FOURCC_MEM), "got %4.4s\n", (LPCSTR)&mmio.fccIOProc);
405 ok(mmio.cchBuffer == 256, "got %u\n", mmio.cchBuffer);
406 ok(mmio.pchBuffer != NULL, "expected not NULL\n");
407 ok(mmio.pchBuffer != buf, "expected != buf\n");
409 mmioClose(hmmio, 0);
412 START_TEST(mmio)
414 char fname[] = "msrle.avi";
416 test_mmioDescend(NULL);
417 test_mmioDescend(fname);
418 test_mmioOpen(NULL);
419 test_mmioOpen(fname);
420 test_mmioSetBuffer(NULL);
421 test_mmioSetBuffer(fname);