[Pcsclite-cvs-commit] r2472 - trunk/Drivers/ccid/src
Ludovic Rousseau
rousseau at alioth.debian.org
Thu Mar 8 13:53:18 CET 2007
Author: rousseau
Date: 2007-03-08 12:53:18 +0000 (Thu, 08 Mar 2007)
New Revision: 2472
Modified:
trunk/Drivers/ccid/src/commands.c
trunk/Drivers/ccid/src/ifdhandler.c
Log:
In case of error set the received length to 0 in IFDHTransmitToICC() and
IFDHControl() instead of in all the lower level commands
Modified: trunk/Drivers/ccid/src/commands.c
===================================================================
--- trunk/Drivers/ccid/src/commands.c 2007-03-08 12:46:23 UTC (rev 2471)
+++ trunk/Drivers/ccid/src/commands.c 2007-03-08 12:53:18 UTC (rev 2472)
@@ -267,21 +267,18 @@
if (TxLength > 19+CMD_BUF_SIZE) /* command too large? */
{
DEBUG_INFO3("Command too long: %d > %d", TxLength, 19+CMD_BUF_SIZE);
- *RxLength = 0;
return IFD_NOT_SUPPORTED;
}
if (TxLength < 19+4 /* 4 = APDU size */) /* command too short? */
{
DEBUG_INFO3("Command too short: %d < %d", TxLength, 19+4);
- *RxLength = 0;
return IFD_NOT_SUPPORTED;
}
if (dw2i(TxBuffer, 15) + 19 != TxLength) /* ulDataLength field coherency */
{
DEBUG_INFO3("Wrong lengths: %d %d", dw2i(TxBuffer, 15) + 19, TxLength);
- *RxLength = 0;
return IFD_NOT_SUPPORTED;
}
@@ -387,10 +384,7 @@
ccid_descriptor -> readTimeout = max(30, TxBuffer[0]+10); /* at least 30 seconds */
if (WritePort(reader_index, a, cmd) != STATUS_SUCCESS)
- {
- *RxLength = 0;
return IFD_COMMUNICATION_ERROR;
- }
ret = CCID_Receive(reader_index, RxLength, RxBuffer, NULL);
@@ -451,21 +445,18 @@
if (TxLength > 24+CMD_BUF_SIZE) /* command too large? */
{
DEBUG_INFO3("Command too long: %d > %d", TxLength, 24+CMD_BUF_SIZE);
- *RxLength = 0;
return IFD_NOT_SUPPORTED;
}
if (TxLength < 24+4 /* 4 = APDU size */) /* command too short? */
{
DEBUG_INFO3("Command too short: %d < %d", TxLength, 24+4);
- *RxLength = 0;
return IFD_NOT_SUPPORTED;
}
if (dw2i(TxBuffer, 20) + 24 != TxLength) /* ulDataLength field coherency */
{
DEBUG_INFO3("Wrong lengths: %d %d", dw2i(TxBuffer, 20) + 24, TxLength);
- *RxLength = 0;
return IFD_NOT_SUPPORTED;
}
@@ -473,7 +464,6 @@
if (TxBuffer[11] > 3)
{
DEBUG_INFO2("Wrong bNumberMessage: %d", TxBuffer[11]);
- *RxLength = 0;
return IFD_NOT_SUPPORTED;
}
@@ -614,10 +604,7 @@
ccid_descriptor -> readTimeout = max(30, TxBuffer[0]+10); /* at least 30 seconds */
if (WritePort(reader_index, a, cmd) != STATUS_SUCCESS)
- {
- *RxLength = 0;
return IFD_COMMUNICATION_ERROR;
- }
ret = CCID_Receive(reader_index, RxLength, RxBuffer, NULL);
@@ -990,8 +977,6 @@
case CCID_CLASS_EXTENDED_APDU:
return_value = CmdXfrBlockAPDU_extended(reader_index,
tx_length, tx_buffer, rx_length, rx_buffer);
- if (return_value != IFD_SUCCESS)
- *rx_length = 0;
break;
case CCID_CLASS_CHARACTER:
@@ -1007,7 +992,6 @@
break;
default:
- *rx_length = 0;
return_value = IFD_COMMUNICATION_ERROR;
}
@@ -1202,7 +1186,6 @@
ret = ReadPort(reader_index, &length, cmd);
if (ret != STATUS_SUCCESS)
{
- *rx_length = 0;
if (STATUS_NO_SUCH_DEVICE == ret)
return IFD_NO_SUCH_DEVICE;
return IFD_COMMUNICATION_ERROR;
@@ -1211,7 +1194,6 @@
if (length < STATUS_OFFSET+1)
{
DEBUG_CRITICAL2("Not enough data received: %d bytes", length);
- *rx_length = 0;
return IFD_COMMUNICATION_ERROR;
}
@@ -1237,11 +1219,9 @@
return IFD_SUCCESS;
case 0xFD: /* Parity error during exchange */
- *rx_length = 0; /* nothing received */
return IFD_PARITY_ERROR;
default:
- *rx_length = 0; /* nothing received */
return IFD_COMMUNICATION_ERROR;
}
}
@@ -1433,7 +1413,6 @@
{
DEBUG_CRITICAL3("Command too long (%d bytes) for max: %d bytes",
tx_length, ccid_descriptor->dwMaxCCIDMessageLength-10);
- *rx_length = 0;
return IFD_COMMUNICATION_ERROR;
}
@@ -1442,16 +1421,12 @@
{
DEBUG_CRITICAL3("Command too long (%d bytes) for max: %d bytes",
tx_length, CMD_BUF_SIZE);
- *rx_length = 0;
return IFD_COMMUNICATION_ERROR;
}
return_value = CCID_Transmit(reader_index, tx_length, tx_buffer, 0, 0);
if (return_value != IFD_SUCCESS)
- {
- *rx_length = 0;
return return_value;
- }
return CCID_Receive(reader_index, rx_length, rx_buffer, NULL);
} /* CmdXfrBlockTPDU_T0 */
@@ -1889,10 +1864,7 @@
tx_buffer, tx_length, rx_buffer, *rx_length);
if (ret < 0)
- {
- *rx_length = 0;
return_value = IFD_COMMUNICATION_ERROR;
- }
else
*rx_length = ret;
Modified: trunk/Drivers/ccid/src/ifdhandler.c
===================================================================
--- trunk/Drivers/ccid/src/ifdhandler.c 2007-03-08 12:46:23 UTC (rev 2471)
+++ trunk/Drivers/ccid/src/ifdhandler.c 2007-03-08 12:53:18 UTC (rev 2472)
@@ -953,7 +953,10 @@
rx_length = *RxLength;
return_value = CmdXfrBlock(reader_index, TxLength, TxBuffer, &rx_length,
RxBuffer, SendPci.Protocol);
- *RxLength = rx_length;
+ if (IFD_SUCCESS == return_value)
+ *RxLength = rx_length;
+ else
+ *RxLength = 0;
return return_value;
} /* IFDHTransmitToICC */
@@ -1068,6 +1071,9 @@
*pdwBytesReturned = iBytesReturned;
}
+ if (IFD_SUCCESS != return_value)
+ *pdwBytesReturned = 0;
+
DEBUG_INFO_XXD("Control RxBuffer: ", RxBuffer, *pdwBytesReturned);
return return_value;
} /* IFDHControl */
More information about the Pcsclite-cvs-commit
mailing list