[Pcsclite-cvs-commit] r6316 - in /trunk/PCSC/src: readerfactory.c readerfactory.h

rousseau at users.alioth.debian.org rousseau at users.alioth.debian.org
Tue Jun 5 08:21:40 UTC 2012


Author: rousseau
Date: Tue Jun  5 08:21:39 2012
New Revision: 6316

URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=6316
Log:
Use handlesList to find a hCard -> reader link

hCard handles are stored in the handlesList list of readers. The use of
dwIdentity just duplicate the information and is no more needed.

The algorithm is the same as in RFFindReaderHandle()

Modified:
    trunk/PCSC/src/readerfactory.c
    trunk/PCSC/src/readerfactory.h

Modified: trunk/PCSC/src/readerfactory.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/readerfactory.c?rev=6316&op=diff
==============================================================================
--- trunk/PCSC/src/readerfactory.c (original)
+++ trunk/PCSC/src/readerfactory.c Tue Jun  5 08:21:39 2012
@@ -712,20 +712,24 @@
 	return SCARD_E_INVALID_VALUE;
 }
 
-LONG RFReaderInfoById(DWORD dwIdentity, READER_CONTEXT * * sReader)
+LONG RFReaderInfoById(SCARDHANDLE hCard, READER_CONTEXT * * sReader)
 {
 	int i;
 
-	/* Strip off the lower nibble and get the identity */
-	dwIdentity = dwIdentity >> IDENTITY_SHIFT;
-	dwIdentity = dwIdentity << IDENTITY_SHIFT;
-
 	for (i = 0; i < PCSCLITE_MAX_READERS_CONTEXTS; i++)
 	{
-		if (dwIdentity == sReadersContexts[i]->dwIdentity)
-		{
-			*sReader = sReadersContexts[i];
-			return SCARD_S_SUCCESS;
+		if (sReadersContexts[i]->vHandle != 0)
+		{
+			RDR_CLIHANDLES * currentHandle;
+			(void)pthread_mutex_lock(&sReadersContexts[i]->handlesList_lock);
+			currentHandle = list_seek(&sReadersContexts[i]->handlesList,
+				&hCard);
+			(void)pthread_mutex_unlock(&sReadersContexts[i]->handlesList_lock);
+			if (currentHandle != NULL)
+			{
+				*sReader = sReadersContexts[i];
+				return SCARD_S_SUCCESS;
+			}
 		}
 	}
 

Modified: trunk/PCSC/src/readerfactory.h
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/readerfactory.h?rev=6316&op=diff
==============================================================================
--- trunk/PCSC/src/readerfactory.h (original)
+++ trunk/PCSC/src/readerfactory.h Tue Jun  5 08:21:39 2012
@@ -124,7 +124,7 @@
 	LONG RFSetReaderName(READER_CONTEXT *, const char *, const char *, int);
 	LONG RFReaderInfo(const char *, /*@out@*/ struct ReaderContext **);
 	LONG RFReaderInfoNamePort(int, const char *, /*@out@*/ struct ReaderContext **);
-	LONG RFReaderInfoById(DWORD, /*@out@*/ struct ReaderContext **);
+	LONG RFReaderInfoById(SCARDHANDLE, /*@out@*/ struct ReaderContext **);
 	LONG RFCheckSharing(SCARDHANDLE, READER_CONTEXT *);
 	LONG RFLockSharing(SCARDHANDLE, READER_CONTEXT *);
 	LONG RFUnlockSharing(SCARDHANDLE, READER_CONTEXT *);




More information about the Pcsclite-cvs-commit mailing list