From: <lu...@us...> - 2009-01-13 09:17:46
|
Revision: 251 http://pyscard.svn.sourceforge.net/pyscard/?rev=251&view=rev Author: ludov Date: 2009-01-13 09:17:36 +0000 (Tue, 13 Jan 2009) Log Message: ----------- do not link against libpcsclite and dynamically get get pcsc_stringify_error() symbol (like the other winscard functions) Modified Paths: -------------- trunk/pyscard/src/setup.py trunk/pyscard/src/smartcard/scard/scard.i trunk/pyscard/src/smartcard/scard/winscarddll.c trunk/pyscard/src/smartcard/scard/winscarddll.h Modified: trunk/pyscard/src/setup.py =================================================================== --- trunk/pyscard/src/setup.py 2009-01-13 08:59:32 UTC (rev 250) +++ trunk/pyscard/src/setup.py 2009-01-13 09:17:36 UTC (rev 251) @@ -70,7 +70,7 @@ platform__cc_defines=[('PCSCLITE', '1')] platform_swig_opts=['-DPCSCLITE'] platform_sources=[] - platform_libraries=['pcsclite'] + platform_libraries=[] platform_include_dirs=['/usr/include/PCSC'] platform_extra_compile_args=[]#['-ggdb', '-O0'] platform_extra_link_args=[]#['-ggdb'] Modified: trunk/pyscard/src/smartcard/scard/scard.i =================================================================== --- trunk/pyscard/src/smartcard/scard/scard.i 2009-01-13 08:59:32 UTC (rev 250) +++ trunk/pyscard/src/smartcard/scard/scard.i 2009-01-13 09:17:36 UTC (rev 251) @@ -841,134 +841,6 @@ return SCARD_CTL_CODE(code); } -/////////////////////////////////////////////////////////////////////////////// -// some pcsclite versions (e.g. on Max OS X Tiger) have no pcsc_stringify -// this function was taken from pcsclite -// -char* _pcsc_stringify_error( SCARDRETCODE pcscError ) -{ - static char strError[75]; - - switch(pcscError ) - { - case SCARD_S_SUCCESS: - strncpy( strError, "Command successful.", sizeof( strError ) ); - break; - case SCARD_E_CANCELLED: - strncpy( strError, "Command cancelled.", sizeof( strError ) ); - break; - case SCARD_E_CANT_DISPOSE: - strncpy( strError, "Cannot dispose handle.", sizeof( strError ) ); - break; - case SCARD_E_INSUFFICIENT_BUFFER: - strncpy( strError, "Insufficient buffer.", sizeof( strError ) ); - break; - case SCARD_E_INVALID_ATR: - strncpy( strError, "Invalid ATR.", sizeof( strError ) ); - break; - case SCARD_E_INVALID_HANDLE: - strncpy( strError, "Invalid handle.", sizeof( strError ) ); - break; - case SCARD_E_INVALID_PARAMETER: - strncpy( strError, "Invalid parameter given.", sizeof( strError ) ); - break; - case SCARD_E_INVALID_TARGET: - strncpy( strError, "Invalid target given.", sizeof( strError ) ); - break; - case SCARD_E_INVALID_VALUE: - strncpy( strError, "Invalid value given.", sizeof( strError ) ); - break; - case SCARD_E_NO_MEMORY: - strncpy( strError, "Not enough memory.", sizeof( strError ) ); - break; - case SCARD_F_COMM_ERROR: - strncpy( strError, "RPC transport error.", sizeof( strError ) ); - break; - case SCARD_F_INTERNAL_ERROR: - strncpy( strError, "Internal error.", sizeof( strError ) ); - break; - case SCARD_F_UNKNOWN_ERROR: - strncpy( strError, "Unknown error.", sizeof( strError ) ); - break; - case SCARD_F_WAITED_TOO_LONG: - strncpy( strError, "Waited too long.", sizeof( strError ) ); - break; - case SCARD_E_UNKNOWN_READER: - strncpy( strError, "Unknown reader specified.", sizeof( strError ) ); - break; - case SCARD_E_TIMEOUT: - strncpy( strError, "Command timeout.", sizeof( strError ) ); - break; - case SCARD_E_SHARING_VIOLATION: - strncpy( strError, "Sharing violation.", sizeof( strError ) ); - break; - case SCARD_E_NO_SMARTCARD: - strncpy( strError, "No smart card inserted.", sizeof( strError ) ); - break; - case SCARD_E_UNKNOWN_CARD: - strncpy( strError, "Unknown card.", sizeof( strError ) ); - break; - case SCARD_E_PROTO_MISMATCH: - strncpy( strError, "Card protocol mismatch.", sizeof( strError ) ); - break; - case SCARD_E_NOT_READY: - strncpy( strError, "Subsystem not ready.", sizeof( strError ) ); - break; - case SCARD_E_SYSTEM_CANCELLED: - strncpy( strError, "System cancelled.", sizeof( strError ) ); - break; - case SCARD_E_NOT_TRANSACTED: - strncpy( strError, "Transaction failed.", sizeof( strError ) ); - break; - case SCARD_E_READER_UNAVAILABLE: - strncpy( strError, "Reader is unavailable.", sizeof( strError ) ); - break; - case SCARD_W_UNSUPPORTED_CARD: - strncpy( strError, "Card is not supported.", sizeof( strError ) ); - break; - case SCARD_W_UNRESPONSIVE_CARD: - strncpy( strError, "Card is unresponsive.", sizeof( strError ) ); - break; - case SCARD_W_UNPOWERED_CARD: - strncpy( strError, "Card is unpowered.", sizeof( strError ) ); - break; - case SCARD_W_RESET_CARD: - strncpy( strError, "Card was reset.", sizeof( strError ) ); - break; - case SCARD_W_REMOVED_CARD: - strncpy( strError, "Card was removed.", sizeof( strError ) ); - break; - case SCARD_E_UNSUPPORTED_FEATURE: - strncpy( strError, "Feature not supported.", sizeof( strError ) ); - break; - case SCARD_E_PCI_TOO_SMALL: - strncpy( strError, "PCI struct too small.", sizeof( strError ) ); - break; - case SCARD_E_READER_UNSUPPORTED: - strncpy( strError, "Reader is unsupported.", sizeof( strError ) ); - break; - case SCARD_E_DUPLICATE_READER: - strncpy( strError, "Reader already exists.", sizeof( strError ) ); - break; - case SCARD_E_CARD_UNSUPPORTED: - strncpy( strError, "Card is unsupported.", sizeof( strError ) ); - break; - case SCARD_E_NO_SERVICE: - strncpy( strError, "Service not available.", sizeof( strError ) ); - break; - case SCARD_E_SERVICE_STOPPED: - strncpy( strError, "Service was stopped.", sizeof( strError ) ); - break; - default: - snprintf(strError, sizeof(strError)-1, "Unkown error: %ld, 0x%08lx", (long)pcscError, (long unsigned int)pcscError); - }; - - // zero terminates string - strError[sizeof(strError)-1] = '\0'; - - return strError; -} - ERRORSTRING* _GetErrorMessage( long lErrCode ) { #ifdef WIN32 @@ -1002,16 +874,7 @@ return ppszError; #endif // WIN32 #ifdef PCSCLITE - #ifdef __APPLE__ - #ifdef __TIGER__ - return (ERRORSTRING*)_pcsc_stringify_error( lErrCode ); - #endif - #ifdef __LEOPARD__ - return (ERRORSTRING*)_pcsc_stringify_error( lErrCode ); - #endif - #else - return (ERRORSTRING*)pcsc_stringify_error( lErrCode ); - #endif + return (ERRORSTRING*)myPcscStringifyError( lErrCode ); #endif // PCSCLITE } Modified: trunk/pyscard/src/smartcard/scard/winscarddll.c =================================================================== --- trunk/pyscard/src/smartcard/scard/winscarddll.c 2009-01-13 08:59:32 UTC (rev 250) +++ trunk/pyscard/src/smartcard/scard/winscarddll.c 2009-01-13 09:17:36 UTC (rev 251) @@ -27,6 +27,7 @@ #ifdef PCSCLITE #include <dlfcn.h> + #include <string.h> #endif // PCSCLITE #ifndef NULL @@ -293,6 +294,136 @@ } #endif // __TIGER__ +#ifdef PCSCLITE +/////////////////////////////////////////////////////////////////////////////// +// some pcsclite versions (e.g. on Max OS X Tiger) have no pcsc_stringify +// this function was taken from pcsclite +// +char* _defaultPCSCSTRINGIFYERROR( SCARDRETCODE pcscError ) +{ + static char strError[75]; + + switch(pcscError ) + { + case SCARD_S_SUCCESS: + strncpy( strError, "Command successful.", sizeof( strError ) ); + break; + case SCARD_E_CANCELLED: + strncpy( strError, "Command cancelled.", sizeof( strError ) ); + break; + case SCARD_E_CANT_DISPOSE: + strncpy( strError, "Cannot dispose handle.", sizeof( strError ) ); + break; + case SCARD_E_INSUFFICIENT_BUFFER: + strncpy( strError, "Insufficient buffer.", sizeof( strError ) ); + break; + case SCARD_E_INVALID_ATR: + strncpy( strError, "Invalid ATR.", sizeof( strError ) ); + break; + case SCARD_E_INVALID_HANDLE: + strncpy( strError, "Invalid handle.", sizeof( strError ) ); + break; + case SCARD_E_INVALID_PARAMETER: + strncpy( strError, "Invalid parameter given.", sizeof( strError ) ); + break; + case SCARD_E_INVALID_TARGET: + strncpy( strError, "Invalid target given.", sizeof( strError ) ); + break; + case SCARD_E_INVALID_VALUE: + strncpy( strError, "Invalid value given.", sizeof( strError ) ); + break; + case SCARD_E_NO_MEMORY: + strncpy( strError, "Not enough memory.", sizeof( strError ) ); + break; + case SCARD_F_COMM_ERROR: + strncpy( strError, "RPC transport error.", sizeof( strError ) ); + break; + case SCARD_F_INTERNAL_ERROR: + strncpy( strError, "Internal error.", sizeof( strError ) ); + break; + case SCARD_F_UNKNOWN_ERROR: + strncpy( strError, "Unknown error.", sizeof( strError ) ); + break; + case SCARD_F_WAITED_TOO_LONG: + strncpy( strError, "Waited too long.", sizeof( strError ) ); + break; + case SCARD_E_UNKNOWN_READER: + strncpy( strError, "Unknown reader specified.", sizeof( strError ) ); + break; + case SCARD_E_TIMEOUT: + strncpy( strError, "Command timeout.", sizeof( strError ) ); + break; + case SCARD_E_SHARING_VIOLATION: + strncpy( strError, "Sharing violation.", sizeof( strError ) ); + break; + case SCARD_E_NO_SMARTCARD: + strncpy( strError, "No smart card inserted.", sizeof( strError ) ); + break; + case SCARD_E_UNKNOWN_CARD: + strncpy( strError, "Unknown card.", sizeof( strError ) ); + break; + case SCARD_E_PROTO_MISMATCH: + strncpy( strError, "Card protocol mismatch.", sizeof( strError ) ); + break; + case SCARD_E_NOT_READY: + strncpy( strError, "Subsystem not ready.", sizeof( strError ) ); + break; + case SCARD_E_SYSTEM_CANCELLED: + strncpy( strError, "System cancelled.", sizeof( strError ) ); + break; + case SCARD_E_NOT_TRANSACTED: + strncpy( strError, "Transaction failed.", sizeof( strError ) ); + break; + case SCARD_E_READER_UNAVAILABLE: + strncpy( strError, "Reader is unavailable.", sizeof( strError ) ); + break; + case SCARD_W_UNSUPPORTED_CARD: + strncpy( strError, "Card is not supported.", sizeof( strError ) ); + break; + case SCARD_W_UNRESPONSIVE_CARD: + strncpy( strError, "Card is unresponsive.", sizeof( strError ) ); + break; + case SCARD_W_UNPOWERED_CARD: + strncpy( strError, "Card is unpowered.", sizeof( strError ) ); + break; + case SCARD_W_RESET_CARD: + strncpy( strError, "Card was reset.", sizeof( strError ) ); + break; + case SCARD_W_REMOVED_CARD: + strncpy( strError, "Card was removed.", sizeof( strError ) ); + break; + case SCARD_E_UNSUPPORTED_FEATURE: + strncpy( strError, "Feature not supported.", sizeof( strError ) ); + break; + case SCARD_E_PCI_TOO_SMALL: + strncpy( strError, "PCI struct too small.", sizeof( strError ) ); + break; + case SCARD_E_READER_UNSUPPORTED: + strncpy( strError, "Reader is unsupported.", sizeof( strError ) ); + break; + case SCARD_E_DUPLICATE_READER: + strncpy( strError, "Reader already exists.", sizeof( strError ) ); + break; + case SCARD_E_CARD_UNSUPPORTED: + strncpy( strError, "Card is unsupported.", sizeof( strError ) ); + break; + case SCARD_E_NO_SERVICE: + strncpy( strError, "Service not available.", sizeof( strError ) ); + break; + case SCARD_E_SERVICE_STOPPED: + strncpy( strError, "Service was stopped.", sizeof( strError ) ); + break; + default: + snprintf(strError, sizeof(strError)-1, "Unkown error: %ld, 0x%08lx", (long)pcscError, (long unsigned int)pcscError); + }; + + // zero terminates string + strError[sizeof(strError)-1] = '\0'; + + return strError; +} +#endif + WINSCARDAPI SCARDRETCODE WINAPI _defaultSCARDBEGINTRANSACTION( IN SCARDHANDLE hCard) @@ -449,6 +580,7 @@ SCARDRELEASECONTEXT mySCardReleaseContext = _defaultSCARDRELEASECONTEXT; SCARDSTATUSA mySCardStatusA = _defaultSCARDSTATUSA; SCARDTRANSMIT mySCardTransmit = _defaultSCARDTRANSMIT; +PCSCSTRINGIFYERROR myPcscStringifyError = _defaultPCSCSTRINGIFYERROR; unsigned long myg_prgSCardT0Pci=0L; @@ -561,6 +693,7 @@ GETPROCADDRESS( SCARDRELEASECONTEXT , SCardReleaseContext , SCardReleaseContext ); GETPROCADDRESS( SCARDSTATUSA , SCardStatusA , SCardStatus ); GETPROCADDRESS( SCARDTRANSMIT , SCardTransmit , SCardTransmit ); + SILENTGETPROCADDRESS( PCSCSTRINGIFYERROR , PcscStringifyError , pcsc_stringify_error ); #ifndef __APPLE__ GETPROCADDRESS( SCARDCONTROL, SCardControl, SCardControl ); Modified: trunk/pyscard/src/smartcard/scard/winscarddll.h =================================================================== --- trunk/pyscard/src/smartcard/scard/winscarddll.h 2009-01-13 08:59:32 UTC (rev 250) +++ trunk/pyscard/src/smartcard/scard/winscarddll.h 2009-01-13 09:17:36 UTC (rev 251) @@ -341,6 +341,14 @@ OUT LPBYTE pbRecvBuffer, IN OUT SCARDDWORDARG* pcbRecvLength); +#ifdef PCSCLITE +typedef WINSCARDAPI char* +(WINAPI *PCSCSTRINGIFYERROR)( + IN SCARDRETCODE pcscError); + +extern PCSCSTRINGIFYERROR myPcscStringifyError; +#endif + extern SCARDBEGINTRANSACTION mySCardBeginTransaction; extern SCARDCANCEL mySCardCancel; extern SCARDCANCELTRANSACTION mySCardCancelTransaction; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |