[PATCH 4/6] combase: Move CoGetApartmentType().
Nikolay Sivov
nsivov at codeweavers.com
Thu Aug 27 03:37:47 CDT 2020
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/combase/apartment.c | 2 +-
dlls/combase/combase.c | 39 ++++++++++++++++++++++++++++++++++
dlls/combase/combase.spec | 3 +--
dlls/combase/combase_private.h | 2 ++
dlls/ole32/compobj.c | 38 ---------------------------------
dlls/ole32/compobj_private.h | 1 -
dlls/ole32/ole32.spec | 2 +-
7 files changed, 44 insertions(+), 43 deletions(-)
diff --git a/dlls/combase/apartment.c b/dlls/combase/apartment.c
index 1ce7021bef9..2d1f7a75744 100644
--- a/dlls/combase/apartment.c
+++ b/dlls/combase/apartment.c
@@ -627,7 +627,7 @@ static struct apartment *apartment_get_or_create(DWORD model)
return apt;
}
-struct apartment * WINAPI apartment_get_mta(void)
+struct apartment * apartment_get_mta(void)
{
struct apartment *apt;
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c
index 7d61faefa92..47e31ebad14 100644
--- a/dlls/combase/combase.c
+++ b/dlls/combase/combase.c
@@ -2422,6 +2422,45 @@ HRESULT WINAPI CoDecrementMTAUsage(CO_MTA_USAGE_COOKIE cookie)
return S_OK;
}
+/***********************************************************************
+ * CoGetApartmentType (combase.@)
+ */
+HRESULT WINAPI CoGetApartmentType(APTTYPE *type, APTTYPEQUALIFIER *qualifier)
+{
+ struct tlsdata *tlsdata;
+ struct apartment *apt;
+ HRESULT hr;
+
+ TRACE("%p, %p\n", type, qualifier);
+
+ if (!type || !qualifier)
+ return E_INVALIDARG;
+
+ if (FAILED(hr = com_get_tlsdata(&tlsdata)))
+ return hr;
+
+ if (!tlsdata->apt)
+ *type = APTTYPE_CURRENT;
+ else if (tlsdata->apt->multi_threaded)
+ *type = APTTYPE_MTA;
+ else if (tlsdata->apt->main)
+ *type = APTTYPE_MAINSTA;
+ else
+ *type = APTTYPE_STA;
+
+ *qualifier = APTTYPEQUALIFIER_NONE;
+
+ if (!tlsdata->apt && (apt = apartment_get_mta()))
+ {
+ apartment_release(apt);
+ *type = APTTYPE_MTA;
+ *qualifier = APTTYPEQUALIFIER_IMPLICIT_MTA;
+ return S_OK;
+ }
+
+ return tlsdata->apt ? S_OK : CO_E_NOTINITIALIZED;
+}
+
/***********************************************************************
* DllMain (combase.@)
*/
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
index 52c4ef51b2e..143de28d7d6 100644
--- a/dlls/combase/combase.spec
+++ b/dlls/combase/combase.spec
@@ -96,7 +96,7 @@
@ stdcall CoFreeUnusedLibrariesEx(long long)
@ stdcall CoGetActivationState(int128 long ptr)
@ stub CoGetApartmentID
-@ stdcall CoGetApartmentType(ptr ptr) ole32.CoGetApartmentType
+@ stdcall CoGetApartmentType(ptr ptr)
@ stdcall CoGetCallContext(ptr ptr)
@ stdcall CoGetCallState(long ptr)
@ stdcall CoGetCallerTID(ptr) ole32.CoGetCallerTID
@@ -356,7 +356,6 @@
@ stdcall enter_apartment(ptr long)
@ stdcall leave_apartment(ptr)
@ stdcall apartment_get_inproc_class_object(ptr ptr ptr ptr long ptr)
-@ stdcall apartment_get_mta()
@ stdcall apartment_findfromoxid(int64)
@ stdcall apartment_getwindow(ptr)
@ stdcall apartment_global_cleanup()
diff --git a/dlls/combase/combase_private.h b/dlls/combase/combase_private.h
index 32ffba0df89..1f80f1a12be 100644
--- a/dlls/combase/combase_private.h
+++ b/dlls/combase/combase_private.h
@@ -133,8 +133,10 @@ struct stub_manager
HRESULT WINAPI enter_apartment(struct tlsdata *data, DWORD model);
void WINAPI leave_apartment(struct tlsdata *data);
+void WINAPI apartment_release(struct apartment *apt);
HRESULT apartment_increment_mta_usage(CO_MTA_USAGE_COOKIE *cookie) DECLSPEC_HIDDEN;
void apartment_decrement_mta_usage(CO_MTA_USAGE_COOKIE cookie) DECLSPEC_HIDDEN;
+struct apartment * apartment_get_mta(void) DECLSPEC_HIDDEN;
/* Stub Manager */
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index 5adcd94b2cd..975af46f854 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -1771,44 +1771,6 @@ HRESULT Handler_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
return CLASS_E_CLASSNOTAVAILABLE;
}
-/***********************************************************************
- * CoGetApartmentType [OLE32.@]
- */
-HRESULT WINAPI CoGetApartmentType(APTTYPE *type, APTTYPEQUALIFIER *qualifier)
-{
- struct oletls *info = COM_CurrentInfo();
- struct apartment *apt;
-
- TRACE("(%p, %p)\n", type, qualifier);
-
- if (!type || !qualifier)
- return E_INVALIDARG;
-
- if (!info)
- return E_OUTOFMEMORY;
-
- if (!info->apt)
- *type = APTTYPE_CURRENT;
- else if (info->apt->multi_threaded)
- *type = APTTYPE_MTA;
- else if (info->apt->main)
- *type = APTTYPE_MAINSTA;
- else
- *type = APTTYPE_STA;
-
- *qualifier = APTTYPEQUALIFIER_NONE;
-
- if (!info->apt && (apt = apartment_get_mta()))
- {
- apartment_release(apt);
- *type = APTTYPE_MTA;
- *qualifier = APTTYPEQUALIFIER_IMPLICIT_MTA;
- return S_OK;
- }
-
- return info->apt ? S_OK : CO_E_NOTINITIALIZED;
-}
-
/***********************************************************************
* CoDisableCallCancellation [OLE32.@]
*/
diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h
index 2c8c337c643..9d6a1d1b794 100644
--- a/dlls/ole32/compobj_private.h
+++ b/dlls/ole32/compobj_private.h
@@ -257,7 +257,6 @@ struct class_reg_data;
extern HRESULT WINAPI apartment_get_inproc_class_object(struct apartment *apt, const struct class_reg_data *regdata,
REFCLSID rclsid, REFIID riid, BOOL hostifnecessary, void **ppv) DECLSPEC_HIDDEN;
-extern struct apartment * WINAPI apartment_get_mta(void) DECLSPEC_HIDDEN;
extern HRESULT WINAPI apartment_get_local_server_stream(struct apartment *apt, IStream **ret) DECLSPEC_HIDDEN;
extern void WINAPI apartment_global_cleanup(void) DECLSPEC_HIDDEN;
diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec
index 7d3d1e2e6e3..0b38e74388a 100644
--- a/dlls/ole32/ole32.spec
+++ b/dlls/ole32/ole32.spec
@@ -26,7 +26,7 @@
@ stdcall CoFreeUnusedLibraries() combase.CoFreeUnusedLibraries
@ stdcall CoFreeUnusedLibrariesEx(long long) combase.CoFreeUnusedLibrariesEx
@ stdcall CoGetActivationState(int128 long ptr) combase.CoGetActivationState
-@ stdcall CoGetApartmentType(ptr ptr)
+@ stdcall CoGetApartmentType(ptr ptr) combase.CoGetApartmentType
@ stdcall CoGetCallContext(ptr ptr) combase.CoGetCallContext
@ stdcall CoGetCallState(long ptr) combase.CoGetCallState
@ stdcall CoGetCallerTID(ptr)
--
2.28.0
More information about the wine-devel
mailing list