Piotr Caban : shell32: Added SHPropStgCreate implementation.
Alexandre Julliard
julliard at winehq.org
Tue Nov 16 12:45:46 CST 2010
Module: wine
Branch: master
Commit: bfaae9bf7da649033d2ff948910d9130c92faf5c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bfaae9bf7da649033d2ff948910d9130c92faf5c
Author: Piotr Caban <piotr at codeweavers.com>
Date: Tue Nov 16 14:58:03 2010 +0100
shell32: Added SHPropStgCreate implementation.
---
dlls/shell32/shellole.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/dlls/shell32/shellole.c b/dlls/shell32/shellole.c
index 1161ff4..0949647 100644
--- a/dlls/shell32/shellole.c
+++ b/dlls/shell32/shellole.c
@@ -26,6 +26,7 @@
#include <string.h>
#define COBJMACROS
+#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
@@ -665,8 +666,47 @@ HRESULT WINAPI SHPropStgCreate(IPropertySetStorage *psstg, REFFMTID fmtid,
const CLSID *pclsid, DWORD grfFlags, DWORD grfMode,
DWORD dwDisposition, IPropertyStorage **ppstg, UINT *puCodePage)
{
- FIXME("stub\n");
- return E_NOTIMPL;
+ PROPSPEC prop;
+ PROPVARIANT ret;
+ HRESULT hres;
+
+ TRACE("%p %s %s %x %x %x %p %p\n", psstg, debugstr_guid(fmtid), debugstr_guid(pclsid),
+ grfFlags, grfMode, dwDisposition, ppstg, puCodePage);
+
+ hres = IPropertySetStorage_Open(psstg, fmtid, grfMode, ppstg);
+
+ switch(dwDisposition) {
+ case CREATE_ALWAYS:
+ if(SUCCEEDED(hres)) {
+ IPropertyStorage_Release(*ppstg);
+ hres = IPropertySetStorage_Delete(psstg, fmtid);
+ if(FAILED(hres))
+ return hres;
+ hres = E_FAIL;
+ }
+
+ case OPEN_ALWAYS:
+ case CREATE_NEW:
+ if(FAILED(hres))
+ hres = IPropertySetStorage_Create(psstg, fmtid, pclsid,
+ grfFlags, grfMode, ppstg);
+
+ case OPEN_EXISTING:
+ if(FAILED(hres))
+ return hres;
+
+ if(puCodePage) {
+ prop.ulKind = PRSPEC_PROPID;
+ prop.u.propid = PID_CODEPAGE;
+ hres = IPropertyStorage_ReadMultiple(*ppstg, 1, &prop, &ret);
+ if(FAILED(hres) || ret.vt!=VT_I2)
+ *puCodePage = 0;
+ else
+ *puCodePage = ret.u.iVal;
+ }
+ }
+
+ return S_OK;
}
/*************************************************************************
More information about the wine-cvs
mailing list