combase: Move CoGetApartmentType().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
66d912a7b5
commit
373c753e99
|
@ -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;
|
||||
|
||||
|
|
|
@ -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.@)
|
||||
*/
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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.@]
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue