[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
 			{