[Pcsclite-cvs-commit] r6724 - trunk/PCSC/src/utils

ludovic.rousseau at free.fr ludovic.rousseau at free.fr
Mon Aug 12 12:42:02 UTC 2013


Author: rousseau
Date: 2013-08-12 12:42:01 +0000 (Mon, 12 Aug 2013)
New Revision: 6724

Modified:
   trunk/PCSC/src/utils/formaticc.c
Log:
Add more error code management


Modified: trunk/PCSC/src/utils/formaticc.c
===================================================================
--- trunk/PCSC/src/utils/formaticc.c	2013-08-12 09:44:43 UTC (rev 6723)
+++ trunk/PCSC/src/utils/formaticc.c	2013-08-12 12:42:01 UTC (rev 6724)
@@ -37,7 +37,7 @@
 	SCARD_IO_REQUEST sRecvPci;
 	SCARD_READERSTATE rgReaderStates[1];
 	DWORD dwSendLength, dwRecvLength, dwPref, dwReaders;
-	LPSTR mszReaders;
+	LPSTR mszReaders = NULL;
 	BYTE s[MAX_BUFFER_SIZE], r[MAX_BUFFER_SIZE];
 	LPCSTR mszGroups;
 	LONG rv;
@@ -102,9 +102,19 @@
 	}
 
 	mszGroups = NULL;
-	(void)SCardListReaders(hContext, mszGroups, NULL, &dwReaders);
+	rv = SCardListReaders(hContext, mszGroups, NULL, &dwReaders);
+	if (rv != SCARD_S_SUCCESS)
+	{
+		printf("SCardListReaders error line %d: %08X\n", __LINE__, rv);
+		goto releasecontext;
+	}
 	mszReaders = malloc(sizeof(char) * dwReaders);
-	(void)SCardListReaders(hContext, mszGroups, mszReaders, &dwReaders);
+	rv = SCardListReaders(hContext, mszGroups, mszReaders, &dwReaders);
+	if (rv != SCARD_S_SUCCESS)
+	{
+		printf("SCardListReaders error line %d: %08X\n", __LINE__, rv);
+		goto releasecontext;
+	}
 
 	/*
 	 * Have to understand the multi-string here
@@ -136,26 +146,32 @@
 	rgReaderStates[0].dwCurrentState = SCARD_STATE_EMPTY;
 
 	printf("Please insert a smart card\n");
-	(void)SCardGetStatusChange(hContext, INFINITE, rgReaderStates, 1);
+	rv  = SCardGetStatusChange(hContext, INFINITE, rgReaderStates, 1);
+	if (rv != SCARD_S_SUCCESS)
+	{
+		printf("SCardGetStatusChange error line %d: %08X\n", __LINE__, rv);
+		goto releasecontext;
+	}
+
 	rv = SCardConnect(hContext, &mszReaders[iList[iReader]],
 		SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,
 		&hCard, &dwPref);
-
 	if (rv != SCARD_S_SUCCESS)
 	{
-		(void)SCardReleaseContext(hContext);
-		printf("Error connecting to reader %ld\n", rv);
-		free(mszReaders);
-		(int)fclose(fp);
-		(int)fclose(fo);
-		return 1;
+		printf("SCardConnect error line %d: %08X\n", __LINE__, rv);
+		goto releasecontext;
 	}
 
 	/*
 	 * Now lets get some work done
 	 */
 
-	(void)SCardBeginTransaction(hCard);
+	rv = SCardBeginTransaction(hCard);
+	if (rv != SCARD_S_SUCCESS)
+	{
+		printf("SCardBeginTransaction error line %d: %08X\n", __LINE__, rv);
+		goto disconnect;
+	}
 
 	cnum = 0;
 
@@ -181,9 +197,7 @@
 			if (sscanf(line_ptr, "%x", &x) == 0)
 			{
 				printf("Corrupt APDU: %s\n", line);
-				(void)SCardDisconnect(hCard, SCARD_RESET_CARD);
-				(void)SCardReleaseContext(hContext);
-				free(mszReaders);
+				goto disconnect;
 				return 1;
 			}
 			s[i] = x;
@@ -217,10 +231,7 @@
 			else
 			{
 				printf("Invalid Protocol\n");
-				(void)SCardDisconnect(hCard, SCARD_RESET_CARD);
-				(void)SCardReleaseContext(hContext);
-				free(mszReaders);
-				return 1;
+				goto endtransaction;
 			}
 		}
 
@@ -238,16 +249,24 @@
 
 		if (rv == SCARD_W_RESET_CARD)
 		{
-			(void)SCardReconnect(hCard, SCARD_SHARE_SHARED,
+			rv = SCardReconnect(hCard, SCARD_SHARE_SHARED,
 				SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,
 				SCARD_RESET_CARD, &dwPref);
+			if (rv != SCARD_S_SUCCESS)
+			{
+				printf("SCardReconnect error line %d: %08X\n", __LINE__, rv);
+				goto endtransaction;
+			}
 		}
 
 	}
 	while (1);
 
+endtransaction:
 	(void)SCardEndTransaction(hCard, SCARD_LEAVE_CARD);
+disconnect:
 	(void)SCardDisconnect(hCard, SCARD_UNPOWER_CARD);
+releasecontext:
 	(void)SCardReleaseContext(hContext);
 	free(mszReaders);
 




More information about the Pcsclite-cvs-commit mailing list