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:
parent
0a77426aa0
commit
a327209319
|
@ -326,7 +326,8 @@ int sc_connect_card(struct sc_context *ctx,
|
||||||
|
|
||||||
rgReaderStates[0].szReader = ctx->readers[reader];
|
rgReaderStates[0].szReader = ctx->readers[reader];
|
||||||
rgReaderStates[0].dwCurrentState = SCARD_STATE_UNAWARE;
|
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) {
|
if (rv != 0) {
|
||||||
error(ctx, "SCardGetStatusChange failed: %s\n", pcsc_stringify_error(rv));
|
error(ctx, "SCardGetStatusChange failed: %s\n", pcsc_stringify_error(rv));
|
||||||
SC_FUNC_RETURN(ctx, 1, SC_ERROR_RESOURCE_MANAGER); /* FIXME */
|
SC_FUNC_RETURN(ctx, 1, SC_ERROR_RESOURCE_MANAGER); /* FIXME */
|
||||||
|
|
|
@ -33,4 +33,10 @@
|
||||||
/* Internal use only */
|
/* Internal use only */
|
||||||
int sc_sw_to_errorcode(struct sc_card *card, int sw1, int sw2);
|
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
|
#endif
|
||||||
|
|
|
@ -33,4 +33,10 @@
|
||||||
/* Internal use only */
|
/* Internal use only */
|
||||||
int sc_sw_to_errorcode(struct sc_card *card, int sw1, int sw2);
|
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
|
#endif
|
||||||
|
|
|
@ -79,7 +79,8 @@ int sc_detect_card(struct sc_context *ctx, int reader)
|
||||||
|
|
||||||
rgReaderStates[0].szReader = ctx->readers[reader];
|
rgReaderStates[0].szReader = ctx->readers[reader];
|
||||||
rgReaderStates[0].dwCurrentState = SCARD_STATE_UNAWARE;
|
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) {
|
if (ret != 0) {
|
||||||
error(ctx, "SCardGetStatusChange failed: %s\n", pcsc_stringify_error(ret));
|
error(ctx, "SCardGetStatusChange failed: %s\n", pcsc_stringify_error(ret));
|
||||||
SC_FUNC_RETURN(ctx, 1, -1); /* FIXME */
|
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);
|
SC_FUNC_RETURN(ctx, 1, SC_ERROR_NO_READERS_FOUND);
|
||||||
for (i = 0; i < ctx->reader_count; i++) {
|
for (i = 0; i < ctx->reader_count; i++) {
|
||||||
rgReaderStates[i].szReader = ctx->readers[i];
|
rgReaderStates[i].szReader = ctx->readers[i];
|
||||||
rgReaderStates[i].dwCurrentState =
|
rgReaderStates[i].dwCurrentState = SCARD_STATE_UNAWARE;
|
||||||
SCARD_STATE_EMPTY;
|
rgReaderStates[i].dwEventState = SCARD_STATE_UNAWARE;
|
||||||
}
|
}
|
||||||
count = ctx->reader_count;
|
count = ctx->reader_count;
|
||||||
} else {
|
} else {
|
||||||
rgReaderStates[0].szReader = ctx->readers[reader];
|
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;
|
count = 1;
|
||||||
}
|
}
|
||||||
ret = SCardGetStatusChange(ctx->pcsc_ctx, timeout, rgReaderStates,
|
ret = SCardGetStatusChange(ctx->pcsc_ctx, timeout, rgReaderStates, count);
|
||||||
count);
|
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
error(ctx, "SCardGetStatusChange failed: %s\n", pcsc_stringify_error(ret));
|
error(ctx, "SCardGetStatusChange failed: %s\n", pcsc_stringify_error(ret));
|
||||||
SC_FUNC_RETURN(ctx, 1, -1);
|
SC_FUNC_RETURN(ctx, 1, -1);
|
||||||
|
|
Loading…
Reference in New Issue