Module: wine Branch: master Commit: 9d40ac4635989f76b16384f15f01220fdec4d51a URL: https://gitlab.winehq.org/wine/wine/-/commit/9d40ac4635989f76b16384f15f01220...
Author: Hans Leidekker hans@codeweavers.com Date: Thu Feb 16 10:27:22 2023 +0100
winscard: Implement SCardIsValidContext().
---
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 76f2d5cd60b..032b148af8f 100644 --- a/dlls/winscard/unixlib.c +++ b/dlls/winscard/unixlib.c @@ -33,6 +33,7 @@
LONG SCardEstablishContext( UINT64, const void *, const void *, UINT64 * ); LONG SCardReleaseContext( UINT64 ); +LONG SCardIsValidContext( UINT64 );
static NTSTATUS scard_establish_context( void *args ) { @@ -46,8 +47,15 @@ static NTSTATUS scard_release_context( void *args ) return SCardReleaseContext( params->handle ); }
+static NTSTATUS scard_is_valid_context( void *args ) +{ + struct scard_is_valid_context_params *params = args; + return SCardIsValidContext( params->handle ); +} + const unixlib_entry_t __wine_unix_call_funcs[] = { scard_establish_context, scard_release_context, + scard_is_valid_context, }; diff --git a/dlls/winscard/unixlib.h b/dlls/winscard/unixlib.h index 08b907f76fe..b8ba940f5b2 100644 --- a/dlls/winscard/unixlib.h +++ b/dlls/winscard/unixlib.h @@ -30,8 +30,14 @@ struct scard_release_context_params UINT64 handle; };
+struct scard_is_valid_context_params +{ + UINT64 handle; +}; + enum winscard_funcs { unix_scard_establish_context, unix_scard_release_context, + unix_scard_is_valid_context, }; diff --git a/dlls/winscard/winscard.c b/dlls/winscard/winscard.c index 0f7edb56c91..4f4cbcfed2f 100644 --- a/dlls/winscard/winscard.c +++ b/dlls/winscard/winscard.c @@ -94,11 +94,20 @@ LONG WINAPI SCardEstablishContext( DWORD scope, const void *reserved1, const voi return ret; }
-LONG WINAPI SCardIsValidContext(SCARDCONTEXT context) +LONG WINAPI SCardIsValidContext( 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_is_valid_context_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_is_valid_context, ¶ms ); + TRACE( "returning %#lx\n", ret ); + return ret; }
LONG WINAPI SCardListCardsA(SCARDCONTEXT hContext, LPCBYTE pbAtr, LPCGUID rgguidInterfaces, DWORD cguidInterfaceCount, LPSTR mszCards, LPDWORD pcchCards)