From ba11055d668008e1cab5c730147a2353cc1c1a1b Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Tue, 3 Mar 2026 10:15:56 +0100 Subject: [PATCH] [utils,smartcard] log all call failures Use GNU expression statement to log a call failure if the compiler supports that extension. --- libfreerdp/utils/smartcard_call.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/libfreerdp/utils/smartcard_call.c b/libfreerdp/utils/smartcard_call.c index fc656eb97..b171af06e 100644 --- a/libfreerdp/utils/smartcard_call.c +++ b/libfreerdp/utils/smartcard_call.c @@ -49,17 +49,30 @@ #if defined(WITH_SMARTCARD_EMULATE) #include -#define wrap(ctx, fkt, ...) \ +#define wrap_raw(ctx, fkt, ...) \ ctx->useEmulatedCard ? Emulate_##fkt(ctx->emulation, ##__VA_ARGS__) \ : ctx->pWinSCardApi->pfn##fkt(__VA_ARGS__) -#define wrap_ptr(ctx, fkt, ...) wrap(ctx, fkt, ##__VA_ARGS__) +#define wrap_ptr(ctx, fkt, ...) wrap_raw(ctx, fkt, ##__VA_ARGS__) #else -#define wrap(ctx, fkt, ...) \ +#define wrap_raw(ctx, fkt, ...) \ ctx->useEmulatedCard ? SCARD_F_INTERNAL_ERROR : ctx->pWinSCardApi->pfn##fkt(__VA_ARGS__) #define wrap_ptr(ctx, fkt, ...) \ ctx->useEmulatedCard ? nullptr : ctx->pWinSCardApi->pfn##fkt(__VA_ARGS__) #endif +#if defined(_WIN32) +#define wrap(ctx, fkt, ...) wrap_raw(ctx, fkt, ##__VA_ARGS__) +#else +#define wrap(ctx, fkt, ...) \ + __extension__({ \ + LONG defstatus = wrap_raw(ctx, fkt, ##__VA_ARGS__); \ + if (defstatus != SCARD_S_SUCCESS) \ + WLog_Print(ctx->log, WLOG_TRACE, "[" #fkt "] failed with %s", \ + SCardGetErrorString(defstatus)); \ + defstatus; \ + }) +#endif + struct s_scard_call_context { BOOL useEmulatedCard; @@ -1999,7 +2012,7 @@ void smartcard_call_context_free(scard_call_context* ctx) if (ctx->StartedEvent) { WINPR_ASSERT(ctx->useEmulatedCard || ctx->pWinSCardApi); - wrap(ctx, SCardReleaseStartedEvent); + wrap_raw(ctx, SCardReleaseStartedEvent); } if (ctx->useEmulatedCard)