pcsc-lite  1.8.3
error.c
Go to the documentation of this file.
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