[Pcsclite-cvs-commit] r5440 - /trunk/PCSC/src/winscard_msg.c

rousseau at users.alioth.debian.org rousseau at users.alioth.debian.org
Sat Dec 11 15:41:37 UTC 2010


Author: rousseau
Date: Sat Dec 11 15:41:35 2010
New Revision: 5440

URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=5440
Log:
Use LONG instead of int to store PC/SC return codes like SCARD_E_*

The problem comes from sign extenstion from int to LONG
int rv = SCARD_E_TIMEOUT; /* 0x8010000A */
is (sign) extended into a LONG = 0xFFFFFFFF8010000A

So the line in winscard_clnt.c
  if (SCARD_E_TIMEOUT == rv)
is never true on a 64-bits system because rv has been extended from int
to LONG. The comparison is then between 0x8010000A and 0xFFFFFFFF8010000A

Modified:
    trunk/PCSC/src/winscard_msg.c

Modified: trunk/PCSC/src/winscard_msg.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/winscard_msg.c?rev=5440&op=diff
==============================================================================
--- trunk/PCSC/src/winscard_msg.c (original)
+++ trunk/PCSC/src/winscard_msg.c Sat Dec 11 15:41:35 2010
@@ -162,7 +162,7 @@
 	char *buffer = buffer_void;
 
 	/* default is success */
-	int retval = SCARD_S_SUCCESS;
+	LONG retval = SCARD_S_SUCCESS;
 
 	/* record the time when we started */
 	struct timeval start;
@@ -282,7 +282,7 @@
 	uint64_t size, void *data_void)
 {
 	struct rxHeader header;
-	int ret;
+	LONG ret;
 
 	/* header */
 	header.command = command;
@@ -320,7 +320,7 @@
 	char *buffer = buffer_void;
 
 	/* default is success */
-	int retval = SCARD_S_SUCCESS;
+	LONG retval = SCARD_S_SUCCESS;
 
 	/* how many bytes remains to be written */
 	size_t remaining = buffer_size;
@@ -418,7 +418,7 @@
 	char *buffer = buffer_void;
 
 	/* default is success */
-	int retval = SCARD_S_SUCCESS;
+	LONG retval = SCARD_S_SUCCESS;
 
 	/* how many bytes we must read */
 	size_t remaining = buffer_size;




More information about the Pcsclite-cvs-commit mailing list