Nikolay Sivov : combase: Move GetErrorInfo().
Alexandre Julliard
julliard at winehq.org
Tue Aug 18 16:34:23 CDT 2020
Module: wine
Branch: master
Commit: 826f24cefd6cf0c8b1f8790102421cff7967299a
URL: https://source.winehq.org/git/wine.git/?a=commit;h=826f24cefd6cf0c8b1f8790102421cff7967299a
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Aug 17 10:20:50 2020 +0300
combase: Move GetErrorInfo().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/combase/combase.spec | 2 +-
dlls/combase/combase_private.h | 10 ++++++++++
dlls/combase/errorinfo.c | 30 +++++++++++++++++++++++++++++
dlls/ole32/errorinfo.c | 43 ------------------------------------------
dlls/ole32/ole32.spec | 2 +-
5 files changed, 42 insertions(+), 45 deletions(-)
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
index 1298fedd9e..e5ffc21479 100644
--- a/dlls/combase/combase.spec
+++ b/dlls/combase/combase.spec
@@ -182,7 +182,7 @@
@ stdcall FreePropVariantArray(long ptr)
@ stub FreePropVariantArrayWorker
@ stub GetCatalogHelper
-@ stdcall GetErrorInfo(long ptr) ole32.GetErrorInfo
+@ stdcall GetErrorInfo(long ptr)
@ stub GetFuncDescs
@ stdcall GetHGlobalFromStream(ptr ptr) ole32.GetHGlobalFromStream
@ stub GetHookInterface
diff --git a/dlls/combase/combase_private.h b/dlls/combase/combase_private.h
index 5ba9c84650..bae57e8948 100644
--- a/dlls/combase/combase_private.h
+++ b/dlls/combase/combase_private.h
@@ -14,6 +14,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include "winternl.h"
+
#include "wine/list.h"
struct apartment;
@@ -40,3 +42,11 @@ struct tlsdata
struct list spies; /* Spies installed with CoRegisterInitializeSpy */
DWORD spies_lock;
};
+
+extern HRESULT WINAPI InternalTlsAllocData(struct tlsdata **data);
+
+static inline HRESULT com_get_tlsdata(struct tlsdata **data)
+{
+ *data = NtCurrentTeb()->ReservedForOle;
+ return *data ? S_OK : InternalTlsAllocData(data);
+}
diff --git a/dlls/combase/errorinfo.c b/dlls/combase/errorinfo.c
index 3fcc65a31e..aac00fd4eb 100644
--- a/dlls/combase/errorinfo.c
+++ b/dlls/combase/errorinfo.c
@@ -22,6 +22,8 @@
#include "oleauto.h"
+#include "combase_private.h"
+
#include "wine/debug.h"
#include "wine/heap.h"
@@ -354,3 +356,31 @@ HRESULT WINAPI CreateErrorInfo(ICreateErrorInfo **ret)
return S_OK;
}
+
+/***********************************************************************
+ * GetErrorInfo (combase.@)
+ */
+HRESULT WINAPI GetErrorInfo(ULONG reserved, IErrorInfo **error_info)
+{
+ struct tlsdata *tlsdata;
+ HRESULT hr;
+
+ TRACE("%u, %p\n", reserved, error_info);
+
+ if (reserved || !error_info)
+ return E_INVALIDARG;
+
+ if (FAILED(hr = com_get_tlsdata(&tlsdata)))
+ return hr;
+
+ if (!tlsdata->errorinfo)
+ {
+ *error_info = NULL;
+ return S_FALSE;
+ }
+
+ *error_info = tlsdata->errorinfo;
+ tlsdata->errorinfo = NULL;
+
+ return S_OK;
+}
diff --git a/dlls/ole32/errorinfo.c b/dlls/ole32/errorinfo.c
index 45591ba4a1..d36c6c8c0f 100644
--- a/dlls/ole32/errorinfo.c
+++ b/dlls/ole32/errorinfo.c
@@ -40,49 +40,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(ole);
-/***********************************************************************
- * GetErrorInfo (OLE32.@)
- *
- * Retrieves the error information object for the current thread.
- *
- * PARAMS
- * dwReserved [I]. Reserved. Must be zero.
- * pperrinfo [O]. Address where error information object will be stored on return.
- *
- * RETURNS
- * Success: S_OK if an error information object was set for the current thread.
- * S_FALSE if otherwise.
- * Failure: E_INVALIDARG if dwReserved is not zero.
- *
- * NOTES
- * This function causes the current error info object for the thread to be
- * cleared if one was set beforehand.
- */
-HRESULT WINAPI GetErrorInfo(ULONG dwReserved, IErrorInfo **pperrinfo)
-{
- TRACE("(%d, %p, %p)\n", dwReserved, pperrinfo, COM_CurrentInfo()->errorinfo);
-
- if (dwReserved)
- {
- ERR("dwReserved (0x%x) != 0\n", dwReserved);
- return E_INVALIDARG;
- }
-
- if(!pperrinfo) return E_INVALIDARG;
-
- if (!COM_CurrentInfo()->errorinfo)
- {
- *pperrinfo = NULL;
- return S_FALSE;
- }
-
- *pperrinfo = COM_CurrentInfo()->errorinfo;
-
- /* clear thread error state */
- COM_CurrentInfo()->errorinfo = NULL;
- return S_OK;
-}
-
/***********************************************************************
* SetErrorInfo (OLE32.@)
*
diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec
index 7b2c583661..fb78ab8b6f 100644
--- a/dlls/ole32/ole32.spec
+++ b/dlls/ole32/ole32.spec
@@ -118,7 +118,7 @@
@ stdcall GetClassFile(wstr ptr)
@ stdcall GetConvertStg(ptr)
@ stub GetDocumentBitStg
-@ stdcall GetErrorInfo(long ptr)
+@ stdcall GetErrorInfo(long ptr) combase.GetErrorInfo
@ stdcall GetHGlobalFromILockBytes(ptr ptr)
@ stdcall GetHGlobalFromStream(ptr ptr)
@ stub GetHookInterface
More information about the wine-cvs
mailing list