pcsc-lite
1.8.3
|
00001 /* 00002 * MUSCLE SmartCard Development ( http://www.linuxnet.com ) 00003 * 00004 * Copyright (C) 1999-2002 00005 * David Corcoran <corcoran@linuxnet.com> 00006 * Copyright (C) 2006-2009 00007 * Ludovic Rousseau <ludovic.rousseau@free.fr> 00008 * 00009 * This file is dual licenced: 00010 * - BSD-like, see the COPYING file 00011 * - GNU Lesser General Licence 2.1 or (at your option) any later version. 00012 * 00013 * $Id: error.c 5964 2011-09-24 09:22:24Z rousseau $ 00014 */ 00015 00021 #include <stdio.h> 00022 #include <sys/types.h> 00023 00024 #include "config.h" 00025 #include "misc.h" 00026 #include "pcsclite.h" 00027 #include "strlcpycat.h" 00028 00029 #ifdef NO_LOG 00030 PCSC_API char* pcsc_stringify_error(const long pcscError) 00031 { 00032 static char strError[] = "0x12345678"; 00033 00034 snprintf(strError, sizeof(strError), "0x%08lX", pcscError); 00035 00036 return strError; 00037 } 00038 #else 00039 00056 PCSC_API char* pcsc_stringify_error(const LONG pcscError) 00057 { 00058 static char strError[75]; 00059 00060 switch (pcscError) 00061 { 00062 case SCARD_S_SUCCESS: 00063 (void)strlcpy(strError, "Command successful.", sizeof(strError)); 00064 break; 00065 case SCARD_F_INTERNAL_ERROR: 00066 (void)strlcpy(strError, "Internal error.", sizeof(strError)); 00067 break; 00068 case SCARD_E_CANCELLED: 00069 (void)strlcpy(strError, "Command cancelled.", sizeof(strError)); 00070 break; 00071 case SCARD_E_INVALID_HANDLE: 00072 (void)strlcpy(strError, "Invalid handle.", sizeof(strError)); 00073 break; 00074 case SCARD_E_INVALID_PARAMETER: 00075 (void)strlcpy(strError, "Invalid parameter given.", sizeof(strError)); 00076 break; 00077 case SCARD_E_INVALID_TARGET: 00078 (void)strlcpy(strError, "Invalid target given.", sizeof(strError)); 00079 break; 00080 case SCARD_E_NO_MEMORY: 00081 (void)strlcpy(strError, "Not enough memory.", sizeof(strError)); 00082 break; 00083 case SCARD_F_WAITED_TOO_LONG: 00084 (void)strlcpy(strError, "Waited too long.", sizeof(strError)); 00085 break; 00086 case SCARD_E_INSUFFICIENT_BUFFER: 00087 (void)strlcpy(strError, "Insufficient buffer.", sizeof(strError)); 00088 break; 00089 case SCARD_E_UNKNOWN_READER: 00090 (void)strlcpy(strError, "Unknown reader specified.", sizeof(strError)); 00091 break; 00092 case SCARD_E_TIMEOUT: 00093 (void)strlcpy(strError, "Command timeout.", sizeof(strError)); 00094 break; 00095 case SCARD_E_SHARING_VIOLATION: 00096 (void)strlcpy(strError, "Sharing violation.", sizeof(strError)); 00097 break; 00098 case SCARD_E_NO_SMARTCARD: 00099 (void)strlcpy(strError, "No smart card inserted.", sizeof(strError)); 00100 break; 00101 case SCARD_E_UNKNOWN_CARD: 00102 (void)strlcpy(strError, "Unknown card.", sizeof(strError)); 00103 break; 00104 case SCARD_E_CANT_DISPOSE: 00105 (void)strlcpy(strError, "Cannot dispose handle.", sizeof(strError)); 00106 break; 00107 case SCARD_E_PROTO_MISMATCH: 00108 (void)strlcpy(strError, "Card protocol mismatch.", sizeof(strError)); 00109 break; 00110 case SCARD_E_NOT_READY: 00111 (void)strlcpy(strError, "Subsystem not ready.", sizeof(strError)); 00112 break; 00113 case SCARD_E_INVALID_VALUE: 00114 (void)strlcpy(strError, "Invalid value given.", sizeof(strError)); 00115 break; 00116 case SCARD_E_SYSTEM_CANCELLED: 00117 (void)strlcpy(strError, "System cancelled.", sizeof(strError)); 00118 break; 00119 case SCARD_F_COMM_ERROR: 00120 (void)strlcpy(strError, "RPC transport error.", sizeof(strError)); 00121 break; 00122 case SCARD_F_UNKNOWN_ERROR: 00123 (void)strlcpy(strError, "Unknown error.", sizeof(strError)); 00124 break; 00125 case SCARD_E_INVALID_ATR: 00126 (void)strlcpy(strError, "Invalid ATR.", sizeof(strError)); 00127 break; 00128 case SCARD_E_NOT_TRANSACTED: 00129 (void)strlcpy(strError, "Transaction failed.", sizeof(strError)); 00130 break; 00131 case SCARD_E_READER_UNAVAILABLE: 00132 (void)strlcpy(strError, "Reader is unavailable.", sizeof(strError)); 00133 break; 00134 /* case SCARD_P_SHUTDOWN: */ 00135 case SCARD_E_PCI_TOO_SMALL: 00136 (void)strlcpy(strError, "PCI struct too small.", sizeof(strError)); 00137 break; 00138 case SCARD_E_READER_UNSUPPORTED: 00139 (void)strlcpy(strError, "Reader is unsupported.", sizeof(strError)); 00140 break; 00141 case SCARD_E_DUPLICATE_READER: 00142 (void)strlcpy(strError, "Reader already exists.", sizeof(strError)); 00143 break; 00144 case SCARD_E_CARD_UNSUPPORTED: 00145 (void)strlcpy(strError, "Card is unsupported.", sizeof(strError)); 00146 break; 00147 case SCARD_E_NO_SERVICE: 00148 (void)strlcpy(strError, "Service not available.", sizeof(strError)); 00149 break; 00150 case SCARD_E_SERVICE_STOPPED: 00151 (void)strlcpy(strError, "Service was stopped.", sizeof(strError)); 00152 break; 00153 /* case SCARD_E_UNEXPECTED: */ 00154 /* case SCARD_E_ICC_CREATEORDER: */ 00155 /* case SCARD_E_UNSUPPORTED_FEATURE: */ 00156 /* case SCARD_E_DIR_NOT_FOUND: */ 00157 /* case SCARD_E_NO_DIR: */ 00158 /* case SCARD_E_NO_FILE: */ 00159 /* case SCARD_E_NO_ACCESS: */ 00160 /* case SCARD_E_WRITE_TOO_MANY: */ 00161 /* case SCARD_E_BAD_SEEK: */ 00162 /* case SCARD_E_INVALID_CHV: */ 00163 /* case SCARD_E_UNKNOWN_RES_MNG: */ 00164 /* case SCARD_E_NO_SUCH_CERTIFICATE: */ 00165 /* case SCARD_E_CERTIFICATE_UNAVAILABLE: */ 00166 case SCARD_E_NO_READERS_AVAILABLE: 00167 (void)strlcpy(strError, "Cannot find a smart card reader.", sizeof(strError)); 00168 break; 00169 /* case SCARD_E_COMM_DATA_LOST: */ 00170 /* case SCARD_E_NO_KEY_CONTAINER: */ 00171 /* case SCARD_E_SERVER_TOO_BUSY: */ 00172 case SCARD_W_UNSUPPORTED_CARD: 00173 (void)strlcpy(strError, "Card is not supported.", sizeof(strError)); 00174 break; 00175 case SCARD_W_UNRESPONSIVE_CARD: 00176 (void)strlcpy(strError, "Card is unresponsive.", sizeof(strError)); 00177 break; 00178 case SCARD_W_UNPOWERED_CARD: 00179 (void)strlcpy(strError, "Card is unpowered.", sizeof(strError)); 00180 break; 00181 case SCARD_W_RESET_CARD: 00182 (void)strlcpy(strError, "Card was reset.", sizeof(strError)); 00183 break; 00184 case SCARD_W_REMOVED_CARD: 00185 (void)strlcpy(strError, "Card was removed.", sizeof(strError)); 00186 break; 00187 /* case SCARD_W_SECURITY_VIOLATION: */ 00188 /* case SCARD_W_WRONG_CHV: */ 00189 /* case SCARD_W_CHV_BLOCKED: */ 00190 /* case SCARD_W_EOF: */ 00191 /* case SCARD_W_CANCELLED_BY_USER: */ 00192 /* case SCARD_W_CARD_NOT_AUTHENTICATED: */ 00193 00194 case SCARD_E_UNSUPPORTED_FEATURE: 00195 (void)strlcpy(strError, "Feature not supported.", sizeof(strError)); 00196 break; 00197 default: 00198 (void)snprintf(strError, sizeof(strError)-1, "Unknown error: 0x%08lX", 00199 pcscError); 00200 }; 00201 00202 /* add a null byte */ 00203 strError[sizeof(strError)-1] = '\0'; 00204 00205 return strError; 00206 } 00207 #endif 00208