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: debuglog.c 1827 2006-01-24 14:49:52Z 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 
00057 PCSC_API char* pcsc_stringify_error(const long pcscError)
00058 {
00059     static char strError[75];
00060 
00061     switch (pcscError)
00062     {
00063     case SCARD_S_SUCCESS:
00064         (void)strlcpy(strError, "Command successful.", sizeof(strError));
00065         break;
00066     case SCARD_F_INTERNAL_ERROR:
00067         (void)strlcpy(strError, "Internal error.", sizeof(strError));
00068         break;
00069     case SCARD_E_CANCELLED:
00070         (void)strlcpy(strError, "Command cancelled.", sizeof(strError));
00071         break;
00072     case SCARD_E_INVALID_HANDLE:
00073         (void)strlcpy(strError, "Invalid handle.", sizeof(strError));
00074         break;
00075     case SCARD_E_INVALID_PARAMETER:
00076         (void)strlcpy(strError, "Invalid parameter given.", sizeof(strError));
00077         break;
00078     case SCARD_E_INVALID_TARGET:
00079         (void)strlcpy(strError, "Invalid target given.", sizeof(strError));
00080         break;
00081     case SCARD_E_NO_MEMORY:
00082         (void)strlcpy(strError, "Not enough memory.", sizeof(strError));
00083         break;
00084     case SCARD_F_WAITED_TOO_LONG:
00085         (void)strlcpy(strError, "Waited too long.", sizeof(strError));
00086         break;
00087     case SCARD_E_INSUFFICIENT_BUFFER:
00088         (void)strlcpy(strError, "Insufficient buffer.", sizeof(strError));
00089         break;
00090     case SCARD_E_UNKNOWN_READER:
00091         (void)strlcpy(strError, "Unknown reader specified.", sizeof(strError));
00092         break;
00093     case SCARD_E_TIMEOUT:
00094         (void)strlcpy(strError, "Command timeout.", sizeof(strError));
00095         break;
00096     case SCARD_E_SHARING_VIOLATION:
00097         (void)strlcpy(strError, "Sharing violation.", sizeof(strError));
00098         break;
00099     case SCARD_E_NO_SMARTCARD:
00100         (void)strlcpy(strError, "No smart card inserted.", sizeof(strError));
00101         break;
00102     case SCARD_E_UNKNOWN_CARD:
00103         (void)strlcpy(strError, "Unknown card.", sizeof(strError));
00104         break;
00105     case SCARD_E_CANT_DISPOSE:
00106         (void)strlcpy(strError, "Cannot dispose handle.", sizeof(strError));
00107         break;
00108     case SCARD_E_PROTO_MISMATCH:
00109         (void)strlcpy(strError, "Card protocol mismatch.", sizeof(strError));
00110         break;
00111     case SCARD_E_NOT_READY:
00112         (void)strlcpy(strError, "Subsystem not ready.", sizeof(strError));
00113         break;
00114     case SCARD_E_INVALID_VALUE:
00115         (void)strlcpy(strError, "Invalid value given.", sizeof(strError));
00116         break;
00117     case SCARD_E_SYSTEM_CANCELLED:
00118         (void)strlcpy(strError, "System cancelled.", sizeof(strError));
00119         break;
00120     case SCARD_F_COMM_ERROR:
00121         (void)strlcpy(strError, "RPC transport error.", sizeof(strError));
00122         break;
00123     case SCARD_F_UNKNOWN_ERROR:
00124         (void)strlcpy(strError, "Unknown error.", sizeof(strError));
00125         break;
00126     case SCARD_E_INVALID_ATR:
00127         (void)strlcpy(strError, "Invalid ATR.", sizeof(strError));
00128         break;
00129     case SCARD_E_NOT_TRANSACTED:
00130         (void)strlcpy(strError, "Transaction failed.", sizeof(strError));
00131         break;
00132     case SCARD_E_READER_UNAVAILABLE:
00133         (void)strlcpy(strError, "Reader is unavailable.", sizeof(strError));
00134         break;
00135     /* case SCARD_P_SHUTDOWN: */
00136     case SCARD_E_PCI_TOO_SMALL:
00137         (void)strlcpy(strError, "PCI struct too small.", sizeof(strError));
00138         break;
00139     case SCARD_E_READER_UNSUPPORTED:
00140         (void)strlcpy(strError, "Reader is unsupported.", sizeof(strError));
00141         break;
00142     case SCARD_E_DUPLICATE_READER:
00143         (void)strlcpy(strError, "Reader already exists.", sizeof(strError));
00144         break;
00145     case SCARD_E_CARD_UNSUPPORTED:
00146         (void)strlcpy(strError, "Card is unsupported.", sizeof(strError));
00147         break;
00148     case SCARD_E_NO_SERVICE:
00149         (void)strlcpy(strError, "Service not available.", sizeof(strError));
00150         break;
00151     case SCARD_E_SERVICE_STOPPED:
00152         (void)strlcpy(strError, "Service was stopped.", sizeof(strError));
00153         break;
00154     /* case SCARD_E_UNEXPECTED: */
00155     /* case SCARD_E_ICC_CREATEORDER: */
00156     /* case SCARD_E_UNSUPPORTED_FEATURE: */
00157     /* case SCARD_E_DIR_NOT_FOUND: */
00158     /* case SCARD_E_NO_DIR: */
00159     /* case SCARD_E_NO_FILE: */
00160     /* case SCARD_E_NO_ACCESS: */
00161     /* case SCARD_E_WRITE_TOO_MANY: */
00162     /* case SCARD_E_BAD_SEEK: */
00163     /* case SCARD_E_INVALID_CHV: */
00164     /* case SCARD_E_UNKNOWN_RES_MNG: */
00165     /* case SCARD_E_NO_SUCH_CERTIFICATE: */
00166     /* case SCARD_E_CERTIFICATE_UNAVAILABLE: */
00167     case SCARD_E_NO_READERS_AVAILABLE:
00168         (void)strlcpy(strError, "Cannot find a smart card reader.", sizeof(strError));
00169         break;
00170     /* case SCARD_E_COMM_DATA_LOST: */
00171     /* case SCARD_E_NO_KEY_CONTAINER: */
00172     /* case SCARD_E_SERVER_TOO_BUSY: */
00173     case SCARD_W_UNSUPPORTED_CARD:
00174         (void)strlcpy(strError, "Card is not supported.", sizeof(strError));
00175         break;
00176     case SCARD_W_UNRESPONSIVE_CARD:
00177         (void)strlcpy(strError, "Card is unresponsive.", sizeof(strError));
00178         break;
00179     case SCARD_W_UNPOWERED_CARD:
00180         (void)strlcpy(strError, "Card is unpowered.", sizeof(strError));
00181         break;
00182     case SCARD_W_RESET_CARD:
00183         (void)strlcpy(strError, "Card was reset.", sizeof(strError));
00184         break;
00185     case SCARD_W_REMOVED_CARD:
00186         (void)strlcpy(strError, "Card was removed.", sizeof(strError));
00187         break;
00188     /* case SCARD_W_SECURITY_VIOLATION: */
00189     /* case SCARD_W_WRONG_CHV: */
00190     /* case SCARD_W_CHV_BLOCKED: */
00191     /* case SCARD_W_EOF: */
00192     /* case SCARD_W_CANCELLED_BY_USER: */
00193     /* case SCARD_W_CARD_NOT_AUTHENTICATED: */
00194 
00195     case SCARD_E_UNSUPPORTED_FEATURE:
00196         (void)strlcpy(strError, "Feature not supported.", sizeof(strError));
00197         break;
00198     default:
00199         (void)snprintf(strError, sizeof(strError)-1, "Unknown error: 0x%08lX",
00200             pcscError);
00201     };
00202 
00203     /* add a null byte */
00204     strError[sizeof(strError)-1] = '\0';
00205 
00206     return strError;
00207 }
00208 #endif
00209