[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