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
This commit is contained in:
aet 2002-01-05 19:01:55 +00:00
parent 0a77426aa0
commit a327209319
4 changed files with 21 additions and 7 deletions

View File

@ -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 */

View File

@ -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

View File

@ -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

View File

@ -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);