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

rousseau at users.alioth.debian.org rousseau at users.alioth.debian.org
Thu Aug 2 14:23:27 UTC 2012


Author: rousseau
Date: Thu Aug  2 14:23:26 2012
New Revision: 6397

URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=6397
Log:
Merge RFReaderInfoNamePort() into RFRemoveReader() since that is the
only user.
Also improve RFRemoveReader() to remove all the slots of a reader.

Closes [#313708] Multi-slot support is broken
https://alioth.debian.org/tracker/index.php?func=detail&aid=313708&group_id=30105&atid=410085

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=6397&op=diff
==============================================================================
--- trunk/PCSC/src/readerfactory.c (original)
+++ trunk/PCSC/src/readerfactory.c Thu Aug  2 14:23:26 2012
@@ -506,20 +506,29 @@
 
 LONG RFRemoveReader(const char *readerName, int port)
 {
-	LONG rv;
-	READER_CONTEXT * sContext;
+	char lpcStripReader[MAX_READERNAME];
+	int i;
 
 	if (readerName == NULL)
 		return SCARD_E_INVALID_VALUE;
 
-	rv = RFReaderInfoNamePort(port, readerName, &sContext);
-	if (SCARD_S_SUCCESS == rv)
-	{
-		/* first to derefence RFReaderInfoNamePort() */
-		UNREF_READER(sContext)
-
-		/* second to remove the reader */
-		UNREF_READER(sContext)
+	for (i = 0; i < PCSCLITE_MAX_READERS_CONTEXTS; i++)
+	{
+		if (sReadersContexts[i]->vHandle != 0)
+		{
+			strncpy(lpcStripReader,
+				sReadersContexts[i]->readerState->readerName,
+				sizeof(lpcStripReader));
+			lpcStripReader[strlen(lpcStripReader) - 6] = 0;
+
+			/* Compare only the significant part of the reader name */
+			if ((strncmp(readerName, lpcStripReader, MAX_READERNAME - sizeof(" 00 00")) == 0)
+				&& (port == sReadersContexts[i]->port))
+			{
+				/* remove the reader */
+				UNREF_READER(sReadersContexts[i])
+			}
+		}
 	}
 
 	return SCARD_S_SUCCESS;
@@ -736,40 +745,6 @@
 	}
 
 	return SCARD_E_UNKNOWN_READER;
-}
-
-LONG RFReaderInfoNamePort(int port, const char *readerName,
-	READER_CONTEXT * * sReader)
-{
-	char lpcStripReader[MAX_READERNAME];
-	int i;
-
-	for (i = 0; i < PCSCLITE_MAX_READERS_CONTEXTS; i++)
-	{
-		if (sReadersContexts[i]->vHandle != 0)
-		{
-			int tmplen;
-
-			strncpy(lpcStripReader,
-				sReadersContexts[i]->readerState->readerName,
-				sizeof(lpcStripReader));
-			tmplen = strlen(lpcStripReader);
-			lpcStripReader[tmplen - 6] = 0;
-
-			/* Compare only the significant part of the reader name */
-			if ((strncmp(readerName, lpcStripReader, MAX_READERNAME - sizeof(" 00 00")) == 0)
-				&& (port == sReadersContexts[i]->port))
-			{
-				/* Increase reference count */
-				REF_READER(sReadersContexts[i])
-
-				*sReader = sReadersContexts[i];
-				return SCARD_S_SUCCESS;
-			}
-		}
-	}
-
-	return SCARD_E_INVALID_VALUE;
 }
 
 LONG RFReaderInfoById(SCARDHANDLE hCard, READER_CONTEXT * * sReader)

Modified: trunk/PCSC/src/readerfactory.h
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/readerfactory.h?rev=6397&op=diff
==============================================================================
--- trunk/PCSC/src/readerfactory.h (original)
+++ trunk/PCSC/src/readerfactory.h Thu Aug  2 14:23:26 2012
@@ -130,7 +130,6 @@
 	LONG RFRemoveReader(const char *, int);
 	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(SCARDHANDLE, /*@out@*/ struct ReaderContext **);
 	LONG RFCheckSharing(SCARDHANDLE, READER_CONTEXT *);
 	LONG RFLockSharing(SCARDHANDLE, READER_CONTEXT *);




More information about the Pcsclite-cvs-commit mailing list