[Pcsclite-cvs-commit] r4864 - /trunk/PCSC/src/winscard.c

rousseau at users.alioth.debian.org rousseau at users.alioth.debian.org
Thu Apr 8 15:34:44 UTC 2010


Author: rousseau
Date: Thu Apr  8 15:34:42 2010
New Revision: 4864

URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=4864
Log:
SCardReconnect(): mimic the code from SCardDisconnect() regarding card
event state notifications (changed in revision 4862).

Modified:
    trunk/PCSC/src/winscard.c

Modified: trunk/PCSC/src/winscard.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/winscard.c?rev=4864&op=diff
==============================================================================
--- trunk/PCSC/src/winscard.c (original)
+++ trunk/PCSC/src/winscard.c Thu Apr  8 15:34:42 2010
@@ -568,6 +568,12 @@
 		dwInitialization == SCARD_UNPOWER_CARD)
 	{
 		DWORD dwAtrLen;
+
+		/*
+		 * Notify the card has been reset
+		 */
+		(void)RFSetReaderEventState(rContext, SCARD_RESET);
+
 		/*
 		 * Currently pcsc-lite keeps the card powered constantly
 		 */
@@ -591,87 +597,48 @@
 		rContext->readerState->cardProtocol = SCARD_PROTOCOL_UNDEFINED;
 
 		/*
-		 * Notify the card has been reset
-		 * Not doing this could result in deadlock
+		 * Set up the status bit masks on dwStatus
 		 */
-		rv = RFCheckReaderEventState(rContext, hCard);
-		switch(rv)
-		{
-			/* avoid deadlock */
-			case SCARD_W_RESET_CARD:
-				break;
-
-			case SCARD_W_REMOVED_CARD:
-				Log1(PCSC_LOG_ERROR, "card removed");
-				return SCARD_W_REMOVED_CARD;
-
-			/* invalid EventStatus */
-			case SCARD_E_INVALID_VALUE:
-				Log1(PCSC_LOG_ERROR, "invalid EventStatus");
-				return SCARD_F_INTERNAL_ERROR;
-
-			/* invalid hCard, but hCard was widely used some lines above :( */
-			case SCARD_E_INVALID_HANDLE:
-				Log1(PCSC_LOG_ERROR, "invalid handle");
-				return SCARD_F_INTERNAL_ERROR;
-
-			case SCARD_S_SUCCESS:
-				/*
-				 * Notify the card has been reset
-				 */
-				(void)RFSetReaderEventState(rContext, SCARD_RESET);
-
-				/*
-				 * Set up the status bit masks on dwStatus
-				 */
-				if (rv == SCARD_S_SUCCESS)
-				{
-					rContext->readerState->readerState |= SCARD_PRESENT;
-					rContext->readerState->readerState &= ~SCARD_ABSENT;
-					rContext->readerState->readerState |= SCARD_POWERED;
-					rContext->readerState->readerState |= SCARD_NEGOTIABLE;
-					rContext->readerState->readerState &= ~SCARD_SPECIFIC;
-					rContext->readerState->readerState &= ~SCARD_SWALLOWED;
-					rContext->readerState->readerState &= ~SCARD_UNKNOWN;
-				}
-				else
-				{
-					rContext->readerState->readerState |= SCARD_PRESENT;
-					rContext->readerState->readerState &= ~SCARD_ABSENT;
-					rContext->readerState->readerState |= SCARD_SWALLOWED;
-					rContext->readerState->readerState &= ~SCARD_POWERED;
-					rContext->readerState->readerState &= ~SCARD_NEGOTIABLE;
-					rContext->readerState->readerState &= ~SCARD_SPECIFIC;
-					rContext->readerState->readerState &= ~SCARD_UNKNOWN;
-					rContext->readerState->cardAtrLength = 0;
-				}
-
-				if (rContext->readerState->cardAtrLength > 0)
-				{
-					Log1(PCSC_LOG_DEBUG, "Reset complete.");
-					LogXxd(PCSC_LOG_DEBUG, "Card ATR: ",
-						rContext->readerState->cardAtr,
-						rContext->readerState->cardAtrLength);
-				}
-				else
-				{
-					DWORD dwStatus, dwAtrLen2;
-					UCHAR ucAtr[MAX_ATR_SIZE];
-
-					Log1(PCSC_LOG_ERROR, "Error resetting card.");
-					(void)IFDStatusICC(rContext, &dwStatus, ucAtr, &dwAtrLen2);
-					if (dwStatus & SCARD_PRESENT)
-						return SCARD_W_UNRESPONSIVE_CARD;
-					else
-						return SCARD_E_NO_SMARTCARD;
-				}
-				break;
-
-			default:
-				Log2(PCSC_LOG_ERROR,
-					"invalid retcode from RFCheckReaderEventState (%X)", rv);
-				return SCARD_F_INTERNAL_ERROR;
-				break;
+		if (rv == SCARD_S_SUCCESS)
+		{
+			rContext->readerState->readerState |= SCARD_PRESENT;
+			rContext->readerState->readerState &= ~SCARD_ABSENT;
+			rContext->readerState->readerState |= SCARD_POWERED;
+			rContext->readerState->readerState |= SCARD_NEGOTIABLE;
+			rContext->readerState->readerState &= ~SCARD_SPECIFIC;
+			rContext->readerState->readerState &= ~SCARD_SWALLOWED;
+			rContext->readerState->readerState &= ~SCARD_UNKNOWN;
+		}
+		else
+		{
+			rContext->readerState->readerState |= SCARD_PRESENT;
+			rContext->readerState->readerState &= ~SCARD_ABSENT;
+			rContext->readerState->readerState |= SCARD_SWALLOWED;
+			rContext->readerState->readerState &= ~SCARD_POWERED;
+			rContext->readerState->readerState &= ~SCARD_NEGOTIABLE;
+			rContext->readerState->readerState &= ~SCARD_SPECIFIC;
+			rContext->readerState->readerState &= ~SCARD_UNKNOWN;
+			rContext->readerState->cardAtrLength = 0;
+		}
+
+		if (rContext->readerState->cardAtrLength > 0)
+		{
+			Log1(PCSC_LOG_DEBUG, "Reset complete.");
+			LogXxd(PCSC_LOG_DEBUG, "Card ATR: ",
+				rContext->readerState->cardAtr,
+				rContext->readerState->cardAtrLength);
+		}
+		else
+		{
+			DWORD dwStatus, dwAtrLen2;
+			UCHAR ucAtr[MAX_ATR_SIZE];
+
+			Log1(PCSC_LOG_ERROR, "Error resetting card.");
+			(void)IFDStatusICC(rContext, &dwStatus, ucAtr, &dwAtrLen2);
+			if (dwStatus & SCARD_PRESENT)
+				return SCARD_W_UNRESPONSIVE_CARD;
+			else
+				return SCARD_E_NO_SMARTCARD;
 		}
 	}
 	else




More information about the Pcsclite-cvs-commit mailing list