[Pcsclite-cvs-commit] PCSC/src winscard.c,1.33,1.34

rousseau@haydn.debian.org rousseau@haydn.debian.org


Update of /cvsroot/pcsclite/PCSC/src
In directory haydn:/tmp/cvs-serv12431

Modified Files:
	winscard.c 
Log Message:
rewrite the parts managing the protocol in SCardConnect() and
SCardReconnect() to use the new PHSetProtocol() prototype and simplify
the code


Index: winscard.c
===================================================================
RCS file: /cvsroot/pcsclite/PCSC/src/winscard.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- winscard.c	18 Jun 2004 14:37:28 -0000	1.33
+++ winscard.c	18 Jun 2004 14:48:58 -0000	1.34
@@ -103,23 +103,8 @@
 	LPDWORD pdwActiveProtocol)
 {
 	LONG rv;
-	PREADER_CONTEXT rContext;
-	UCHAR pucAtr[MAX_ATR_SIZE], ucAvailable;
-	DWORD dwAtrLength, dwState, dwStatus;
-	DWORD dwReaderLen, dwProtocol;
-
-	/*
-	 * Zero out everything
-	 */
-	rv = 0;
-	rContext = 0;
-	ucAvailable = 0;
-	dwAtrLength = 0;
-	dwState = 0;
-	dwStatus = 0;
-	dwReaderLen = 0;
-	dwProtocol = 0;
-	memset(pucAtr, 0x00, MAX_ATR_SIZE);
+	PREADER_CONTEXT rContext = NULL;
+	DWORD dwStatus;
 
 	/*
 	 * Check for NULL parameters
@@ -201,35 +186,26 @@
 	{
 		if (dwShareMode != SCARD_SHARE_DIRECT)
 		{
-			memcpy(pucAtr, rContext->readerState->cardAtr,
-				rContext->readerState->cardAtrLength);
-			dwAtrLength = rContext->readerState->cardAtrLength;
-			if (rContext->readerState->cardAtrLength > 0)
-				DebugXxd("Card ATR: ", rContext->readerState->cardAtr,
-					rContext->readerState->cardAtrLength);
+			UCHAR ucAvailable, ucDefault;
 
-			rContext->readerState->cardProtocol =
-				PHGetDefaultProtocol(pucAtr, dwAtrLength);
-			ucAvailable = PHGetAvailableProtocols(pucAtr, dwAtrLength);
+			ucDefault = PHGetDefaultProtocol(rContext->readerState->cardAtr,
+				rContext->readerState->cardAtrLength);
+			ucAvailable =
+				PHGetAvailableProtocols(rContext->readerState->cardAtr,
+						rContext->readerState->cardAtrLength);
 
 			/*
-			 * If it is set to any let it do any of the protocols
+			 * If it is set to ANY let it do any of the protocols
 			 */
 			if (dwPreferredProtocols & SCARD_PROTOCOL_ANY)
-			{
-				rContext->readerState->cardProtocol = PHSetProtocol(rContext,
-						ucAvailable, ucAvailable);
-			}
-			else
-			{
-				rContext->readerState->cardProtocol =
-					PHSetProtocol(rContext, dwPreferredProtocols,
-					ucAvailable);
-				if (rContext->readerState->cardProtocol == -1)
-				{
-					return SCARD_E_PROTO_MISMATCH;
-				}
-			}
+				dwPreferredProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
+
+			rContext->readerState->cardProtocol =
+				PHSetProtocol(rContext, dwPreferredProtocols,
+				ucAvailable, ucDefault);
+
+			if (rContext->readerState->cardProtocol == -1)
+				return SCARD_E_PROTO_MISMATCH;
 		}
 	}
 
@@ -312,21 +288,10 @@
 	LPDWORD pdwActiveProtocol)
 {
 	LONG rv;
-	PREADER_CONTEXT rContext;
-	UCHAR pucAtr[MAX_ATR_SIZE], ucAvailable;
-	DWORD dwAtrLength;
+	PREADER_CONTEXT rContext = NULL;
 
 	DebugLogA("Attempting reconnect to token.");
 
-	/*
-	 * Zero out everything
-	 */
-	rv = 0;
-	rContext = 0;
-	ucAvailable = 0;
-	dwAtrLength = 0;
-	memset(pucAtr, 0x00, MAX_ATR_SIZE);
-
 	if (hCard == 0)
 		return SCARD_E_INVALID_HANDLE;
 
@@ -484,44 +449,36 @@
 			 */
 		}
 
-	/*
-	 * Handle the dwActive/Preferred Protocols
-	 */
+	/*******************************************
+	 *
+	 * This section tries to decode the ATR
+	 * and set up which protocol to use
+	 *
+	 *******************************************/
 	if (dwPreferredProtocols & SCARD_PROTOCOL_RAW)
-	{
 		rContext->readerState->cardProtocol = -1;
-	}
 	else
 	{
 		if (dwShareMode != SCARD_SHARE_DIRECT)
 		{
-			dwAtrLength = rContext->readerState->cardAtrLength;
-			memcpy(pucAtr, rContext->readerState->cardAtr, dwAtrLength);
+			UCHAR ucAvailable, ucDefault;
 
-			rContext->readerState->cardProtocol =
-				PHGetDefaultProtocol(pucAtr, dwAtrLength);
-			ucAvailable = PHGetAvailableProtocols(pucAtr, dwAtrLength);
+			ucDefault = PHGetDefaultProtocol(rContext->readerState->cardAtr,
+				rContext->readerState->cardAtrLength);
+			ucAvailable =
+				PHGetAvailableProtocols(rContext->readerState->cardAtr,
+						rContext->readerState->cardAtrLength);
 
-			/*
-			 * If it is set to any let it do any of the protocols
-			 */
+			/* If it is set to ANY let it do any of the protocols */
 			if (dwPreferredProtocols & SCARD_PROTOCOL_ANY)
-			{
-				rContext->readerState->cardProtocol =
-					PHSetProtocol(rContext,
-					SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, ucAvailable);
-			}
-			else
-			{
-				rContext->readerState->cardProtocol =
-					PHSetProtocol(rContext, dwPreferredProtocols,
-					ucAvailable);
+				dwPreferredProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
 
-				if (rContext->readerState->cardProtocol == -1)
-				{
-					return SCARD_E_PROTO_MISMATCH;
-				}
-			}
+			rContext->readerState->cardProtocol =
+				PHSetProtocol(rContext, dwPreferredProtocols,
+				ucAvailable, ucDefault);
+
+			if (rContext->readerState->cardProtocol == -1)
+				return SCARD_E_PROTO_MISMATCH;
 		}
 	}