Alex Henrie : ole32: Implement StgOpenPropStg.
Alexandre Julliard
julliard at winehq.org
Fri Oct 7 15:09:13 CDT 2016
Module: wine
Branch: stable
Commit: b68941e307d6ec9db0e4ff0ccf8b8e31dd4bc432
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b68941e307d6ec9db0e4ff0ccf8b8e31dd4bc432
Author: Alex Henrie <alexhenrie24 at gmail.com>
Date: Sun Apr 10 16:22:26 2016 -0600
ole32: Implement StgOpenPropStg.
Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit b045d726314aff340384798463db36044cbaa897)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/ole32/ole32.spec | 1 +
dlls/ole32/stg_prop.c | 43 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+)
diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec
index b56e5d5..7851c75 100644
--- a/dlls/ole32/ole32.spec
+++ b/dlls/ole32/ole32.spec
@@ -269,6 +269,7 @@
@ stdcall StgIsStorageFile(wstr)
@ stdcall StgIsStorageILockBytes(ptr)
@ stub StgOpenAsyncDocfileOnIFillLockBytes
+@ stdcall StgOpenPropStg(ptr ptr long long ptr)
@ stdcall StgOpenStorage(wstr ptr long ptr long ptr)
@ stdcall StgOpenStorageEx(wstr long long long ptr ptr ptr ptr)
@ stdcall StgOpenStorageOnILockBytes(ptr ptr long long long ptr)
diff --git a/dlls/ole32/stg_prop.c b/dlls/ole32/stg_prop.c
index c3db945..04e0244 100644
--- a/dlls/ole32/stg_prop.c
+++ b/dlls/ole32/stg_prop.c
@@ -2810,3 +2810,46 @@ end:
TRACE("returning 0x%08x\n", r);
return r;
}
+
+HRESULT WINAPI StgOpenPropStg(IUnknown *unk, REFFMTID fmt, DWORD flags,
+ DWORD reserved, IPropertyStorage **prop_stg)
+{
+ IStorage *stg;
+ IStream *stm;
+ HRESULT r;
+
+ TRACE("%p %s %08x %d %p\n", unk, debugstr_guid(fmt), flags, reserved, prop_stg);
+
+ if (!fmt || reserved)
+ {
+ r = E_INVALIDARG;
+ goto end;
+ }
+
+ if (flags & PROPSETFLAG_NONSIMPLE)
+ {
+ r = IUnknown_QueryInterface(unk, &IID_IStorage, (void **)&stg);
+ if (FAILED(r))
+ goto end;
+
+ /* FIXME: if (flags & PROPSETFLAG_NONSIMPLE), we need to open a
+ * storage, not a stream. For now, disallow it.
+ */
+ FIXME("PROPSETFLAG_NONSIMPLE not supported\n");
+ IStorage_Release(stg);
+ r = STG_E_INVALIDFLAG;
+ }
+ else
+ {
+ r = IUnknown_QueryInterface(unk, &IID_IStream, (void **)&stm);
+ if (FAILED(r))
+ goto end;
+
+ r = PropertyStorage_ConstructFromStream(stm, fmt,
+ STGM_READWRITE|STGM_SHARE_EXCLUSIVE, prop_stg);
+ }
+
+end:
+ TRACE("returning 0x%08x\n", r);
+ return r;
+}
More information about the wine-cvs
mailing list