ReactOS 0.4.17-dev-923-g4c9a150
loaderstream.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2003-2004 Rok Mandeljc
3 * Copyright 2023 Rémi Bernon for CodeWeavers
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20#include "dmloader_private.h"
21
24
26{
28 IDirectMusicGetLoader IDirectMusicGetLoader_iface;
30
32 IDirectMusicLoader *loader;
33};
34
36{
37 return CONTAINING_RECORD(iface, struct loader_stream, IStream_iface);
38}
39
41{
42 struct loader_stream *This = impl_from_IStream(iface);
43
44 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
45
47 || IsEqualGUID(riid, &IID_IStream))
48 {
49 IStream_AddRef(&This->IStream_iface);
50 *ret_iface = &This->IStream_iface;
51 return S_OK;
52 }
53
54 if (IsEqualGUID(riid, &IID_IDirectMusicGetLoader))
55 {
56 IDirectMusicGetLoader_AddRef(&This->IDirectMusicGetLoader_iface);
57 *ret_iface = &This->IDirectMusicGetLoader_iface;
58 return S_OK;
59 }
60
61 WARN("(%p, %s, %p): not found\n", iface, debugstr_dmguid(riid), ret_iface);
62 *ret_iface = NULL;
63 return E_NOINTERFACE;
64}
65
67{
68 struct loader_stream *This = impl_from_IStream(iface);
70 TRACE("(%p): new ref = %lu\n", This, ref);
71 return ref;
72}
73
75{
76 struct loader_stream *This = impl_from_IStream(iface);
78
79 TRACE("(%p): new ref = %lu\n", This, ref);
80
81 if (!ref)
82 {
84 IStream_Release(This->stream);
85 free(This);
86 }
87
88 return ref;
89}
90
92{
93 struct loader_stream *This = impl_from_IStream(iface);
94 TRACE("(%p, %p, %#lx, %p)\n", This, data, size, ret_size);
95 return IStream_Read(This->stream, data, size, ret_size);
96}
97
99{
100 struct loader_stream *This = impl_from_IStream(iface);
101 FIXME("(%p): stub\n", This);
102 return E_NOTIMPL;
103}
104
106{
107 struct loader_stream *This = impl_from_IStream(iface);
108 TRACE("(%p, %I64d, %#lx, %p)\n", This, offset.QuadPart, method, ret_offset);
109 return IStream_Seek(This->stream, offset, method, ret_offset);
110}
111
113{
114 struct loader_stream *This = impl_from_IStream(iface);
115 FIXME("(%p): stub\n", This);
116 return E_NOTIMPL;
117}
118
120 ULARGE_INTEGER *read_size, ULARGE_INTEGER *write_size)
121{
122 struct loader_stream *This = impl_from_IStream(iface);
123 FIXME("(%p): stub\n", This);
124 return E_NOTIMPL;
125}
126
128{
129 struct loader_stream *This = impl_from_IStream(iface);
130 FIXME("(%p): stub\n", This);
131 return E_NOTIMPL;
132}
133
135{
136 struct loader_stream *This = impl_from_IStream(iface);
137 FIXME("(%p): stub\n", This);
138 return E_NOTIMPL;
139}
140
142{
143 struct loader_stream *This = impl_from_IStream(iface);
144 FIXME("(%p): stub\n", This);
145 return E_NOTIMPL;
146}
147
150{
151 struct loader_stream *This = impl_from_IStream(iface);
152 FIXME("(%p): stub\n", This);
153 return E_NOTIMPL;
154}
155
157{
158 struct loader_stream *This = impl_from_IStream(iface);
159 FIXME("(%p): stub\n", This);
160 return E_NOTIMPL;
161}
162
164{
165 struct loader_stream *This = impl_from_IStream(iface);
167 HRESULT hr;
168
169 TRACE("(%p, %p)\n", This, ret_iface);
170
171 if (SUCCEEDED(hr = IStream_Clone(This->stream, &stream)))
172 {
173 hr = loader_stream_create(This->loader, stream, ret_iface);
174 IStream_Release(stream);
175 }
176
177 return hr;
178}
179
180static const IStreamVtbl loader_stream_vtbl =
181{
196};
197
198static struct loader_stream *impl_from_IDirectMusicGetLoader(IDirectMusicGetLoader *iface)
199{
201}
202
203static HRESULT WINAPI loader_stream_getter_QueryInterface(IDirectMusicGetLoader *iface, REFIID iid, void **out)
204{
206 return IStream_QueryInterface(&This->IStream_iface, iid, out);
207}
208
209static ULONG WINAPI loader_stream_getter_AddRef(IDirectMusicGetLoader *iface)
210{
212 return IStream_AddRef(&This->IStream_iface);
213}
214
215static ULONG WINAPI loader_stream_getter_Release(IDirectMusicGetLoader *iface)
216{
218 return IStream_Release(&This->IStream_iface);
219}
220
221static HRESULT WINAPI loader_stream_getter_GetLoader(IDirectMusicGetLoader *iface, IDirectMusicLoader **ret_loader)
222{
224
225 TRACE("(%p, %p)\n", This, ret_loader);
226
227 *ret_loader = This->loader;
229 return S_OK;
230}
231
232static const IDirectMusicGetLoaderVtbl loader_stream_getter_vtbl =
233{
238};
239
241 IStream **ret_iface)
242{
243 struct loader_stream *obj;
244
245 *ret_iface = NULL;
246 if (!(obj = calloc(1, sizeof(*obj)))) return E_OUTOFMEMORY;
247 obj->IStream_iface.lpVtbl = &loader_stream_vtbl;
248 obj->IDirectMusicGetLoader_iface.lpVtbl = &loader_stream_getter_vtbl;
249 obj->ref = 1;
250
251 obj->stream = stream;
252 IStream_AddRef(stream);
253 obj->loader = loader;
255
256 *ret_iface = &obj->IStream_iface;
257 return S_OK;
258}
259
261{
264
267};
268
270{
271 return CONTAINING_RECORD(iface, struct file_stream, IStream_iface);
272}
273
275{
277
278 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
279
281 || IsEqualGUID(riid, &IID_IStream))
282 {
283 IStream_AddRef(&This->IStream_iface);
284 *ret_iface = &This->IStream_iface;
285 return S_OK;
286 }
287
288 WARN("(%p, %s, %p): not found\n", iface, debugstr_dmguid(riid), ret_iface);
289 *ret_iface = NULL;
290 return E_NOINTERFACE;
291}
292
294{
297 TRACE("(%p): new ref = %lu\n", This, ref);
298 return ref;
299}
300
302{
305
306 TRACE("(%p): new ref = %lu\n", This, ref);
307
308 if (!ref)
309 {
310 CloseHandle(This->file);
311 free(This);
312 }
313
314 return ref;
315}
316
318{
320 DWORD dummy;
321
322 TRACE("(%p, %p, %#lx, %p)\n", This, data, size, ret_size);
323
324 if (!ret_size) ret_size = &dummy;
326 return *ret_size == size ? S_OK : S_FALSE;
327}
328
330{
332 FIXME("(%p): stub\n", This);
333 return E_NOTIMPL;
334}
335
337{
339 DWORD position;
340
341 TRACE("(%p, %I64d, %#lx, %p)\n", This, offset.QuadPart, method, ret_offset);
342
343 position = SetFilePointer(This->file, offset.u.LowPart, NULL, method);
345 if (ret_offset) ret_offset->QuadPart = position;
346 return S_OK;
347}
348
350{
352 FIXME("(%p): stub\n", This);
353 return E_NOTIMPL;
354}
355
357 ULARGE_INTEGER *read_size, ULARGE_INTEGER *write_size)
358{
360 FIXME("(%p): stub\n", This);
361 return E_NOTIMPL;
362}
363
365{
367 FIXME("(%p): stub\n", This);
368 return E_NOTIMPL;
369}
370
372{
374 FIXME("(%p): stub\n", This);
375 return E_NOTIMPL;
376}
377
379{
381 FIXME("(%p): stub\n", This);
382 return E_NOTIMPL;
383}
384
387{
389 FIXME("(%p): stub\n", This);
390 return E_NOTIMPL;
391}
392
394{
396 FIXME("(%p): stub\n", This);
397 return E_NOTIMPL;
398}
399
400static HRESULT WINAPI file_stream_Clone(IStream *iface, IStream **ret_iface)
401{
403 HRESULT hr;
404
405 TRACE("(%p, %p)\n", This, ret_iface);
406
407 if (SUCCEEDED(hr = file_stream_create(This->path, ret_iface)))
408 {
409 LARGE_INTEGER position = {0};
410 position.LowPart = SetFilePointer(This->file, 0, NULL, FILE_CURRENT);
411 hr = IStream_Seek(*ret_iface, position, STREAM_SEEK_SET, NULL);
412 }
413
414 return hr;
415}
416
417static const IStreamVtbl file_stream_vtbl =
418{
433};
434
436{
437 struct file_stream *stream;
438
439 *ret_iface = NULL;
440 if (!(stream = calloc(1, sizeof(*stream)))) return E_OUTOFMEMORY;
442 stream->ref = 1;
443
444 wcscpy(stream->path, path);
447 if (stream->file == INVALID_HANDLE_VALUE)
448 {
449 free(stream);
451 }
452
453 *ret_iface = &stream->IStream_iface;
454 return S_OK;
455}
456
458
459/*****************************************************************************
460 * IDirectMusicLoaderResourceStream implementation
461 */
462/* Custom : */
463
466 TRACE("(%p)\n", This);
467
468 This->pbMemData = NULL;
469 This->llMemLength = 0;
470}
471
474
475 TRACE("(%p, %p, %s, %s)\n", This, pbMemData, wine_dbgstr_longlong(llMemLength), wine_dbgstr_longlong(llPos));
476 if (!pbMemData || !llMemLength) {
477 WARN(": invalid pbMemData or llMemLength\n");
478 return E_FAIL;
479 }
481 This->pbMemData = pbMemData;
482 This->llMemLength = llMemLength;
483 This->llPos = llPos;
484
485 return S_OK;
486}
487
488
489/* IUnknown/IStream part: */
492
493 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj);
494 if (IsEqualIID (riid, &IID_IUnknown) ||
495 IsEqualIID (riid, &IID_IStream)) {
496 *ppobj = &This->StreamVtbl;
498 return S_OK;
499 }
500
501 WARN(": not found\n");
502 return E_NOINTERFACE;
503}
504
507 TRACE("(%p): AddRef from %ld\n", This, This->dwRef);
508 return InterlockedIncrement (&This->dwRef);
509}
510
513
514 DWORD dwRef = InterlockedDecrement (&This->dwRef);
515 TRACE("(%p): ReleaseRef to %ld\n", This, dwRef);
516 if (dwRef == 0) {
518 free(This);
519 }
520
521 return dwRef;
522}
523
525 LPBYTE pByte;
527
528 TRACE_(dmfileraw)("(%p, %p, %#lx, %p)\n", This, pv, cb, pcbRead);
529 if ((This->llPos + cb) > This->llMemLength) {
530 WARN_(dmfileraw)(": requested size out of range\n");
531 return E_FAIL;
532 }
533
534 pByte = &This->pbMemData[This->llPos];
535 memcpy (pv, pByte, cb);
536 This->llPos += cb; /* move pointer */
537 /* FIXME: error checking would be nice */
538 if (pcbRead) *pcbRead = cb;
539
540 TRACE_(dmfileraw)(": data (size = %#lx): %s\n", cb, debugstr_an(pv, cb));
541 return S_OK;
542}
543
546 TRACE_(dmfileraw)("(%p, %s, %s, %p)\n", This, wine_dbgstr_longlong(dlibMove.QuadPart), resolve_STREAM_SEEK(dwOrigin), plibNewPosition);
547
548 switch (dwOrigin) {
549 case STREAM_SEEK_CUR: {
550 if ((This->llPos + dlibMove.QuadPart) > This->llMemLength) {
551 WARN_(dmfileraw)(": requested offset out of range\n");
552 return E_FAIL;
553 }
554 break;
555 }
556 case STREAM_SEEK_SET: {
557 if (dlibMove.QuadPart > This->llMemLength) {
558 WARN_(dmfileraw)(": requested offset out of range\n");
559 return E_FAIL;
560 }
561 /* set to the beginning of the stream */
562 This->llPos = 0;
563 break;
564 }
565 case STREAM_SEEK_END: {
566 /* TODO: check if this is true... I do think offset should be negative in this case */
567 if (dlibMove.QuadPart > 0) {
568 WARN_(dmfileraw)(": requested offset out of range\n");
569 return E_FAIL;
570 }
571 /* set to the end of the stream */
572 This->llPos = This->llMemLength;
573 break;
574 }
575 default: {
576 ERR_(dmfileraw)(": invalid dwOrigin\n");
577 return E_FAIL;
578 }
579 }
580 /* now simply add */
581 This->llPos += dlibMove.QuadPart;
582
583 if (plibNewPosition) plibNewPosition->QuadPart = This->llPos;
584
585 return S_OK;
586}
587
590 LPSTREAM pOther = NULL;
592
593 TRACE("(%p, %p)\n", iface, ppstm);
595 if (FAILED(result)) return result;
596
597 IDirectMusicLoaderResourceStream_Attach (pOther, This->pbMemData, This->llMemLength, This->llPos);
598
599 TRACE(": succeeded\n");
600 *ppstm = pOther;
601 return S_OK;
602}
603
605 ERR(": should not be needed\n");
606 return E_NOTIMPL;
607}
608
610 ERR(": should not be needed\n");
611 return E_NOTIMPL;
612}
613
615 ERR(": should not be needed\n");
616 return E_NOTIMPL;
617}
618
620 ERR(": should not be needed\n");
621 return E_NOTIMPL;
622}
623
625 ERR(": should not be needed\n");
626 return E_NOTIMPL;
627}
628
630 ERR(": should not be needed\n");
631 return E_NOTIMPL;
632}
633
635 ERR(": should not be needed\n");
636 return E_NOTIMPL;
637}
638
639static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_Stat (LPSTREAM iface, STATSTG* pstatstg, DWORD grfStatFlag) {
640 ERR(": should not be needed\n");
641 return E_NOTIMPL;
642}
643
659};
660
663
664 TRACE("(%p)\n", ppobj);
665
666 *ppobj = NULL;
667 if (!(obj = calloc(1, sizeof(*obj)))) return E_OUTOFMEMORY;
669 obj->dwRef = 0; /* will be inited with QueryInterface */
670
671 return IDirectMusicLoaderResourceStream_IStream_QueryInterface ((LPSTREAM)&obj->StreamVtbl, &IID_IStream, ppobj);
672}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
const GUID IID_IUnknown
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
const char * resolve_STREAM_SEEK(DWORD flag)
Definition: debug.c:33
#define CloseHandle
Definition: compat.h:739
#define INVALID_SET_FILE_POINTER
Definition: compat.h:732
#define OPEN_EXISTING
Definition: compat.h:775
#define TRACE_(x)
Definition: compat.h:76
#define ReadFile(a, b, c, d, e)
Definition: compat.h:742
#define SetFilePointer
Definition: compat.h:743
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
static __inline const char * debugstr_an(const char *s, int n)
Definition: compat.h:55
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
#define GENERIC_READ
Definition: compat.h:135
#define MAX_PATH
Definition: compat.h:34
#define CreateFileW
Definition: compat.h:741
#define WINE_DECLARE_DEBUG_CHANNEL(x)
Definition: compat.h:45
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_READ
Definition: compat.h:136
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
#define DMUS_E_LOADER_FAILEDOPEN
Definition: dmerror.h:119
#define ICOM_THIS_MULTI(impl, field, iface)
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
#define IDirectMusicLoader_AddRef(p)
Definition: dmusici.h:878
#define IDirectMusicLoader_Release(p)
Definition: dmusici.h:879
#define IDirectMusicGetLoader_AddRef(p)
Definition: dmusici.h:960
method
Definition: dragdrop.c:54
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizeiptr size
Definition: glext.h:5919
GLintptr offset
Definition: glext.h:5920
GLbitfield flags
Definition: glext.h:7161
GLuint64EXT * result
Definition: glext.h:11304
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_SetSize(LPSTREAM iface, ULARGE_INTEGER libNewSize)
Definition: loaderstream.c:609
static struct loader_stream * impl_from_IDirectMusicGetLoader(IDirectMusicGetLoader *iface)
Definition: loaderstream.c:198
static HRESULT WINAPI loader_stream_Stat(IStream *iface, STATSTG *stat, DWORD flags)
Definition: loaderstream.c:156
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_Read(LPSTREAM iface, void *pv, ULONG cb, ULONG *pcbRead)
Definition: loaderstream.c:524
HRESULT DMUSIC_CreateDirectMusicLoaderResourceStream(void **ppobj)
Definition: loaderstream.c:661
static HRESULT WINAPI loader_stream_QueryInterface(IStream *iface, REFIID riid, void **ret_iface)
Definition: loaderstream.c:40
static HRESULT WINAPI loader_stream_getter_QueryInterface(IDirectMusicGetLoader *iface, REFIID iid, void **out)
Definition: loaderstream.c:203
static HRESULT WINAPI loader_stream_SetSize(IStream *iface, ULARGE_INTEGER size)
Definition: loaderstream.c:112
static HRESULT WINAPI loader_stream_Seek(IStream *iface, LARGE_INTEGER offset, DWORD method, ULARGE_INTEGER *ret_offset)
Definition: loaderstream.c:105
static ULONG WINAPI loader_stream_getter_Release(IDirectMusicGetLoader *iface)
Definition: loaderstream.c:215
static HRESULT WINAPI file_stream_UnlockRegion(IStream *iface, ULARGE_INTEGER offset, ULARGE_INTEGER size, DWORD type)
Definition: loaderstream.c:385
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_Write(LPSTREAM iface, const void *pv, ULONG cb, ULONG *pcbWritten)
Definition: loaderstream.c:604
static HRESULT WINAPI loader_stream_UnlockRegion(IStream *iface, ULARGE_INTEGER offset, ULARGE_INTEGER size, DWORD type)
Definition: loaderstream.c:148
static HRESULT WINAPI file_stream_Clone(IStream *iface, IStream **ret_iface)
Definition: loaderstream.c:400
static HRESULT WINAPI loader_stream_Commit(IStream *iface, DWORD flags)
Definition: loaderstream.c:127
static struct file_stream * file_stream_from_IStream(IStream *iface)
Definition: loaderstream.c:269
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_QueryInterface(LPSTREAM iface, REFIID riid, void **ppobj)
Definition: loaderstream.c:490
static const IDirectMusicGetLoaderVtbl loader_stream_getter_vtbl
Definition: loaderstream.c:232
static HRESULT WINAPI file_stream_Seek(IStream *iface, LARGE_INTEGER offset, DWORD method, ULARGE_INTEGER *ret_offset)
Definition: loaderstream.c:336
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_Revert(LPSTREAM iface)
Definition: loaderstream.c:624
static HRESULT WINAPI file_stream_LockRegion(IStream *iface, ULARGE_INTEGER offset, ULARGE_INTEGER size, DWORD type)
Definition: loaderstream.c:378
static ULONG WINAPI IDirectMusicLoaderResourceStream_IStream_Release(LPSTREAM iface)
Definition: loaderstream.c:511
static HRESULT WINAPI loader_stream_Clone(IStream *iface, IStream **ret_iface)
Definition: loaderstream.c:163
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_Seek(LPSTREAM iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
Definition: loaderstream.c:544
static HRESULT WINAPI file_stream_Commit(IStream *iface, DWORD flags)
Definition: loaderstream.c:364
static HRESULT WINAPI file_stream_QueryInterface(IStream *iface, REFIID riid, void **ret_iface)
Definition: loaderstream.c:274
HRESULT file_stream_create(const WCHAR *path, IStream **ret_iface)
Definition: loaderstream.c:435
static ULONG WINAPI loader_stream_AddRef(IStream *iface)
Definition: loaderstream.c:66
static HRESULT WINAPI loader_stream_Write(IStream *iface, const void *data, ULONG size, ULONG *ret_size)
Definition: loaderstream.c:98
HRESULT loader_stream_create(IDirectMusicLoader *loader, IStream *stream, IStream **ret_iface)
Definition: loaderstream.c:240
static HRESULT WINAPI loader_stream_Read(IStream *iface, void *data, ULONG size, ULONG *ret_size)
Definition: loaderstream.c:91
static struct loader_stream * impl_from_IStream(IStream *iface)
Definition: loaderstream.c:35
static const IStreamVtbl loader_stream_vtbl
Definition: loaderstream.c:180
static void IDirectMusicLoaderResourceStream_Detach(LPSTREAM iface)
Definition: loaderstream.c:464
static HRESULT WINAPI loader_stream_CopyTo(IStream *iface, IStream *dest, ULARGE_INTEGER size, ULARGE_INTEGER *read_size, ULARGE_INTEGER *write_size)
Definition: loaderstream.c:119
static const IStreamVtbl file_stream_vtbl
Definition: loaderstream.c:417
static ULONG WINAPI IDirectMusicLoaderResourceStream_IStream_AddRef(LPSTREAM iface)
Definition: loaderstream.c:505
static HRESULT WINAPI file_stream_Revert(IStream *iface)
Definition: loaderstream.c:371
HRESULT WINAPI IDirectMusicLoaderResourceStream_Attach(LPSTREAM iface, LPBYTE pbMemData, LONGLONG llMemLength, LONGLONG llPos)
Definition: loaderstream.c:472
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_Clone(LPSTREAM iface, IStream **ppstm)
Definition: loaderstream.c:588
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_Commit(LPSTREAM iface, DWORD grfCommitFlags)
Definition: loaderstream.c:619
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_UnlockRegion(LPSTREAM iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
Definition: loaderstream.c:634
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_Stat(LPSTREAM iface, STATSTG *pstatstg, DWORD grfStatFlag)
Definition: loaderstream.c:639
static ULONG WINAPI loader_stream_getter_AddRef(IDirectMusicGetLoader *iface)
Definition: loaderstream.c:209
static HRESULT WINAPI file_stream_Write(IStream *iface, const void *data, ULONG size, ULONG *ret_size)
Definition: loaderstream.c:329
static HRESULT WINAPI file_stream_Read(IStream *iface, void *data, ULONG size, ULONG *ret_size)
Definition: loaderstream.c:317
static HRESULT WINAPI loader_stream_getter_GetLoader(IDirectMusicGetLoader *iface, IDirectMusicLoader **ret_loader)
Definition: loaderstream.c:221
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_LockRegion(LPSTREAM iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
Definition: loaderstream.c:629
static HRESULT WINAPI file_stream_SetSize(IStream *iface, ULARGE_INTEGER size)
Definition: loaderstream.c:349
static ULONG WINAPI file_stream_Release(IStream *iface)
Definition: loaderstream.c:301
static ULONG WINAPI file_stream_AddRef(IStream *iface)
Definition: loaderstream.c:293
static ULONG WINAPI loader_stream_Release(IStream *iface)
Definition: loaderstream.c:74
static HRESULT WINAPI loader_stream_LockRegion(IStream *iface, ULARGE_INTEGER offset, ULARGE_INTEGER size, DWORD type)
Definition: loaderstream.c:141
static HRESULT WINAPI loader_stream_Revert(IStream *iface)
Definition: loaderstream.c:134
static HRESULT WINAPI file_stream_CopyTo(IStream *iface, IStream *dest, ULARGE_INTEGER size, ULARGE_INTEGER *read_size, ULARGE_INTEGER *write_size)
Definition: loaderstream.c:356
static HRESULT WINAPI file_stream_Stat(IStream *iface, STATSTG *stat, DWORD flags)
Definition: loaderstream.c:393
static const IStreamVtbl DirectMusicLoaderResourceStream_Stream_Vtbl
Definition: loaderstream.c:644
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_CopyTo(LPSTREAM iface, IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten)
Definition: loaderstream.c:614
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static const IStreamVtbl StreamVtbl
Definition: mimeole.c:416
static char * dest
Definition: rtl.c:149
static void ULONG ULONG * ret_size
Definition: time.c:40
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
interface IStream * LPSTREAM
Definition: objfwd.h:10
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
#define ERR_(ch,...)
Definition: debug.h:156
#define WARN_(ch,...)
Definition: debug.h:157
wcscpy
#define TRACE(s)
Definition: solgame.cpp:4
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
IStream IStream_iface
Definition: loaderstream.c:262
IDirectMusicGetLoader IDirectMusicGetLoader_iface
Definition: loaderstream.c:28
IStream IStream_iface
Definition: loaderstream.c:27
IDirectMusicLoader * loader
Definition: loaderstream.c:32
IStream * stream
Definition: loaderstream.c:31
Definition: loader.c:72
Definition: send.c:48
Definition: stat.h:66
Definition: parse.h:23
IStream IStream_iface
Definition: request.c:5732
unsigned char * LPBYTE
Definition: typedefs.h:53
int64_t LONGLONG
Definition: typedefs.h:68
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
LONGLONG QuadPart
Definition: typedefs.h:114
ULONG LowPart
Definition: typedefs.h:106
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define FILE_CURRENT
Definition: winbase.h:116
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_NOINTERFACE
Definition: winerror.h:3479