[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