From: Rémi Bernon rbernon@codeweavers.com
--- dlls/cryptowinrt/Makefile.in | 1 - dlls/cryptowinrt/credentials.c | 2 +- dlls/cryptowinrt/private.h | 3 - dlls/windows.gaming.input/async.c | 145 ------------------ dlls/windows.gaming.input/force_feedback.c | 8 +- dlls/windows.gaming.input/private.h | 2 - include/wine/winrt.idl | 2 + libs/winewinrt/Makefile.in | 1 + .../async.c => libs/winewinrt/async_bool.c | 9 +- 9 files changed, 12 insertions(+), 161 deletions(-) rename dlls/cryptowinrt/async.c => libs/winewinrt/async_bool.c (96%)
diff --git a/dlls/cryptowinrt/Makefile.in b/dlls/cryptowinrt/Makefile.in index 0f99c556acb..56fcd79e895 100644 --- a/dlls/cryptowinrt/Makefile.in +++ b/dlls/cryptowinrt/Makefile.in @@ -2,7 +2,6 @@ MODULE = cryptowinrt.dll IMPORTS = winewinrt combase bcrypt uuid
C_SRCS = \ - async.c \ credentials.c \ main.c
diff --git a/dlls/cryptowinrt/credentials.c b/dlls/cryptowinrt/credentials.c index 960c5fabf8f..159bd1d9277 100644 --- a/dlls/cryptowinrt/credentials.c +++ b/dlls/cryptowinrt/credentials.c @@ -128,7 +128,7 @@ static HRESULT is_supported_async( IUnknown *invoker, IUnknown *param, PROPVARIA static HRESULT WINAPI credentials_statics_IsSupportedAsync( IKeyCredentialManagerStatics *iface, IAsyncOperation_boolean **value ) { TRACE( "iface %p, value %p.\n", iface, value ); - return async_operation_boolean_create( (IUnknown *)iface, NULL, is_supported_async, value ); + return async_bool_create( (IUnknown *)iface, NULL, is_supported_async, value ); }
static HRESULT WINAPI credentials_statics_RenewAttestationAsync( IKeyCredentialManagerStatics *iface, IAsyncAction **operation ) diff --git a/dlls/cryptowinrt/private.h b/dlls/cryptowinrt/private.h index e83aa41671a..0890143cbe7 100644 --- a/dlls/cryptowinrt/private.h +++ b/dlls/cryptowinrt/private.h @@ -41,7 +41,4 @@
extern IActivationFactory *credentials_activation_factory;
-extern HRESULT async_operation_boolean_create( IUnknown *invoker, IUnknown *param, async_callback callback, - IAsyncOperation_boolean **out ); - #endif diff --git a/dlls/windows.gaming.input/async.c b/dlls/windows.gaming.input/async.c index 0e3814d5ac4..ca69afac588 100644 --- a/dlls/windows.gaming.input/async.c +++ b/dlls/windows.gaming.input/async.c @@ -25,151 +25,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(input);
-struct async_bool -{ - IAsyncOperation_boolean IAsyncOperation_boolean_iface; - IWineAsyncInfoImpl *IWineAsyncInfoImpl_inner; - LONG ref; -}; - -static inline struct async_bool *impl_from_IAsyncOperation_boolean( IAsyncOperation_boolean *iface ) -{ - return CONTAINING_RECORD( iface, struct async_bool, IAsyncOperation_boolean_iface ); -} - -static HRESULT WINAPI async_bool_QueryInterface( IAsyncOperation_boolean *iface, REFIID iid, void **out ) -{ - struct async_bool *impl = impl_from_IAsyncOperation_boolean( iface ); - - TRACE( "iface %p, iid %s, out %p.\n", iface, debugstr_guid( iid ), out ); - - if (IsEqualGUID( iid, &IID_IUnknown ) || - IsEqualGUID( iid, &IID_IInspectable ) || - IsEqualGUID( iid, &IID_IAgileObject ) || - IsEqualGUID( iid, &IID_IAsyncOperation_boolean )) - { - IInspectable_AddRef( (*out = &impl->IAsyncOperation_boolean_iface) ); - return S_OK; - } - - return IWineAsyncInfoImpl_QueryInterface( impl->IWineAsyncInfoImpl_inner, iid, out ); -} - -static ULONG WINAPI async_bool_AddRef( IAsyncOperation_boolean *iface ) -{ - struct async_bool *impl = impl_from_IAsyncOperation_boolean( iface ); - ULONG ref = InterlockedIncrement( &impl->ref ); - TRACE( "iface %p, ref %lu.\n", iface, ref ); - return ref; -} - -static ULONG WINAPI async_bool_Release( IAsyncOperation_boolean *iface ) -{ - struct async_bool *impl = impl_from_IAsyncOperation_boolean( iface ); - ULONG ref = InterlockedDecrement( &impl->ref ); - TRACE( "iface %p, ref %lu.\n", iface, ref ); - - if (!ref) - { - /* guard against re-entry if inner releases an outer iface */ - InterlockedIncrement( &impl->ref ); - IWineAsyncInfoImpl_Release( impl->IWineAsyncInfoImpl_inner ); - free( impl ); - } - - return ref; -} - -static HRESULT WINAPI async_bool_GetIids( IAsyncOperation_boolean *iface, ULONG *iid_count, IID **iids ) -{ - FIXME( "iface %p, iid_count %p, iids %p stub!\n", iface, iid_count, iids ); - return E_NOTIMPL; -} - -static HRESULT WINAPI async_bool_GetRuntimeClassName( IAsyncOperation_boolean *iface, HSTRING *class_name ) -{ - return WindowsCreateString( L"Windows.Foundation.IAsyncOperation`1<Boolean>", - ARRAY_SIZE(L"Windows.Foundation.IAsyncOperation`1<Boolean>"), - class_name ); -} - -static HRESULT WINAPI async_bool_GetTrustLevel( IAsyncOperation_boolean *iface, TrustLevel *trust_level ) -{ - FIXME( "iface %p, trust_level %p stub!\n", iface, trust_level ); - return E_NOTIMPL; -} - -static HRESULT WINAPI async_bool_put_Completed( IAsyncOperation_boolean *iface, IAsyncOperationCompletedHandler_boolean *bool_handler ) -{ - IWineAsyncOperationCompletedHandler *handler = (IWineAsyncOperationCompletedHandler *)bool_handler; - struct async_bool *impl = impl_from_IAsyncOperation_boolean( iface ); - TRACE( "iface %p, handler %p.\n", iface, handler ); - return IWineAsyncInfoImpl_put_Completed( impl->IWineAsyncInfoImpl_inner, (IWineAsyncOperationCompletedHandler *)handler ); -} - -static HRESULT WINAPI async_bool_get_Completed( IAsyncOperation_boolean *iface, IAsyncOperationCompletedHandler_boolean **bool_handler ) -{ - IWineAsyncOperationCompletedHandler **handler = (IWineAsyncOperationCompletedHandler **)bool_handler; - struct async_bool *impl = impl_from_IAsyncOperation_boolean( iface ); - TRACE( "iface %p, handler %p.\n", iface, handler ); - return IWineAsyncInfoImpl_get_Completed( impl->IWineAsyncInfoImpl_inner, (IWineAsyncOperationCompletedHandler **)handler ); -} - -static HRESULT WINAPI async_bool_GetResults( IAsyncOperation_boolean *iface, BOOLEAN *results ) -{ - struct async_bool *impl = impl_from_IAsyncOperation_boolean( iface ); - PROPVARIANT result = {.vt = VT_BOOL}; - HRESULT hr; - - TRACE( "iface %p, results %p.\n", iface, results ); - - hr = IWineAsyncInfoImpl_get_Result( impl->IWineAsyncInfoImpl_inner, &result ); - - *results = result.boolVal; - PropVariantClear( &result ); - return hr; -} - -static const struct IAsyncOperation_booleanVtbl async_bool_vtbl = -{ - /* IUnknown methods */ - async_bool_QueryInterface, - async_bool_AddRef, - async_bool_Release, - /* IInspectable methods */ - async_bool_GetIids, - async_bool_GetRuntimeClassName, - async_bool_GetTrustLevel, - /* IAsyncOperation<boolean> */ - async_bool_put_Completed, - async_bool_get_Completed, - async_bool_GetResults, -}; - -HRESULT async_operation_boolean_create( IUnknown *invoker, IUnknown *param, async_callback callback, - IAsyncOperation_boolean **out ) -{ - struct async_bool *impl; - HRESULT hr; - - *out = NULL; - if (!(impl = calloc( 1, sizeof(*impl) ))) return E_OUTOFMEMORY; - impl->IAsyncOperation_boolean_iface.lpVtbl = &async_bool_vtbl; - impl->ref = 1; - - if (FAILED(hr = async_info_create( invoker, param, callback, (IInspectable *)&impl->IAsyncOperation_boolean_iface, &impl->IWineAsyncInfoImpl_inner )) || - FAILED(hr = IWineAsyncInfoImpl_Start( impl->IWineAsyncInfoImpl_inner ))) - { - if (impl->IWineAsyncInfoImpl_inner) IWineAsyncInfoImpl_Release( impl->IWineAsyncInfoImpl_inner ); - free( impl ); - return hr; - } - - *out = &impl->IAsyncOperation_boolean_iface; - TRACE( "created IAsyncOperation_boolean %p\n", *out ); - return S_OK; -} - struct async_result { IAsyncOperation_ForceFeedbackLoadEffectResult IAsyncOperation_ForceFeedbackLoadEffectResult_iface; diff --git a/dlls/windows.gaming.input/force_feedback.c b/dlls/windows.gaming.input/force_feedback.c index dd2b56375cf..73a75cbe735 100644 --- a/dlls/windows.gaming.input/force_feedback.c +++ b/dlls/windows.gaming.input/force_feedback.c @@ -708,7 +708,7 @@ static HRESULT motor_try_disable_async( IUnknown *invoker, IUnknown *param, PROP static HRESULT WINAPI motor_TryDisableAsync( IForceFeedbackMotor *iface, IAsyncOperation_boolean **async_op ) { TRACE( "iface %p, async_op %p.\n", iface, async_op ); - return async_operation_boolean_create( (IUnknown *)iface, NULL, motor_try_disable_async, async_op ); + return async_bool_create( (IUnknown *)iface, NULL, motor_try_disable_async, async_op ); }
static HRESULT motor_try_enable_async( IUnknown *invoker, IUnknown *param, PROPVARIANT *result ) @@ -726,7 +726,7 @@ static HRESULT motor_try_enable_async( IUnknown *invoker, IUnknown *param, PROPV static HRESULT WINAPI motor_TryEnableAsync( IForceFeedbackMotor *iface, IAsyncOperation_boolean **async_op ) { TRACE( "iface %p, async_op %p.\n", iface, async_op ); - return async_operation_boolean_create( (IUnknown *)iface, NULL, motor_try_enable_async, async_op ); + return async_bool_create( (IUnknown *)iface, NULL, motor_try_enable_async, async_op ); }
static HRESULT motor_try_reset_async( IUnknown *invoker, IUnknown *param, PROPVARIANT *result ) @@ -744,7 +744,7 @@ static HRESULT motor_try_reset_async( IUnknown *invoker, IUnknown *param, PROPVA static HRESULT WINAPI motor_TryResetAsync( IForceFeedbackMotor *iface, IAsyncOperation_boolean **async_op ) { TRACE( "iface %p, async_op %p.\n", iface, async_op ); - return async_operation_boolean_create( (IUnknown *)iface, NULL, motor_try_reset_async, async_op ); + return async_bool_create( (IUnknown *)iface, NULL, motor_try_reset_async, async_op ); }
static HRESULT motor_unload_effect_async( IUnknown *iface, IUnknown *param, PROPVARIANT *result ) @@ -783,7 +783,7 @@ static HRESULT WINAPI motor_TryUnloadEffectAsync( IForceFeedbackMotor *iface, IF LeaveCriticalSection( &impl->cs ); if (FAILED(hr)) return hr;
- return async_operation_boolean_create( (IUnknown *)iface, (IUnknown *)effect, motor_unload_effect_async, async_op ); + return async_bool_create( (IUnknown *)iface, (IUnknown *)effect, motor_unload_effect_async, async_op ); }
static const struct IForceFeedbackMotorVtbl motor_vtbl = diff --git a/dlls/windows.gaming.input/private.h b/dlls/windows.gaming.input/private.h index 0b0abd3f1f6..19772b9ebeb 100644 --- a/dlls/windows.gaming.input/private.h +++ b/dlls/windows.gaming.input/private.h @@ -68,8 +68,6 @@ extern void event_handlers_notify( struct list *list, IInspectable *element ); extern HRESULT force_feedback_motor_create( IDirectInputDevice8W *device, IForceFeedbackMotor **out ); extern HRESULT force_feedback_effect_create( enum WineForceFeedbackEffectType type, IInspectable *outer, IWineForceFeedbackEffectImpl **out );
-extern HRESULT async_operation_boolean_create( IUnknown *invoker, IUnknown *param, async_callback callback, - IAsyncOperation_boolean **out ); extern HRESULT async_operation_effect_result_create( IUnknown *invoker, IUnknown *param, async_callback callback, IAsyncOperation_ForceFeedbackLoadEffectResult **out );
diff --git a/include/wine/winrt.idl b/include/wine/winrt.idl index 59a6da28ee2..374e30902e2 100644 --- a/include/wine/winrt.idl +++ b/include/wine/winrt.idl @@ -66,6 +66,8 @@ namespace Windows.Foundation { typedef HRESULT (*async_callback)( IUnknown *invoker, IUnknown *param, PROPVARIANT *result ); extern HRESULT async_info_create( IUnknown *invoker, IUnknown *param, async_callback callback, IInspectable *outer, Windows.Foundation.IWineAsyncInfoImpl **out ); +extern HRESULT async_bool_create( IUnknown *invoker, IUnknown *param, async_callback callback, + Windows.Foundation.IAsyncOperation<boolean> **out );
extern const char *debugstr_hstring( HSTRING hstr );
diff --git a/libs/winewinrt/Makefile.in b/libs/winewinrt/Makefile.in index fce5844ee51..d06bfa31dcf 100644 --- a/libs/winewinrt/Makefile.in +++ b/libs/winewinrt/Makefile.in @@ -1,6 +1,7 @@ STATICLIB = libwinewinrt.a
C_SRCS = \ + async_bool.c \ async_info.c \ debug.c \ vector_hstring.c \ diff --git a/dlls/cryptowinrt/async.c b/libs/winewinrt/async_bool.c similarity index 96% rename from dlls/cryptowinrt/async.c rename to libs/winewinrt/async_bool.c index 8fb94e88312..aa7645ccdd3 100644 --- a/dlls/cryptowinrt/async.c +++ b/libs/winewinrt/async_bool.c @@ -1,5 +1,4 @@ -/* CryptoWinRT Implementation - * +/* * Copyright 2022 Bernhard Kölbl for CodeWeavers * Copyright 2022 Rémi Bernon for CodeWeavers * @@ -22,7 +21,7 @@
#include "wine/debug.h"
-WINE_DEFAULT_DEBUG_CHANNEL(crypto); +WINE_DEFAULT_DEBUG_CHANNEL(winrt);
struct async_bool { @@ -145,8 +144,8 @@ static const struct IAsyncOperation_booleanVtbl async_bool_vtbl = async_bool_GetResults, };
-HRESULT async_operation_boolean_create( IUnknown *invoker, IUnknown *param, async_callback callback, - IAsyncOperation_boolean **out ) +HRESULT async_bool_create( IUnknown *invoker, IUnknown *param, async_callback callback, + IAsyncOperation_boolean **out ) { struct async_bool *impl; HRESULT hr;