Split off from https://gitlab.winehq.org/wine/wine/-/merge_requests/3106
-- v7: coml2: Move WriteClassStg from ole32 coml2: Move WriteClassStm from ole32 coml2: Move ReadClassStg from ole32 coml2: Move ReadClassStm from ole32 coml2: Move GetConvertStg from ole32 coml2: Add dll and move code from ole32/memlockbytes.c
From: Fabian Maurer dark.shadow4@web.de
--- configure.ac | 1 + dlls/coml2/Makefile.in | 7 ++++++ dlls/coml2/coml2.spec | 33 ++++++++++++++++++++++++++++ dlls/{ole32 => coml2}/memlockbytes.c | 0 dlls/ole32/Makefile.in | 3 +-- 5 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 dlls/coml2/Makefile.in create mode 100644 dlls/coml2/coml2.spec rename dlls/{ole32 => coml2}/memlockbytes.c (100%)
diff --git a/configure.ac b/configure.ac index 8d92e4c8ab2..32fc89e97a8 100644 --- a/configure.ac +++ b/configure.ac @@ -2421,6 +2421,7 @@ WINE_CONFIG_MAKEFILE(dlls/comctl32) WINE_CONFIG_MAKEFILE(dlls/comctl32/tests) WINE_CONFIG_MAKEFILE(dlls/comdlg32) WINE_CONFIG_MAKEFILE(dlls/comdlg32/tests) +WINE_CONFIG_MAKEFILE(dlls/coml2) WINE_CONFIG_MAKEFILE(dlls/comm.drv16,enable_win16) WINE_CONFIG_MAKEFILE(dlls/commdlg.dll16,enable_win16) WINE_CONFIG_MAKEFILE(dlls/compobj.dll16,enable_win16) diff --git a/dlls/coml2/Makefile.in b/dlls/coml2/Makefile.in new file mode 100644 index 00000000000..9887ccff873 --- /dev/null +++ b/dlls/coml2/Makefile.in @@ -0,0 +1,7 @@ +EXTRADEFS = -DWINOLE32API= +MODULE = coml2.dll +IMPORTLIB = coml2 +IMPORTS = uuid + +SOURCES = \ + memlockbytes.c diff --git a/dlls/coml2/coml2.spec b/dlls/coml2/coml2.spec new file mode 100644 index 00000000000..ea8eb7b5d9f --- /dev/null +++ b/dlls/coml2/coml2.spec @@ -0,0 +1,33 @@ +1 stub @ +2 stub @ +3 stub @ +4 stub @ +5 stub @ +6 stub @ +7 stub @ +8 stub @ +11 stub @ +12 stub @ +@ stub Coml2DllGetClassObject +@ stdcall CreateILockBytesOnHGlobal(ptr long ptr) +@ stub DllGetClassObject +@ stub FmtIdToPropStgName +@ stub GetConvertStg +@ stdcall GetHGlobalFromILockBytes(ptr ptr) +@ stub PropStgNameToFmtId +@ stub ReadClassStg +@ stub ReadClassStm +@ stub StgCreateDocfile +@ stub StgCreateDocfileOnILockBytes +@ stub StgCreatePropSetStg +@ stub StgCreatePropStg +@ stub StgCreateStorageEx +@ stub StgIsStorageFile +@ stub StgIsStorageILockBytes +@ stub StgOpenPropStg +@ stub StgOpenStorage +@ stub StgOpenStorageEx +@ stub StgOpenStorageOnILockBytes +@ stub StgSetTimes +@ stub WriteClassStg +@ stub WriteClassStm diff --git a/dlls/ole32/memlockbytes.c b/dlls/coml2/memlockbytes.c similarity index 100% rename from dlls/ole32/memlockbytes.c rename to dlls/coml2/memlockbytes.c diff --git a/dlls/ole32/Makefile.in b/dlls/ole32/Makefile.in index b65de3bd68a..ee0fcc41f7d 100644 --- a/dlls/ole32/Makefile.in +++ b/dlls/ole32/Makefile.in @@ -1,7 +1,7 @@ EXTRADEFS = -D_OLE32_ MODULE = ole32.dll IMPORTLIB = ole32 -IMPORTS = uuid advapi32 user32 gdi32 combase rpcrt4 kernelbase +IMPORTS = uuid advapi32 user32 gdi32 combase rpcrt4 kernelbase coml2 DELAYIMPORTS = oleaut32
SOURCES = \ @@ -26,7 +26,6 @@ SOURCES = \ irot.idl \ itemmoniker.c \ marshal.c \ - memlockbytes.c \ moniker.c \ nodrop.svg \ ole2.c \
From: Fabian Maurer dark.shadow4@web.de
--- dlls/coml2/Makefile.in | 3 +- dlls/coml2/coml2.spec | 2 +- dlls/coml2/storage32.c | 86 ++++++++++++++++++++++++++++++++++++++++++ dlls/ole32/storage32.c | 30 --------------- 4 files changed, 89 insertions(+), 32 deletions(-) create mode 100644 dlls/coml2/storage32.c
diff --git a/dlls/coml2/Makefile.in b/dlls/coml2/Makefile.in index 9887ccff873..5aa96ded363 100644 --- a/dlls/coml2/Makefile.in +++ b/dlls/coml2/Makefile.in @@ -4,4 +4,5 @@ IMPORTLIB = coml2 IMPORTS = uuid
SOURCES = \ - memlockbytes.c + memlockbytes.c \ + storage32.c diff --git a/dlls/coml2/coml2.spec b/dlls/coml2/coml2.spec index ea8eb7b5d9f..ae4ffcd8af8 100644 --- a/dlls/coml2/coml2.spec +++ b/dlls/coml2/coml2.spec @@ -12,7 +12,7 @@ @ stdcall CreateILockBytesOnHGlobal(ptr long ptr) @ stub DllGetClassObject @ stub FmtIdToPropStgName -@ stub GetConvertStg +@ stdcall GetConvertStg(ptr) @ stdcall GetHGlobalFromILockBytes(ptr ptr) @ stub PropStgNameToFmtId @ stub ReadClassStg diff --git a/dlls/coml2/storage32.c b/dlls/coml2/storage32.c new file mode 100644 index 00000000000..1a14b14851e --- /dev/null +++ b/dlls/coml2/storage32.c @@ -0,0 +1,86 @@ +/* + * Compound Storage (32 bit version) + * Storage implementation + * + * This file contains the compound file implementation + * of the storage interface. + * + * Copyright 1999 Francis Beaudet + * Copyright 1999 Sylvain St-Germain + * Copyright 1999 Thuy Nguyen + * Copyright 2005 Mike McCormack + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * NOTES + * The compound file implementation of IStorage used for create + * and manage substorages and streams within a storage object + * residing in a compound file object. + */ + +#include <assert.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define COBJMACROS +#include "windef.h" +#include "winbase.h" +#include "winnls.h" +#include "winuser.h" +#include "wine/debug.h" + +#include "ole2.h" /* For Write/ReadClassStm */ + +#include "winreg.h" +#include "wine/wingdi16.h" + +WINE_DEFAULT_DEBUG_CHANNEL(storage); + +enum stream_1ole_flags { + OleStream_LinkedObject = 0x00000001, + OleStream_Convert = 0x00000004 +}; + +/*********************************************************************** + * GetConvertStg (coml2.@) + */ +HRESULT WINAPI GetConvertStg(IStorage *stg) +{ + static const DWORD version_magic = 0x02000001; + DWORD header[2]; + IStream *stream; + HRESULT hr; + + TRACE("%p\n", stg); + + if (!stg) return E_INVALIDARG; + + hr = IStorage_OpenStream(stg, L"\1Ole", NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &stream); + if (FAILED(hr)) return hr; + + hr = IStream_Read(stream, header, sizeof(header), NULL); + IStream_Release(stream); + if (FAILED(hr)) return hr; + + if (header[0] != version_magic) + { + ERR("got wrong version magic for 1Ole stream, %#lx.\n", header[0]); + return E_FAIL; + } + + return header[1] & OleStream_Convert ? S_OK : S_FALSE; +} diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 0d3f9922d78..5b11db7ff96 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -10565,36 +10565,6 @@ HRESULT WINAPI OleConvertIStorageToOLESTREAMEx ( LPSTORAGE stg, CLIPFORMAT cf, L return E_NOTIMPL; }
-/*********************************************************************** - * GetConvertStg (OLE32.@) - */ -HRESULT WINAPI GetConvertStg(IStorage *stg) -{ - static const DWORD version_magic = 0x02000001; - DWORD header[2]; - IStream *stream; - HRESULT hr; - - TRACE("%p\n", stg); - - if (!stg) return E_INVALIDARG; - - hr = IStorage_OpenStream(stg, L"\1Ole", NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &stream); - if (FAILED(hr)) return hr; - - hr = IStream_Read(stream, header, sizeof(header), NULL); - IStream_Release(stream); - if (FAILED(hr)) return hr; - - if (header[0] != version_magic) - { - ERR("got wrong version magic for 1Ole stream, %#lx.\n", header[0]); - return E_FAIL; - } - - return header[1] & OleStream_Convert ? S_OK : S_FALSE; -} - /*********************************************************************** * SetConvertStg (OLE32.@) */
From: Fabian Maurer dark.shadow4@web.de
--- dlls/coml2/coml2.spec | 2 +- dlls/coml2/storage32.c | 27 +++++++++++++++++++++++++++ dlls/ole32/storage32.c | 38 -------------------------------------- 3 files changed, 28 insertions(+), 39 deletions(-)
diff --git a/dlls/coml2/coml2.spec b/dlls/coml2/coml2.spec index ae4ffcd8af8..9cac5f9d01f 100644 --- a/dlls/coml2/coml2.spec +++ b/dlls/coml2/coml2.spec @@ -16,7 +16,7 @@ @ stdcall GetHGlobalFromILockBytes(ptr ptr) @ stub PropStgNameToFmtId @ stub ReadClassStg -@ stub ReadClassStm +@ stdcall ReadClassStm(ptr ptr) @ stub StgCreateDocfile @ stub StgCreateDocfileOnILockBytes @ stub StgCreatePropSetStg diff --git a/dlls/coml2/storage32.c b/dlls/coml2/storage32.c index 1a14b14851e..051555566ef 100644 --- a/dlls/coml2/storage32.c +++ b/dlls/coml2/storage32.c @@ -50,6 +50,33 @@
WINE_DEFAULT_DEBUG_CHANNEL(storage);
+/*********************************************************************** + * ReadClassStm (coml2.@) + */ +HRESULT WINAPI ReadClassStm(IStream *pStm, CLSID *pclsid) +{ + ULONG nbByte; + HRESULT res; + + TRACE("(%p,%p)\n", pStm, pclsid); + + if (!pStm || !pclsid) + return E_INVALIDARG; + + /* clear the output args */ + *pclsid = CLSID_NULL; + + res = IStream_Read(pStm, pclsid, sizeof(CLSID), &nbByte); + + if (FAILED(res)) + return res; + + if (nbByte != sizeof(CLSID)) + return STG_E_READFAULT; + else + return S_OK; +} + enum stream_1ole_flags { OleStream_LinkedObject = 0x00000001, OleStream_Convert = 0x00000004 diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 5b11db7ff96..e463400d2bb 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -9484,44 +9484,6 @@ HRESULT WINAPI WriteClassStm(IStream *pStm,REFCLSID rclsid) return IStream_Write(pStm,rclsid,sizeof(CLSID),NULL); }
-/*********************************************************************** - * ReadClassStm (OLE32.@) - * - * Reads a CLSID from a stream. - * - * PARAMS - * pStm [I] Stream to read from. - * rclsid [O] CLSID to read. - * - * RETURNS - * Success: S_OK. - * Failure: HRESULT code. - */ -HRESULT WINAPI ReadClassStm(IStream *pStm,CLSID *pclsid) -{ - ULONG nbByte; - HRESULT res; - - TRACE("(%p,%p)\n",pStm,pclsid); - - if (!pStm || !pclsid) - return E_INVALIDARG; - - /* clear the output args */ - *pclsid = CLSID_NULL; - - res = IStream_Read(pStm, pclsid, sizeof(CLSID), &nbByte); - - if (FAILED(res)) - return res; - - if (nbByte != sizeof(CLSID)) - return STG_E_READFAULT; - else - return S_OK; -} - - /************************************************************************ * OleConvert Functions ***********************************************************************/
From: Fabian Maurer dark.shadow4@web.de
--- dlls/coml2/coml2.spec | 2 +- dlls/coml2/storage32.c | 24 ++++++++++++++++++++++++ dlls/ole32/storage32.c | 35 ----------------------------------- 3 files changed, 25 insertions(+), 36 deletions(-)
diff --git a/dlls/coml2/coml2.spec b/dlls/coml2/coml2.spec index 9cac5f9d01f..a41482bc46e 100644 --- a/dlls/coml2/coml2.spec +++ b/dlls/coml2/coml2.spec @@ -15,7 +15,7 @@ @ stdcall GetConvertStg(ptr) @ stdcall GetHGlobalFromILockBytes(ptr ptr) @ stub PropStgNameToFmtId -@ stub ReadClassStg +@ stdcall ReadClassStg(ptr ptr) @ stdcall ReadClassStm(ptr ptr) @ stub StgCreateDocfile @ stub StgCreateDocfileOnILockBytes diff --git a/dlls/coml2/storage32.c b/dlls/coml2/storage32.c index 051555566ef..06a58749c5d 100644 --- a/dlls/coml2/storage32.c +++ b/dlls/coml2/storage32.c @@ -50,6 +50,30 @@
WINE_DEFAULT_DEBUG_CHANNEL(storage);
+/*********************************************************************** + * ReadClassStg (coml2.@) + */ +HRESULT WINAPI ReadClassStg(IStorage *pstg, CLSID *pclsid) +{ + STATSTG pstatstg; + HRESULT hRes; + + TRACE("(%p, %p)\n", pstg, pclsid); + + if (!pstg || !pclsid) + return E_INVALIDARG; + + /* + * read a STATSTG structure (contains the clsid) from the storage + */ + hRes = IStorage_Stat(pstg, &pstatstg, STATFLAG_NONAME); + + if (SUCCEEDED(hRes)) + *pclsid = pstatstg.clsid; + + return hRes; +} + /*********************************************************************** * ReadClassStm (coml2.@) */ diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index e463400d2bb..33586de5e68 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -9042,41 +9042,6 @@ HRESULT WINAPI WriteClassStg(IStorage* pStg, REFCLSID rclsid) return IStorage_SetClass(pStg, rclsid); }
-/*********************************************************************** - * ReadClassStg (OLE32.@) - * - * This method reads the CLSID previously written to a storage object with - * the WriteClassStg. - * - * PARAMS - * pstg [I] IStorage pointer - * pclsid [O] Pointer to where the CLSID is written - * - * RETURNS - * Success: S_OK. - * Failure: HRESULT code. - */ -HRESULT WINAPI ReadClassStg(IStorage *pstg,CLSID *pclsid){ - - STATSTG pstatstg; - HRESULT hRes; - - TRACE("(%p, %p)\n", pstg, pclsid); - - if(!pstg || !pclsid) - return E_INVALIDARG; - - /* - * read a STATSTG structure (contains the clsid) from the storage - */ - hRes=IStorage_Stat(pstg,&pstatstg,STATFLAG_NONAME); - - if(SUCCEEDED(hRes)) - *pclsid=pstatstg.clsid; - - return hRes; -} - /*********************************************************************** * OleLoadFromStream (OLE32.@) *
From: Fabian Maurer dark.shadow4@web.de
--- dlls/coml2/coml2.spec | 2 +- dlls/coml2/storage32.c | 13 +++++++++++++ dlls/ole32/storage32.c | 23 ----------------------- 3 files changed, 14 insertions(+), 24 deletions(-)
diff --git a/dlls/coml2/coml2.spec b/dlls/coml2/coml2.spec index a41482bc46e..79aaba8346c 100644 --- a/dlls/coml2/coml2.spec +++ b/dlls/coml2/coml2.spec @@ -30,4 +30,4 @@ @ stub StgOpenStorageOnILockBytes @ stub StgSetTimes @ stub WriteClassStg -@ stub WriteClassStm +@ stdcall WriteClassStm(ptr ptr) diff --git a/dlls/coml2/storage32.c b/dlls/coml2/storage32.c index 06a58749c5d..40fc7ff9a2e 100644 --- a/dlls/coml2/storage32.c +++ b/dlls/coml2/storage32.c @@ -74,6 +74,19 @@ HRESULT WINAPI ReadClassStg(IStorage *pstg, CLSID *pclsid) return hRes; }
+/*********************************************************************** + * WriteClassStm (coml2.@) + */ +HRESULT WINAPI WriteClassStm(IStream *pStm, REFCLSID rclsid) +{ + TRACE("(%p,%p)\n", pStm, rclsid); + + if (!pStm || !rclsid) + return E_INVALIDARG; + + return IStream_Write(pStm, rclsid, sizeof(CLSID), NULL); +} + /*********************************************************************** * ReadClassStm (coml2.@) */ diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 33586de5e68..5d1299a5797 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -9426,29 +9426,6 @@ StgIsStorageFile(LPCOLESTR fn) return S_FALSE; }
-/*********************************************************************** - * WriteClassStm (OLE32.@) - * - * Writes a CLSID to a stream. - * - * PARAMS - * pStm [I] Stream to write to. - * rclsid [I] CLSID to write. - * - * RETURNS - * Success: S_OK. - * Failure: HRESULT code. - */ -HRESULT WINAPI WriteClassStm(IStream *pStm,REFCLSID rclsid) -{ - TRACE("(%p,%p)\n",pStm,rclsid); - - if (!pStm || !rclsid) - return E_INVALIDARG; - - return IStream_Write(pStm,rclsid,sizeof(CLSID),NULL); -} - /************************************************************************ * OleConvert Functions ***********************************************************************/
From: Fabian Maurer dark.shadow4@web.de
--- dlls/coml2/coml2.spec | 2 +- dlls/coml2/storage32.c | 14 ++++++++++++++ dlls/ole32/storage32.c | 16 ---------------- 3 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/dlls/coml2/coml2.spec b/dlls/coml2/coml2.spec index 79aaba8346c..9f20fdd525b 100644 --- a/dlls/coml2/coml2.spec +++ b/dlls/coml2/coml2.spec @@ -29,5 +29,5 @@ @ stub StgOpenStorageEx @ stub StgOpenStorageOnILockBytes @ stub StgSetTimes -@ stub WriteClassStg +@ stdcall WriteClassStg(ptr ptr) @ stdcall WriteClassStm(ptr ptr) diff --git a/dlls/coml2/storage32.c b/dlls/coml2/storage32.c index 40fc7ff9a2e..8ce9f68524f 100644 --- a/dlls/coml2/storage32.c +++ b/dlls/coml2/storage32.c @@ -50,6 +50,20 @@
WINE_DEFAULT_DEBUG_CHANNEL(storage);
+/*********************************************************************** + * WriteClassStg [coml2.@] + */ +HRESULT WINAPI WriteClassStg(IStorage *pStg, REFCLSID rclsid) +{ + if (!pStg) + return E_INVALIDARG; + + if (!rclsid) + return STG_E_INVALIDPOINTER; + + return IStorage_SetClass(pStg, rclsid); +} + /*********************************************************************** * ReadClassStg (coml2.@) */ diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 5d1299a5797..3335186ff90 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -9026,22 +9026,6 @@ HRESULT WINAPI StgIsStorageILockBytes(ILockBytes *plkbyt) return S_FALSE; }
-/****************************************************************************** - * WriteClassStg [OLE32.@] - * - * This method will store the specified CLSID in the specified storage object - */ -HRESULT WINAPI WriteClassStg(IStorage* pStg, REFCLSID rclsid) -{ - if(!pStg) - return E_INVALIDARG; - - if(!rclsid) - return STG_E_INVALIDPOINTER; - - return IStorage_SetClass(pStg, rclsid); -} - /*********************************************************************** * OleLoadFromStream (OLE32.@) *