Module: wine Branch: master Commit: 4295b90ce15560823205e3f4e53e1d83ab4d8536 URL: https://gitlab.winehq.org/wine/wine/-/commit/4295b90ce15560823205e3f4e53e1d8...
Author: Hans Leidekker hans@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 )