Hans Leidekker : winscard: Implement SCardCancel().
Module: wine Branch: master Commit: 4295b90ce15560823205e3f4e53e1d83ab4d8536 URL: https://gitlab.winehq.org/wine/wine/-/commit/4295b90ce15560823205e3f4e53e1d8... Author: Hans Leidekker <hans(a)codeweavers.com> Date: Thu Feb 16 11:47:45 2023 +0100 winscard: Implement SCardCancel(). --- dlls/winscard/unixlib.c | 8 ++++++++ dlls/winscard/unixlib.h | 6 ++++++ dlls/winscard/winscard.c | 17 +++++++++++++---- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/dlls/winscard/unixlib.c b/dlls/winscard/unixlib.c index 98de78a6d2b..6aca020cd4e 100644 --- a/dlls/winscard/unixlib.c +++ b/dlls/winscard/unixlib.c @@ -35,6 +35,7 @@ LONG SCardEstablishContext( UINT64, const void *, const void *, UINT64 * ); LONG SCardReleaseContext( UINT64 ); LONG SCardIsValidContext( UINT64 ); LONG SCardGetStatusChange( UINT64, UINT64, struct reader_state *, UINT64 ); +LONG SCardCancel( UINT64 ); static NTSTATUS scard_establish_context( void *args ) { @@ -60,10 +61,17 @@ static NTSTATUS scard_get_status_change( void *args ) return SCardGetStatusChange( params->handle, params->timeout, params->states, params->count ); } +static NTSTATUS scard_cancel( void *args ) +{ + struct scard_cancel_params *params = args; + return SCardCancel( params->handle ); +} + const unixlib_entry_t __wine_unix_call_funcs[] = { scard_establish_context, scard_release_context, scard_is_valid_context, scard_get_status_change, + scard_cancel, }; diff --git a/dlls/winscard/unixlib.h b/dlls/winscard/unixlib.h index 0607596bf2c..c2151a7573e 100644 --- a/dlls/winscard/unixlib.h +++ b/dlls/winscard/unixlib.h @@ -54,10 +54,16 @@ struct scard_get_status_change_params UINT64 count; }; +struct scard_cancel_params +{ + UINT64 handle; +}; + enum winscard_funcs { unix_scard_establish_context, unix_scard_release_context, unix_scard_is_valid_context, unix_scard_get_status_change, + unix_scard_cancel, }; diff --git a/dlls/winscard/winscard.c b/dlls/winscard/winscard.c index 3fefff5f755..af822b8aef2 100644 --- a/dlls/winscard/winscard.c +++ b/dlls/winscard/winscard.c @@ -201,11 +201,20 @@ LONG WINAPI SCardListReadersW(SCARDCONTEXT context, const WCHAR *groups, WCHAR * return SCARD_E_NO_READERS_AVAILABLE; } -LONG WINAPI SCardCancel(SCARDCONTEXT context) +LONG WINAPI SCardCancel( SCARDCONTEXT context ) { - FIXME("(%Ix) stub\n", context); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return SCARD_F_INTERNAL_ERROR; + struct handle *handle = (struct handle *)context; + struct scard_cancel_params params; + LONG ret; + + TRACE( "%Ix\n", context ); + + if (!handle || handle->magic != CONTEXT_MAGIC) return ERROR_INVALID_HANDLE; + + params.handle = handle->unix_handle; + ret = UNIX_CALL( scard_cancel, ¶ms ); + TRACE( "returning %#lx\n", ret ); + return ret; } static LONG map_states_inA( const SCARD_READERSTATEA *src, struct reader_state *dst, DWORD count )
participants (1)
-
Alexandre Julliard