<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>pcsc-lite: readerfactory.c File Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.6.2-20100208 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul> </div> <div class="navpath"><a class="el" href="dir_c68a5dfdca54003c765e303a18006edb.html">src</a> </div> </div> <div class="contents"> <h1>readerfactory.c File Reference</h1> <p>This keeps track of a list of currently available reader structures. <a href="#_details">More...</a></p> <code>#include "config.h"</code><br/> <code>#include <stdio.h></code><br/> <code>#include <stdlib.h></code><br/> <code>#include <string.h></code><br/> <code>#include <unistd.h></code><br/> <code>#include <sys/types.h></code><br/> <code>#include <sys/stat.h></code><br/> <code>#include <errno.h></code><br/> <code>#include <fcntl.h></code><br/> <code>#include "misc.h"</code><br/> <code>#include "<a class="el" href="pcscd_8h_source.html">pcscd.h</a>"</code><br/> <code>#include "<a class="el" href="ifdhandler_8h_source.html">ifdhandler.h</a>"</code><br/> <code>#include "<a class="el" href="debuglog_8h_source.html">debuglog.h</a>"</code><br/> <code>#include "<a class="el" href="thread__generic_8h_source.html">thread_generic.h</a>"</code><br/> <code>#include "<a class="el" href="readerfactory_8h_source.html">readerfactory.h</a>"</code><br/> <code>#include "<a class="el" href="dyn__generic_8h_source.html">dyn_generic.h</a>"</code><br/> <code>#include "<a class="el" href="sys__generic_8h_source.html">sys_generic.h</a>"</code><br/> <code>#include "<a class="el" href="eventhandler_8h_source.html">eventhandler.h</a>"</code><br/> <code>#include "<a class="el" href="ifdwrapper_8h_source.html">ifdwrapper.h</a>"</code><br/> <code>#include "<a class="el" href="hotplug_8h_source.html">hotplug.h</a>"</code><br/> <code>#include "<a class="el" href="strlcpycat_8h_source.html">strlcpycat.h</a>"</code><br/> <code>#include "configfile.h"</code><br/> <code>#include "utils.h"</code><br/> <div class="dynheader"> Include dependency graph for readerfactory.c:</div> <div class="dynsection"> </div> <p><a href="readerfactory_8c_source.html">Go to the source code of this file.</a></p> <table border="0" cellpadding="0" cellspacing="0"> <tr><td colspan="2"><h2>Defines</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a137cdb9c3d0df9656c1ee9a77023de27"></a><!-- doxytag: member="readerfactory.c::IDENTITY_SHIFT" ref="a137cdb9c3d0df9656c1ee9a77023de27" args="" --> #define </td><td class="memItemRight" valign="bottom"><b>IDENTITY_SHIFT</b> 16</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>GET_ADDRESS_OPTIONALv1</b>(field, function, code)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>GET_ADDRESSv1</b>(field, function)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>GET_ADDRESS_OPTIONALv2</b>(s, code)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>GET_ADDRESSv2</b>(s)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>GET_ADDRESS_OPTIONALv3</b>(s, code)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>GET_ADDRESSv3</b>(s)</td></tr> <tr><td colspan="2"><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8239600ddcef21cd27f1d19ba215ebac"></a><!-- doxytag: member="readerfactory.c::RFAllocateReaderSpace" ref="a8239600ddcef21cd27f1d19ba215ebac" args="(void)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFAllocateReaderSpace</b> (void)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad5ef5304759ba17d15865959d2f4e918"></a><!-- doxytag: member="readerfactory.c::RFAddReader" ref="ad5ef5304759ba17d15865959d2f4e918" args="(LPSTR lpcReader, DWORD dwPort, LPSTR lpcLibrary, LPSTR lpcDevice)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFAddReader</b> (LPSTR lpcReader, DWORD dwPort, LPSTR lpcLibrary, LPSTR lpcDevice)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af9dcce2ee730614c2310a5e796a1dc73"></a><!-- doxytag: member="readerfactory.c::RFRemoveReader" ref="af9dcce2ee730614c2310a5e796a1dc73" args="(LPSTR lpcReader, DWORD dwPort)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFRemoveReader</b> (LPSTR lpcReader, DWORD dwPort)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c7ea5b3269714c197530fb02beb7a24"></a><!-- doxytag: member="readerfactory.c::RFSetReaderName" ref="a7c7ea5b3269714c197530fb02beb7a24" args="(PREADER_CONTEXT rContext, LPSTR readerName, LPSTR libraryName, DWORD dwPort, DWORD dwSlot)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFSetReaderName</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext, LPSTR readerName, LPSTR libraryName, DWORD dwPort, DWORD dwSlot)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf275d0a451132f4313407f8e9cdb4d1"></a><!-- doxytag: member="readerfactory.c::RFReaderInfo" ref="abf275d0a451132f4313407f8e9cdb4d1" args="(LPSTR lpcReader, PREADER_CONTEXT *sReader)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFReaderInfo</b> (LPSTR lpcReader, <a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> *sReader)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15114544e6307c698cb10d5b1f11dbcd"></a><!-- doxytag: member="readerfactory.c::RFReaderInfoNamePort" ref="a15114544e6307c698cb10d5b1f11dbcd" args="(DWORD dwPort, LPSTR lpcReader, PREADER_CONTEXT *sReader)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFReaderInfoNamePort</b> (DWORD dwPort, LPSTR lpcReader, <a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> *sReader)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae8d5b48a93c82a1db00e91f706097ee"></a><!-- doxytag: member="readerfactory.c::RFReaderInfoById" ref="aae8d5b48a93c82a1db00e91f706097ee" args="(DWORD dwIdentity, PREADER_CONTEXT *sReader)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFReaderInfoById</b> (DWORD dwIdentity, <a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> *sReader)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c3fc9acb888087fdff0ed743f7a9b3b"></a><!-- doxytag: member="readerfactory.c::RFLoadReader" ref="a8c3fc9acb888087fdff0ed743f7a9b3b" args="(PREADER_CONTEXT rContext)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFLoadReader</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef47c78b8ac05be5bcd635ddb02870fa"></a><!-- doxytag: member="readerfactory.c::RFBindFunctions" ref="aef47c78b8ac05be5bcd635ddb02870fa" args="(PREADER_CONTEXT rContext)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFBindFunctions</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d7f15dc49df91a035a83f4aa25d17a0"></a><!-- doxytag: member="readerfactory.c::RFUnBindFunctions" ref="a4d7f15dc49df91a035a83f4aa25d17a0" args="(PREADER_CONTEXT rContext)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnBindFunctions</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af86202b0e9ef4d9b9d32b5cc1863c729"></a><!-- doxytag: member="readerfactory.c::RFUnloadReader" ref="af86202b0e9ef4d9b9d32b5cc1863c729" args="(PREADER_CONTEXT rContext)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnloadReader</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae65a357fd8e15e67ab7a4dbe9f4dd5fa"></a><!-- doxytag: member="readerfactory.c::RFCheckSharing" ref="ae65a357fd8e15e67ab7a4dbe9f4dd5fa" args="(DWORD hCard)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFCheckSharing</b> (DWORD hCard)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab05cf600b49d72f8b9809e689586b1dc"></a><!-- doxytag: member="readerfactory.c::RFLockSharing" ref="ab05cf600b49d72f8b9809e689586b1dc" args="(DWORD hCard)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFLockSharing</b> (DWORD hCard)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac45df146515dea039ed842ecaa6b3478"></a><!-- doxytag: member="readerfactory.c::RFUnlockSharing" ref="ac45df146515dea039ed842ecaa6b3478" args="(DWORD hCard)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnlockSharing</b> (DWORD hCard)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8393dc0f91c9fae299719a16ceb08968"></a><!-- doxytag: member="readerfactory.c::RFUnlockAllSharing" ref="a8393dc0f91c9fae299719a16ceb08968" args="(DWORD hCard)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnlockAllSharing</b> (DWORD hCard)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa89c02df46be7dcec74f19d24d9565fa"></a><!-- doxytag: member="readerfactory.c::RFUnblockContext" ref="aa89c02df46be7dcec74f19d24d9565fa" args="(SCARDCONTEXT hContext)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnblockContext</b> (<a class="el" href="pcsclite_8h.html#a3524142a16d7185916422baf6bb7883f">SCARDCONTEXT</a> hContext)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f70e4fa23d7207e1dab9a5954ed5163"></a><!-- doxytag: member="readerfactory.c::RFUnblockReader" ref="a8f70e4fa23d7207e1dab9a5954ed5163" args="(PREADER_CONTEXT rContext)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnblockReader</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab02d0f094646b74171c3d571cbde0cb6"></a><!-- doxytag: member="readerfactory.c::RFInitializeReader" ref="ab02d0f094646b74171c3d571cbde0cb6" args="(PREADER_CONTEXT rContext)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFInitializeReader</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a6ee733379ed77800b01189221d0f73"></a><!-- doxytag: member="readerfactory.c::RFUnInitializeReader" ref="a4a6ee733379ed77800b01189221d0f73" args="(PREADER_CONTEXT rContext)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnInitializeReader</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe10105d4097812cf40a9d7989438992"></a><!-- doxytag: member="readerfactory.c::RFCreateReaderHandle" ref="abe10105d4097812cf40a9d7989438992" args="(PREADER_CONTEXT rContext)" --> <a class="el" href="pcsclite_8h.html#a0ef8f5baf9ee6c07dbdc7644c641d0a9">SCARDHANDLE</a> </td><td class="memItemRight" valign="bottom"><b>RFCreateReaderHandle</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2fb3cf4b9648c3a78f6f5a2bf4b3edb0"></a><!-- doxytag: member="readerfactory.c::RFFindReaderHandle" ref="a2fb3cf4b9648c3a78f6f5a2bf4b3edb0" args="(SCARDHANDLE hCard)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFFindReaderHandle</b> (<a class="el" href="pcsclite_8h.html#a0ef8f5baf9ee6c07dbdc7644c641d0a9">SCARDHANDLE</a> hCard)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42c38f85d751e52b5c967571c7e61c34"></a><!-- doxytag: member="readerfactory.c::RFDestroyReaderHandle" ref="a42c38f85d751e52b5c967571c7e61c34" args="(SCARDHANDLE hCard)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFDestroyReaderHandle</b> (<a class="el" href="pcsclite_8h.html#a0ef8f5baf9ee6c07dbdc7644c641d0a9">SCARDHANDLE</a> hCard)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0b3dc0be7443e9ce567c5f558b42c503"></a><!-- doxytag: member="readerfactory.c::RFAddReaderHandle" ref="a0b3dc0be7443e9ce567c5f558b42c503" args="(PREADER_CONTEXT rContext, SCARDHANDLE hCard)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFAddReaderHandle</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext, <a class="el" href="pcsclite_8h.html#a0ef8f5baf9ee6c07dbdc7644c641d0a9">SCARDHANDLE</a> hCard)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad25eb77f17d1f3161f10f0ffcb2b515c"></a><!-- doxytag: member="readerfactory.c::RFRemoveReaderHandle" ref="ad25eb77f17d1f3161f10f0ffcb2b515c" args="(PREADER_CONTEXT rContext, SCARDHANDLE hCard)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFRemoveReaderHandle</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext, <a class="el" href="pcsclite_8h.html#a0ef8f5baf9ee6c07dbdc7644c641d0a9">SCARDHANDLE</a> hCard)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28e2a666537bf7be4416662cbaf994b4"></a><!-- doxytag: member="readerfactory.c::RFSetReaderEventState" ref="a28e2a666537bf7be4416662cbaf994b4" args="(PREADER_CONTEXT rContext, DWORD dwEvent)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFSetReaderEventState</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext, DWORD dwEvent)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aada03af7a2a3e951b473c7f2fb23dcef"></a><!-- doxytag: member="readerfactory.c::RFCheckReaderEventState" ref="aada03af7a2a3e951b473c7f2fb23dcef" args="(PREADER_CONTEXT rContext, SCARDHANDLE hCard)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFCheckReaderEventState</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext, <a class="el" href="pcsclite_8h.html#a0ef8f5baf9ee6c07dbdc7644c641d0a9">SCARDHANDLE</a> hCard)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a98f692e832becbc3828c6051df7435"></a><!-- doxytag: member="readerfactory.c::RFClearReaderEventState" ref="a1a98f692e832becbc3828c6051df7435" args="(PREADER_CONTEXT rContext, SCARDHANDLE hCard)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFClearReaderEventState</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext, <a class="el" href="pcsclite_8h.html#a0ef8f5baf9ee6c07dbdc7644c641d0a9">SCARDHANDLE</a> hCard)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a05dd5bf93b9eca3b97b842ec112c6a2a"></a><!-- doxytag: member="readerfactory.c::RFCheckReaderStatus" ref="a05dd5bf93b9eca3b97b842ec112c6a2a" args="(PREADER_CONTEXT rContext)" --> LONG </td><td class="memItemRight" valign="bottom"><b>RFCheckReaderStatus</b> (<a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> rContext)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a876adaf96c93fd94c21238dc2fc47efe"></a><!-- doxytag: member="readerfactory.c::RFCleanupReaders" ref="a876adaf96c93fd94c21238dc2fc47efe" args="(int shouldExit)" --> void </td><td class="memItemRight" valign="bottom"><b>RFCleanupReaders</b> (int shouldExit)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0564fde3fdd7213a370987426ff9eff"></a><!-- doxytag: member="readerfactory.c::RFStartSerialReaders" ref="ab0564fde3fdd7213a370987426ff9eff" args="(const char *readerconf)" --> int </td><td class="memItemRight" valign="bottom"><b>RFStartSerialReaders</b> (const char *readerconf)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5a2bc67ad73da7007d4f50ab42c2bd7c"></a><!-- doxytag: member="readerfactory.c::RFReCheckReaderConf" ref="a5a2bc67ad73da7007d4f50ab42c2bd7c" args="(void)" --> void </td><td class="memItemRight" valign="bottom"><b>RFReCheckReaderConf</b> (void)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5109da9a113fc314ba949fcf393badf9"></a><!-- doxytag: member="readerfactory.c::RFSuspendAllReaders" ref="a5109da9a113fc314ba949fcf393badf9" args="(void)" --> void </td><td class="memItemRight" valign="bottom"><b>RFSuspendAllReaders</b> (void)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed9b1bd17aef474bfbd797c4f4b3b0da"></a><!-- doxytag: member="readerfactory.c::RFAwakeAllReaders" ref="aed9b1bd17aef474bfbd797c4f4b3b0da" args="(void)" --> void </td><td class="memItemRight" valign="bottom"><b>RFAwakeAllReaders</b> (void)</td></tr> <tr><td colspan="2"><h2>Variables</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d3e16a4b6d6eefd59d32c964289fd61"></a><!-- doxytag: member="readerfactory.c::sReadersContexts" ref="a3d3e16a4b6d6eefd59d32c964289fd61" args="[PCSCLITE_MAX_READERS_CONTEXTS]" --> static <a class="el" href="structReaderContext.html">PREADER_CONTEXT</a> </td><td class="memItemRight" valign="bottom"><b>sReadersContexts</b> [PCSCLITE_MAX_READERS_CONTEXTS]</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5afe29bc3ccda13a034ebd2ab10a55dd"></a><!-- doxytag: member="readerfactory.c::dwNumReadersContexts" ref="a5afe29bc3ccda13a034ebd2ab10a55dd" args="" --> static DWORD </td><td class="memItemRight" valign="bottom"><b>dwNumReadersContexts</b> = 0</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03135df28942a113d83a06cdabf96682"></a><!-- doxytag: member="readerfactory.c::ConfigFile" ref="a03135df28942a113d83a06cdabf96682" args="" --> static char * </td><td class="memItemRight" valign="bottom"><b>ConfigFile</b> = NULL</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea46b4423a11ee4e883701d34fc5c13a"></a><!-- doxytag: member="readerfactory.c::ConfigFileCRC" ref="aea46b4423a11ee4e883701d34fc5c13a" args="" --> static int </td><td class="memItemRight" valign="bottom"><b>ConfigFileCRC</b> = 0</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3021ec4d1e3f9a3a463999ac75d240ce"></a><!-- doxytag: member="readerfactory.c::LockMutex" ref="a3021ec4d1e3f9a3a463999ac75d240ce" args="" --> static PCSCLITE_MUTEX </td><td class="memItemRight" valign="bottom"><b>LockMutex</b> = PTHREAD_MUTEX_INITIALIZER</td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <p>This keeps track of a list of currently available reader structures. </p> <p>Definition in file <a class="el" href="readerfactory_8c_source.html">readerfactory.c</a>.</p> <hr/><h2>Define Documentation</h2> <a class="anchor" id="adca7a4aeaa0925e96e47fdda7eca36ee"></a><!-- doxytag: member="readerfactory.c::GET_ADDRESS_OPTIONALv1" ref="adca7a4aeaa0925e96e47fdda7eca36ee" args="(field, function, code)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GET_ADDRESS_OPTIONALv1</td> <td>(</td> <td class="paramtype">field, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">function, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">code </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">{ \ <span class="keywordtype">void</span> *f1 = NULL; \ <span class="keywordflow">if</span> (<a class="code" href="pcsclite_8h.html#a4a3c56f69570971d366642a563b34a75" title="error codes from http://msdn.microsoft.com/en-us/library/aa924526.aspx">SCARD_S_SUCCESS</a> != DYN_GetAddress(rContext->vHandle, &f1, <span class="stringliteral">"IFD_"</span> #function)) \ { \ code \ } \ rContext->psFunctions.psFunctions_v1.pvf ## field = f1; \ } </pre></div> </div> </div> <a class="anchor" id="a0d6eb3d175a2147e3112e19433aaa918"></a><!-- doxytag: member="readerfactory.c::GET_ADDRESS_OPTIONALv2" ref="a0d6eb3d175a2147e3112e19433aaa918" args="(s, code)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GET_ADDRESS_OPTIONALv2</td> <td>(</td> <td class="paramtype">s, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">code </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">{ \ <span class="keywordtype">void</span> *f1 = NULL; \ <span class="keywordflow">if</span> (<a class="code" href="pcsclite_8h.html#a4a3c56f69570971d366642a563b34a75" title="error codes from http://msdn.microsoft.com/en-us/library/aa924526.aspx">SCARD_S_SUCCESS</a> != DYN_GetAddress(rContext->vHandle, &f1, <span class="stringliteral">"IFDH"</span> #s)) \ { \ code \ } \ rContext->psFunctions.psFunctions_v2.pvf ## s = f1; \ } </pre></div> </div> </div> <a class="anchor" id="a898b8972d7ce943f56d5b0ff12eae869"></a><!-- doxytag: member="readerfactory.c::GET_ADDRESS_OPTIONALv3" ref="a898b8972d7ce943f56d5b0ff12eae869" args="(s, code)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GET_ADDRESS_OPTIONALv3</td> <td>(</td> <td class="paramtype">s, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">code </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">{ \ <span class="keywordtype">void</span> *f1 = NULL; \ <span class="keywordflow">if</span> (<a class="code" href="pcsclite_8h.html#a4a3c56f69570971d366642a563b34a75" title="error codes from http://msdn.microsoft.com/en-us/library/aa924526.aspx">SCARD_S_SUCCESS</a> != DYN_GetAddress(rContext->vHandle, &f1, <span class="stringliteral">"IFDH"</span> #s)) \ { \ code \ } \ rContext->psFunctions.psFunctions_v3.pvf ## s = f1; \ } </pre></div> </div> </div> <a class="anchor" id="a57e78c67363c59f085f57acc73e637a2"></a><!-- doxytag: member="readerfactory.c::GET_ADDRESSv1" ref="a57e78c67363c59f085f57acc73e637a2" args="(field, function)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GET_ADDRESSv1</td> <td>(</td> <td class="paramtype">field, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">function </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">GET_ADDRESS_OPTIONALv1(field, function, \ Log1(PCSC_LOG_CRITICAL, <span class="stringliteral">"IFDHandler functions missing: "</span> #function ); \ exit(1); ) </pre></div> </div> </div> <a class="anchor" id="a290956b7c41ae583d36b48772a959381"></a><!-- doxytag: member="readerfactory.c::GET_ADDRESSv2" ref="a290956b7c41ae583d36b48772a959381" args="(s)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GET_ADDRESSv2</td> <td>(</td> <td class="paramtype">s </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">GET_ADDRESS_OPTIONALv2(s, \ Log1(PCSC_LOG_CRITICAL, <span class="stringliteral">"IFDHandler functions missing: "</span> #s ); \ exit(1); ) </pre></div> </div> </div> <a class="anchor" id="a6d647157ee6bd2695a72843b69c87e87"></a><!-- doxytag: member="readerfactory.c::GET_ADDRESSv3" ref="a6d647157ee6bd2695a72843b69c87e87" args="(s)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GET_ADDRESSv3</td> <td>(</td> <td class="paramtype">s </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">GET_ADDRESS_OPTIONALv3(s, \ Log1(PCSC_LOG_CRITICAL, <span class="stringliteral">"IFDHandler functions missing: "</span> #s ); \ exit(1); ) </pre></div> </div> </div> </div> <hr class="footer"/><address style="text-align: right;"><small>Generated by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2-20100208 </small></address> </body> </html>