[Pcsclite-cvs-commit] CVS PCSC/src
CVS User rousseau
ludovic.rousseau@free.fr
Fri, 03 Sep 2004 13:49:42 -0600
Update of /cvsroot/pcsclite/PCSC/src
In directory haydn:/tmp/cvs-serv8231/src
Modified Files:
winscard.c
Log Message:
SCardConnect()/SCardReconnect(): do not set
rContext->readerState->cardProtocol if PHSetProtocol() returns an error.
This will avoid having a protocol set to -2 (SET_PROTOCOL_PPS_FAILED)
--- /cvsroot/pcsclite/PCSC/src/winscard.c 2004/08/18 22:13:50 1.44
+++ /cvsroot/pcsclite/PCSC/src/winscard.c 2004/09/03 19:49:42 1.45
@@ -8,7 +8,7 @@
* David Corcoran <corcoran@linuxnet.com>
* Ludovic Rousseau <ludovic.rousseau@free.fr>
*
- * $Id: winscard.c,v 1.44 2004/08/18 22:13:50 rousseau Exp $
+ * $Id: winscard.c,v 1.45 2004/09/03 19:49:42 rousseau Exp $
*/
#include "config.h"
@@ -185,6 +185,7 @@
if (SCARD_PROTOCOL_UNSET == rContext->readerState->cardProtocol)
{
UCHAR ucAvailable, ucDefault;
+ int ret;
ucDefault = PHGetDefaultProtocol(rContext->readerState->cardAtr,
rContext->readerState->cardAtrLength);
@@ -198,15 +199,18 @@
if (dwPreferredProtocols & SCARD_PROTOCOL_ANY_OLD)
dwPreferredProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
- rContext->readerState->cardProtocol =
- PHSetProtocol(rContext, dwPreferredProtocols,
+ ret = PHSetProtocol(rContext, dwPreferredProtocols,
ucAvailable, ucDefault);
- if (SET_PROTOCOL_PPS_FAILED == rContext->readerState->cardProtocol)
+ /* keep cardProtocol = SCARD_PROTOCOL_UNSET in case of error */
+ if (SET_PROTOCOL_PPS_FAILED == ret)
return SCARD_W_UNRESPONSIVE_CARD;
- if (SET_PROTOCOL_WRONG_ARGUMENT == rContext->readerState->cardProtocol)
+ if (SET_PROTOCOL_WRONG_ARGUMENT == ret)
return SCARD_E_PROTO_MISMATCH;
+
+ /* use negociated protocol */
+ rContext->readerState->cardProtocol = ret;
}
else
{
@@ -484,6 +488,7 @@
if (SCARD_PROTOCOL_UNSET == rContext->readerState->cardProtocol)
{
UCHAR ucAvailable, ucDefault;
+ int ret;
ucDefault = PHGetDefaultProtocol(rContext->readerState->cardAtr,
rContext->readerState->cardAtrLength);
@@ -495,15 +500,18 @@
if (dwPreferredProtocols & SCARD_PROTOCOL_ANY_OLD)
dwPreferredProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
- rContext->readerState->cardProtocol =
- PHSetProtocol(rContext, dwPreferredProtocols,
+ ret = PHSetProtocol(rContext, dwPreferredProtocols,
ucAvailable, ucDefault);
- if (SET_PROTOCOL_PPS_FAILED == rContext->readerState->cardProtocol)
+ /* keep cardProtocol = SCARD_PROTOCOL_UNSET in case of error */
+ if (SET_PROTOCOL_PPS_FAILED == ret)
return SCARD_W_UNRESPONSIVE_CARD;
- if (SET_PROTOCOL_WRONG_ARGUMENT == rContext->readerState->cardProtocol)
+ if (SET_PROTOCOL_WRONG_ARGUMENT == ret)
return SCARD_E_PROTO_MISMATCH;
+
+ /* use negociated protocol */
+ rContext->readerState->cardProtocol = ret;
}
else
{