From a3272093195434b876aafbc42b4ebf37688f5e7f Mon Sep 17 00:00:00 2001 From: aet Date: Sat, 5 Jan 2002 19:01:55 +0000 Subject: [PATCH] SCardGetStatusChange/rgReaderStates changes for compatibility with older and/or modified pcsc-lite releases. git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@135 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/libopensc/card.c | 3 ++- src/libopensc/internal.h | 6 ++++++ src/libopensc/sc-internal.h | 6 ++++++ src/libopensc/sc.c | 13 +++++++------ 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/libopensc/card.c b/src/libopensc/card.c index e7696b70..d19430fe 100644 --- a/src/libopensc/card.c +++ b/src/libopensc/card.c @@ -326,7 +326,8 @@ int sc_connect_card(struct sc_context *ctx, rgReaderStates[0].szReader = ctx->readers[reader]; rgReaderStates[0].dwCurrentState = SCARD_STATE_UNAWARE; - rv = SCardGetStatusChange(ctx->pcsc_ctx, 0, rgReaderStates, 1); + rgReaderStates[0].dwEventState = SCARD_STATE_UNAWARE; + rv = SCardGetStatusChange(ctx->pcsc_ctx, SC_STATUS_TIMEOUT, rgReaderStates, 1); if (rv != 0) { error(ctx, "SCardGetStatusChange failed: %s\n", pcsc_stringify_error(rv)); SC_FUNC_RETURN(ctx, 1, SC_ERROR_RESOURCE_MANAGER); /* FIXME */ diff --git a/src/libopensc/internal.h b/src/libopensc/internal.h index 8501233a..85928747 100644 --- a/src/libopensc/internal.h +++ b/src/libopensc/internal.h @@ -33,4 +33,10 @@ /* Internal use only */ int sc_sw_to_errorcode(struct sc_card *card, int sw1, int sw2); +/* Default timeout value for SCardGetStatusChange */ +#ifndef SC_CUSTOM_STATUS_TIMEOUT +#define SC_STATUS_TIMEOUT 0 +#else SC_STATUS_TIMEOUT SC_CUSTOM_STATUS_TIMEOUT +#endif + #endif diff --git a/src/libopensc/sc-internal.h b/src/libopensc/sc-internal.h index 8501233a..85928747 100644 --- a/src/libopensc/sc-internal.h +++ b/src/libopensc/sc-internal.h @@ -33,4 +33,10 @@ /* Internal use only */ int sc_sw_to_errorcode(struct sc_card *card, int sw1, int sw2); +/* Default timeout value for SCardGetStatusChange */ +#ifndef SC_CUSTOM_STATUS_TIMEOUT +#define SC_STATUS_TIMEOUT 0 +#else SC_STATUS_TIMEOUT SC_CUSTOM_STATUS_TIMEOUT +#endif + #endif diff --git a/src/libopensc/sc.c b/src/libopensc/sc.c index 71631d52..429ee18b 100644 --- a/src/libopensc/sc.c +++ b/src/libopensc/sc.c @@ -79,7 +79,8 @@ int sc_detect_card(struct sc_context *ctx, int reader) rgReaderStates[0].szReader = ctx->readers[reader]; rgReaderStates[0].dwCurrentState = SCARD_STATE_UNAWARE; - ret = SCardGetStatusChange(ctx->pcsc_ctx, 0, rgReaderStates, 1); + rgReaderStates[0].dwEventState = SCARD_STATE_UNAWARE; + ret = SCardGetStatusChange(ctx->pcsc_ctx, SC_STATUS_TIMEOUT, rgReaderStates, 1); if (ret != 0) { error(ctx, "SCardGetStatusChange failed: %s\n", pcsc_stringify_error(ret)); SC_FUNC_RETURN(ctx, 1, -1); /* FIXME */ @@ -110,17 +111,17 @@ int sc_wait_for_card(struct sc_context *ctx, int reader, int timeout) SC_FUNC_RETURN(ctx, 1, SC_ERROR_NO_READERS_FOUND); for (i = 0; i < ctx->reader_count; i++) { rgReaderStates[i].szReader = ctx->readers[i]; - rgReaderStates[i].dwCurrentState = - SCARD_STATE_EMPTY; + rgReaderStates[i].dwCurrentState = SCARD_STATE_UNAWARE; + rgReaderStates[i].dwEventState = SCARD_STATE_UNAWARE; } count = ctx->reader_count; } else { rgReaderStates[0].szReader = ctx->readers[reader]; - rgReaderStates[0].dwCurrentState = SCARD_STATE_EMPTY; + rgReaderStates[0].dwCurrentState = SCARD_STATE_UNAWARE; + rgReaderStates[0].dwEventState = SCARD_STATE_UNAWARE; count = 1; } - ret = SCardGetStatusChange(ctx->pcsc_ctx, timeout, rgReaderStates, - count); + ret = SCardGetStatusChange(ctx->pcsc_ctx, timeout, rgReaderStates, count); if (ret != 0) { error(ctx, "SCardGetStatusChange failed: %s\n", pcsc_stringify_error(ret)); SC_FUNC_RETURN(ctx, 1, -1);