#include <stdio.h>
#include <sys/types.h>
#include "pcscexport.h"
#include "pcsclite.h"
#include "string.h"
PCSC_API char* pcsc_stringify_error(int32_t pcscError)
{
static char strError[75];
switch (pcscError)
{
case SCARD_S_SUCCESS:
(void)strlcpy(strError, "Command successful.", sizeof(strError));
break;
case SCARD_E_CANCELLED:
(void)strlcpy(strError, "Command cancelled.", sizeof(strError));
break;
case SCARD_E_CANT_DISPOSE:
(void)strlcpy(strError, "Cannot dispose handle.", sizeof(strError));
break;
case SCARD_E_INSUFFICIENT_BUFFER:
(void)strlcpy(strError, "Insufficient buffer.", sizeof(strError));
break;
case SCARD_E_INVALID_ATR:
(void)strlcpy(strError, "Invalid ATR.", sizeof(strError));
break;
case SCARD_E_INVALID_HANDLE:
(void)strlcpy(strError, "Invalid handle.", sizeof(strError));
break;
case SCARD_E_INVALID_PARAMETER:
(void)strlcpy(strError, "Invalid parameter given.", sizeof(strError));
break;
case SCARD_E_INVALID_TARGET:
(void)strlcpy(strError, "Invalid target given.", sizeof(strError));
break;
case SCARD_E_INVALID_VALUE:
(void)strlcpy(strError, "Invalid value given.", sizeof(strError));
break;
case SCARD_E_NO_MEMORY:
(void)strlcpy(strError, "Not enough memory.", sizeof(strError));
break;
case SCARD_F_COMM_ERROR:
(void)strlcpy(strError, "RPC transport error.", sizeof(strError));
break;
case SCARD_F_INTERNAL_ERROR:
(void)strlcpy(strError, "Internal error.", sizeof(strError));
break;
case SCARD_F_UNKNOWN_ERROR:
(void)strlcpy(strError, "Unknown error.", sizeof(strError));
break;
case SCARD_F_WAITED_TOO_LONG:
(void)strlcpy(strError, "Waited too long.", sizeof(strError));
break;
case SCARD_E_UNKNOWN_READER:
(void)strlcpy(strError, "Unknown reader specified.", sizeof(strError));
break;
case SCARD_E_TIMEOUT:
(void)strlcpy(strError, "Command timeout.", sizeof(strError));
break;
case SCARD_E_SHARING_VIOLATION:
(void)strlcpy(strError, "Sharing violation.", sizeof(strError));
break;
case SCARD_E_NO_SMARTCARD:
(void)strlcpy(strError, "No smart card inserted.", sizeof(strError));
break;
case SCARD_E_UNKNOWN_CARD:
(void)strlcpy(strError, "Unknown card.", sizeof(strError));
break;
case SCARD_E_PROTO_MISMATCH:
(void)strlcpy(strError, "Card protocol mismatch.", sizeof(strError));
break;
case SCARD_E_NOT_READY:
(void)strlcpy(strError, "Subsystem not ready.", sizeof(strError));
break;
case SCARD_E_SYSTEM_CANCELLED:
(void)strlcpy(strError, "System cancelled.", sizeof(strError));
break;
case SCARD_E_NOT_TRANSACTED:
(void)strlcpy(strError, "Transaction failed.", sizeof(strError));
break;
case SCARD_E_READER_UNAVAILABLE:
(void)strlcpy(strError, "Reader is unavailable.", sizeof(strError));
break;
case SCARD_W_UNSUPPORTED_CARD:
(void)strlcpy(strError, "Card is not supported.", sizeof(strError));
break;
case SCARD_W_UNRESPONSIVE_CARD:
(void)strlcpy(strError, "Card is unresponsive.", sizeof(strError));
break;
case SCARD_W_UNPOWERED_CARD:
(void)strlcpy(strError, "Card is unpowered.", sizeof(strError));
break;
case SCARD_W_RESET_CARD:
(void)strlcpy(strError, "Card was reset.", sizeof(strError));
break;
case SCARD_W_REMOVED_CARD:
(void)strlcpy(strError, "Card was removed.", sizeof(strError));
break;
case SCARD_W_INSERTED_CARD:
(void)strlcpy(strError, "Card was inserted.", sizeof(strError));
break;
case SCARD_E_UNSUPPORTED_FEATURE:
(void)strlcpy(strError, "Feature not supported.", sizeof(strError));
break;
case SCARD_E_PCI_TOO_SMALL:
(void)strlcpy(strError, "PCI struct too small.", sizeof(strError));
break;
case SCARD_E_READER_UNSUPPORTED:
(void)strlcpy(strError, "Reader is unsupported.", sizeof(strError));
break;
case SCARD_E_DUPLICATE_READER:
(void)strlcpy(strError, "Reader already exists.", sizeof(strError));
break;
case SCARD_E_CARD_UNSUPPORTED:
(void)strlcpy(strError, "Card is unsupported.", sizeof(strError));
break;
case SCARD_E_NO_SERVICE:
(void)strlcpy(strError, "Service not available.", sizeof(strError));
break;
case SCARD_E_SERVICE_STOPPED:
(void)strlcpy(strError, "Service was stopped.", sizeof(strError));
break;
case SCARD_E_NO_READERS_AVAILABLE:
(void)strlcpy(strError, "Cannot find a smart card reader.", sizeof(strError));
break;
default:
(void)snprintf(strError, sizeof(strError)-1, "Unkown error: 0x%08X",
pcscError);
};
strError[sizeof(strError)-1] = '\0';
return strError;
}