From 570bcf996a290397207a313151844efe78ddd876 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Sun, 17 May 2015 14:18:02 +0200 Subject: [PATCH] use pcsc-lite's debuglog.h or syslog ...or no log at all for debugging --- virtualsmartcard/configure.ac | 5 +- virtualsmartcard/src/ifd-vpcd/ifd-vpcd.c | 74 +++++++++- .../src/pcsclite-vpcd/Makefile.am | 4 +- .../src/pcsclite-vpcd/PCSC/debuglog.h | 112 --------------- virtualsmartcard/src/pcsclite-vpcd/debug.c | 132 ------------------ virtualsmartcard/src/pcsclite-vpcd/error.c | 112 +++++++++------ virtualsmartcard/src/pcsclite-vpcd/misc.h | 31 +++- virtualsmartcard/src/pcsclite-vpcd/strlcpy.c | 60 -------- .../src/pcsclite-vpcd/strlcpycat.h | 24 ---- 9 files changed, 177 insertions(+), 377 deletions(-) delete mode 100644 virtualsmartcard/src/pcsclite-vpcd/PCSC/debuglog.h delete mode 100644 virtualsmartcard/src/pcsclite-vpcd/debug.c delete mode 100644 virtualsmartcard/src/pcsclite-vpcd/strlcpy.c delete mode 100644 virtualsmartcard/src/pcsclite-vpcd/strlcpycat.h diff --git a/virtualsmartcard/configure.ac b/virtualsmartcard/configure.ac index 744b7ba..a3b3347 100644 --- a/virtualsmartcard/configure.ac +++ b/virtualsmartcard/configure.ac @@ -60,7 +60,7 @@ if test "${libpcsclite}" = no ; then SDKS_PATH="$(xcode-select -p)/Platforms/MacOSX.platform/Developer/SDKs" SDK_PATH="${SDK_PATH:-$SDKS_PATH/$(ls -1 ${SDKS_PATH} | sort -n -t. -k2 -r | head -1)}" # and set the PC/SC include path - PCSC_CFLAGS="-I$SDK_PATH/System/Library/Frameworks/PCSC.framework/Versions/Current/Headers -DNO_LOG -DRESPONSECODE_DEFINED_IN_WINTYPES_H -I`pwd`/${top_srcdir}/MacOSX" + PCSC_CFLAGS="-I$SDK_PATH/System/Library/Frameworks/PCSC.framework/Versions/Current/Headers -DRESPONSECODE_DEFINED_IN_WINTYPES_H -I`pwd`/${top_srcdir}/MacOSX" PCSC_LIBS="--framework PCSC" esac ]) @@ -69,6 +69,7 @@ if test "${libpcsclite}" = no ; then CPPFLAGS="$CPPFLAGS $PCSC_CFLAGS" AC_CHECK_HEADERS(ifdhandler.h,, [ AC_MSG_ERROR([ifdhandler.h not found, install libpcsclite or use ./configure PCSC_CFLAGS=...])], [#include ]) + AC_CHECK_HEADERS([debuglog.h]) CPPFLAGS="$saved_CPPFLAGS" @@ -167,7 +168,7 @@ AC_SUBST(PACKAGE_SUMMARY) # Checks for header files. -AC_CHECK_HEADERS([arpa/inet.h stdint.h stdlib.h string.h sys/socket.h sys/time.h unistd.h]) +AC_CHECK_HEADERS([arpa/inet.h stdint.h stdlib.h string.h sys/socket.h sys/time.h unistd.h syslog.h]) # Checks for typedefs, structures, and compiler characteristics. AC_TYPE_SIZE_T diff --git a/virtualsmartcard/src/ifd-vpcd/ifd-vpcd.c b/virtualsmartcard/src/ifd-vpcd/ifd-vpcd.c index fc2e574..fb1443e 100644 --- a/virtualsmartcard/src/ifd-vpcd/ifd-vpcd.c +++ b/virtualsmartcard/src/ifd-vpcd/ifd-vpcd.c @@ -16,11 +16,16 @@ * You should have received a copy of the GNU General Public License along with * virtualsmartcard. If not, see . */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "ifd-vpcd.h" #include "vpcd.h" -#include -#include + #include + +#include #include #include #include @@ -33,6 +38,71 @@ PCSCLITE_MAX_READERS_CONTEXTS-6 : 1) const unsigned char vicc_max_slots = VICC_MAX_SLOTS; +#ifdef HAVE_DEBUGLOG_H + +#include + +#else + +enum { + PCSC_LOG_DEBUG = 0, + PCSC_LOG_INFO, + PCSC_LOG_ERROR, + PCSC_LOG_CRITICAL +}; + +#ifdef HAVE_SYSLOG_H + +#include +#include + +void log_msg(const int priority, const char *fmt, ...) +{ + char debug_buffer[160]; /* up to 2 lines of 80 characters */ + va_list argptr; + int syslog_level; + + switch(priority) { + case PCSC_LOG_CRITICAL: + syslog_level = LOG_CRIT; + break; + case PCSC_LOG_ERROR: + syslog_level = LOG_ERR; + break; + case PCSC_LOG_INFO: + syslog_level = LOG_INFO; + break; + default: + syslog_level = LOG_DEBUG; + } + + va_start(argptr, fmt); + (void)vsnprintf(debug_buffer, sizeof debug_buffer, fmt, argptr); + va_end(argptr); + + syslog(syslog_level, "%s", debug_buffer); +} +#define Log0(priority) log_msg(priority, "%s:%d:%s()", __FILE__, __LINE__, __FUNCTION__) +#define Log1(priority, fmt) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__) +#define Log2(priority, fmt, data) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data) +#define Log3(priority, fmt, data1, data2) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2) +#define Log4(priority, fmt, data1, data2, data3) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2, data3) +#define Log5(priority, fmt, data1, data2, data3, data4) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2, data3, data4) +#define Log9(priority, fmt, data1, data2, data3, data4, data5, data6, data7, data8) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2, data3, data4, data5, data6, data7, data8) + +#else + +#define Log0(priority) do { } while(0) +#define Log1(priority, fmt) do { } while(0) +#define Log2(priority, fmt, data) do { } while(0) +#define Log3(priority, fmt, data1, data2) do { } while(0) +#define Log4(priority, fmt, data1, data2, data3) do { } while(0) +#define Log5(priority, fmt, data1, data2, data3, data4) do { } while(0) +#define Log9(priority, fmt, data1, data2, data3, data4, data5, data6, data7, data8) do { } while(0) + +#endif +#endif + static struct vicc_ctx *ctx[VICC_MAX_SLOTS]; const char *hostname = NULL; static const char openport[] = "/dev/null"; diff --git a/virtualsmartcard/src/pcsclite-vpcd/Makefile.am b/virtualsmartcard/src/pcsclite-vpcd/Makefile.am index be626df..77de794 100644 --- a/virtualsmartcard/src/pcsclite-vpcd/Makefile.am +++ b/virtualsmartcard/src/pcsclite-vpcd/Makefile.am @@ -4,10 +4,10 @@ lib_LTLIBRARIES = libpcsclite.la libpcsclite_la_CPPFLAGS = $(PCSC_CFLAGS) -I$(srcdir)/../ifd-vpcd -I$(srcdir)/../vpcd libpcsclite_la_LDFLAGS = -no-undefined -version-info 1:0:0 -libpcsclite_la_SOURCES = winscard.c debug.c strlcpy.c error.c +libpcsclite_la_SOURCES = winscard.c error.c libpcsclite_la_LIBADD = $(top_builddir)/src/ifd-vpcd/libifdvpcd.la -noinst_HEADERS = strlcpycat.h misc.h +noinst_HEADERS = misc.h nobase_include_HEADERS = \ PCSC/pcsclite.h \ diff --git a/virtualsmartcard/src/pcsclite-vpcd/PCSC/debuglog.h b/virtualsmartcard/src/pcsclite-vpcd/PCSC/debuglog.h deleted file mode 100644 index c434cf2..0000000 --- a/virtualsmartcard/src/pcsclite-vpcd/PCSC/debuglog.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * MUSCLE SmartCard Development ( http://www.linuxnet.com ) - * - * Copyright (C) 1999-2004 - * David Corcoran - * Copyright (C) 1999-2011 - * Ludovic Rousseau - * - * $Id: debuglog.h 5854 2011-07-09 11:10:32Z rousseau $ - */ - -/** - * @file - * @brief This handles debugging. - * - * @note log message is sent to syslog or stderr depending on --foreground - * command line argument - * - * @code - * Log1(priority, "text"); - * log "text" with priority level priority - * Log2(priority, "text: %d", 1234); - * log "text: 1234" - * the format string can be anything printf() can understand - * Log3(priority, "text: %d %d", 1234, 5678); - * log "text: 1234 5678" - * the format string can be anything printf() can understand - * LogXxd(priority, msg, buffer, size); - * log "msg" + a hex dump of size bytes of buffer[] - * @endcode - */ - -#ifndef __debuglog_h__ -#define __debuglog_h__ - -#ifndef PCSC_API -#define PCSC_API -#endif - -enum { - DEBUGLOG_NO_DEBUG = 0, - DEBUGLOG_SYSLOG_DEBUG, - DEBUGLOG_STDOUT_DEBUG, - DEBUGLOG_STDOUT_COLOR_DEBUG -}; - -#define DEBUG_CATEGORY_NOTHING 0 -#define DEBUG_CATEGORY_APDU 1 -#define DEBUG_CATEGORY_SW 2 - -enum { - PCSC_LOG_DEBUG = 0, - PCSC_LOG_INFO, - PCSC_LOG_ERROR, - PCSC_LOG_CRITICAL -}; - -/* You can't do #ifndef __FUNCTION__ */ -#if !defined(__GNUC__) && !defined(__IBMC__) -#define __FUNCTION__ "" -#endif - -#ifndef __GNUC__ -#define __attribute__(x) /*nothing*/ -#endif - -#ifdef NO_LOG - -#define Log0(priority) do { } while(0) -#define Log1(priority, fmt) do { } while(0) -#define Log2(priority, fmt, data) do { } while(0) -#define Log3(priority, fmt, data1, data2) do { } while(0) -#define Log4(priority, fmt, data1, data2, data3) do { } while(0) -#define Log5(priority, fmt, data1, data2, data3, data4) do { } while(0) -#define Log9(priority, fmt, data1, data2, data3, data4, data5, data6, data7, data8) do { } while(0) -#define LogXxd(priority, msg, buffer, size) do { } while(0) - -#define DebugLogA(a) -#define DebugLogB(a, b) -#define DebugLogC(a, b,c) - -#else - -#define Log0(priority) log_msg(priority, "%s:%d:%s()", __FILE__, __LINE__, __FUNCTION__) -#define Log1(priority, fmt) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__) -#define Log2(priority, fmt, data) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data) -#define Log3(priority, fmt, data1, data2) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2) -#define Log4(priority, fmt, data1, data2, data3) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2, data3) -#define Log5(priority, fmt, data1, data2, data3, data4) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2, data3, data4) -#define Log9(priority, fmt, data1, data2, data3, data4, data5, data6, data7, data8) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2, data3, data4, data5, data6, data7, data8) -#define LogXxd(priority, msg, buffer, size) log_xxd(priority, msg, buffer, size) - -#define DebugLogA(a) Log1(PCSC_LOG_INFO, a) -#define DebugLogB(a, b) Log2(PCSC_LOG_INFO, a, b) -#define DebugLogC(a, b,c) Log3(PCSC_LOG_INFO, a, b, c) - -#endif /* NO_LOG */ - -PCSC_API void log_msg(const int priority, const char *fmt, ...) - __attribute__((format(printf, 2, 3))); - -PCSC_API void log_xxd(const int priority, const char *msg, - const unsigned char *buffer, const int size); - -void DebugLogSuppress(const int); -void DebugLogSetLogType(const int); -int DebugLogSetCategory(const int); -void DebugLogCategory(const int, const unsigned char *, const int); -PCSC_API void DebugLogSetLevel(const int level); - -#endif /* __debuglog_h__ */ - diff --git a/virtualsmartcard/src/pcsclite-vpcd/debug.c b/virtualsmartcard/src/pcsclite-vpcd/debug.c deleted file mode 100644 index 7713f61..0000000 --- a/virtualsmartcard/src/pcsclite-vpcd/debug.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * MUSCLE SmartCard Development ( http://www.linuxnet.com ) - * - * Copyright (C) 1999-2002 - * David Corcoran - * Copyright (C) 2002-2011 - * Ludovic Rousseau - * - * $Id: debug.c 6551 2013-03-06 13:44:17Z rousseau $ - */ - -/** - * @file - * @brief This handles debugging for libpcsclite. - */ - -#include "config.h" -#include -#include -#include -#include -#include - -#include "debuglog.h" -#include "strlcpycat.h" - -#define DEBUG_BUF_SIZE 2048 - -#ifdef NO_LOG - -void log_msg(const int priority, const char *fmt, ...) -{ - (void)priority; - (void)fmt; -} - -#else - -/** default level is quiet to avoid polluting fd 2 (possibly NOT stderr) */ -static char LogLevel = 20; - -static signed char LogDoColor = 0; /**< no color by default */ - -static void log_init(void) -{ - char *e; - -#ifdef LIBPCSCLITE - e = getenv("PCSCLITE_DEBUG"); -#else - e = getenv("MUSCLECARD_DEBUG"); -#endif - if (e) - LogLevel = atoi(e); - - /* log to stderr and stderr is a tty? */ - if (isatty(fileno(stderr))) - { - char *term; - - term = getenv("TERM"); - if (term) - { - const char *terms[] = { "linux", "xterm", "xterm-color", "Eterm", "rxvt", "rxvt-unicode" }; - unsigned int i; - - /* for each known color terminal */ - for (i = 0; i < sizeof(terms) / sizeof(terms[0]); i++) - { - /* we found a supported term? */ - if (0 == strcmp(terms[i], term)) - { - LogDoColor = 1; - break; - } - } - } - } -} /* log_init */ - -void log_msg(const int priority, const char *fmt, ...) -{ - char DebugBuffer[DEBUG_BUF_SIZE]; - va_list argptr; - static int is_initialized = 0; - - if (!is_initialized) - { - log_init(); - is_initialized = 1; - } - - if (priority < LogLevel) /* log priority lower than threshold? */ - return; - - va_start(argptr, fmt); - (void)vsnprintf(DebugBuffer, DEBUG_BUF_SIZE, fmt, argptr); - va_end(argptr); - - { - if (LogDoColor) - { - const char *color_pfx = "", *color_sfx = "\33[0m"; - - switch (priority) - { - case PCSC_LOG_CRITICAL: - color_pfx = "\33[01;31m"; /* bright + Red */ - break; - - case PCSC_LOG_ERROR: - color_pfx = "\33[35m"; /* Magenta */ - break; - - case PCSC_LOG_INFO: - color_pfx = "\33[34m"; /* Blue */ - break; - - case PCSC_LOG_DEBUG: - color_pfx = ""; /* normal (black) */ - color_sfx = ""; - break; - } - fprintf(stderr, "%s%s%s\n", color_pfx, DebugBuffer, color_sfx); - } - else - fprintf(stderr, "%s\n", DebugBuffer); - } -} /* log_msg */ - -#endif - diff --git a/virtualsmartcard/src/pcsclite-vpcd/error.c b/virtualsmartcard/src/pcsclite-vpcd/error.c index cb372f5..6e1f4c9 100644 --- a/virtualsmartcard/src/pcsclite-vpcd/error.c +++ b/virtualsmartcard/src/pcsclite-vpcd/error.c @@ -1,8 +1,8 @@ /* - * MUSCLE SmartCard Development ( http://www.linuxnet.com ) + * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html ) * * Copyright (C) 1999-2002 - * David Corcoran + * David Corcoran * Copyright (C) 2006-2009 * Ludovic Rousseau * @@ -10,7 +10,30 @@ * - BSD-like, see the COPYING file * - GNU Lesser General Licence 2.1 or (at your option) any later version. * - * $Id: error.c 5964 2011-09-24 09:22:24Z rousseau $ +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ */ /** @@ -24,7 +47,7 @@ #include "config.h" #include "misc.h" #include "pcsclite.h" -#include "strlcpycat.h" +#include "string.h" #ifdef NO_LOG PCSC_API char* pcsc_stringify_error(const LONG pcscError) @@ -57,99 +80,100 @@ PCSC_API char* pcsc_stringify_error(const LONG pcscError) PCSC_API char* pcsc_stringify_error(const LONG pcscError) { static char strError[75]; + const char *msg = NULL; switch (pcscError) { case SCARD_S_SUCCESS: - (void)strlcpy(strError, "Command successful.", sizeof(strError)); + msg = "Command successful."; break; case SCARD_F_INTERNAL_ERROR: - (void)strlcpy(strError, "Internal error.", sizeof(strError)); + msg = "Internal error."; break; case SCARD_E_CANCELLED: - (void)strlcpy(strError, "Command cancelled.", sizeof(strError)); + msg = "Command cancelled."; break; case SCARD_E_INVALID_HANDLE: - (void)strlcpy(strError, "Invalid handle.", sizeof(strError)); + msg = "Invalid handle."; break; case SCARD_E_INVALID_PARAMETER: - (void)strlcpy(strError, "Invalid parameter given.", sizeof(strError)); + msg = "Invalid parameter given."; break; case SCARD_E_INVALID_TARGET: - (void)strlcpy(strError, "Invalid target given.", sizeof(strError)); + msg = "Invalid target given."; break; case SCARD_E_NO_MEMORY: - (void)strlcpy(strError, "Not enough memory.", sizeof(strError)); + msg = "Not enough memory."; break; case SCARD_F_WAITED_TOO_LONG: - (void)strlcpy(strError, "Waited too long.", sizeof(strError)); + msg = "Waited too long."; break; case SCARD_E_INSUFFICIENT_BUFFER: - (void)strlcpy(strError, "Insufficient buffer.", sizeof(strError)); + msg = "Insufficient buffer."; break; case SCARD_E_UNKNOWN_READER: - (void)strlcpy(strError, "Unknown reader specified.", sizeof(strError)); + msg = "Unknown reader specified."; break; case SCARD_E_TIMEOUT: - (void)strlcpy(strError, "Command timeout.", sizeof(strError)); + msg = "Command timeout."; break; case SCARD_E_SHARING_VIOLATION: - (void)strlcpy(strError, "Sharing violation.", sizeof(strError)); + msg = "Sharing violation."; break; case SCARD_E_NO_SMARTCARD: - (void)strlcpy(strError, "No smart card inserted.", sizeof(strError)); + msg = "No smart card inserted."; break; case SCARD_E_UNKNOWN_CARD: - (void)strlcpy(strError, "Unknown card.", sizeof(strError)); + msg = "Unknown card."; break; case SCARD_E_CANT_DISPOSE: - (void)strlcpy(strError, "Cannot dispose handle.", sizeof(strError)); + msg = "Cannot dispose handle."; break; case SCARD_E_PROTO_MISMATCH: - (void)strlcpy(strError, "Card protocol mismatch.", sizeof(strError)); + msg = "Card protocol mismatch."; break; case SCARD_E_NOT_READY: - (void)strlcpy(strError, "Subsystem not ready.", sizeof(strError)); + msg = "Subsystem not ready."; break; case SCARD_E_INVALID_VALUE: - (void)strlcpy(strError, "Invalid value given.", sizeof(strError)); + msg = "Invalid value given."; break; case SCARD_E_SYSTEM_CANCELLED: - (void)strlcpy(strError, "System cancelled.", sizeof(strError)); + msg = "System cancelled."; break; case SCARD_F_COMM_ERROR: - (void)strlcpy(strError, "RPC transport error.", sizeof(strError)); + msg = "RPC transport error."; break; case SCARD_F_UNKNOWN_ERROR: - (void)strlcpy(strError, "Unknown error.", sizeof(strError)); + msg = "Unknown error."; break; case SCARD_E_INVALID_ATR: - (void)strlcpy(strError, "Invalid ATR.", sizeof(strError)); + msg = "Invalid ATR."; break; case SCARD_E_NOT_TRANSACTED: - (void)strlcpy(strError, "Transaction failed.", sizeof(strError)); + msg = "Transaction failed."; break; case SCARD_E_READER_UNAVAILABLE: - (void)strlcpy(strError, "Reader is unavailable.", sizeof(strError)); + msg = "Reader is unavailable."; break; /* case SCARD_P_SHUTDOWN: */ case SCARD_E_PCI_TOO_SMALL: - (void)strlcpy(strError, "PCI struct too small.", sizeof(strError)); + msg = "PCI struct too small."; break; case SCARD_E_READER_UNSUPPORTED: - (void)strlcpy(strError, "Reader is unsupported.", sizeof(strError)); + msg = "Reader is unsupported."; break; case SCARD_E_DUPLICATE_READER: - (void)strlcpy(strError, "Reader already exists.", sizeof(strError)); + msg = "Reader already exists."; break; case SCARD_E_CARD_UNSUPPORTED: - (void)strlcpy(strError, "Card is unsupported.", sizeof(strError)); + msg = "Card is unsupported."; break; case SCARD_E_NO_SERVICE: - (void)strlcpy(strError, "Service not available.", sizeof(strError)); + msg = "Service not available."; break; case SCARD_E_SERVICE_STOPPED: - (void)strlcpy(strError, "Service was stopped.", sizeof(strError)); + msg = "Service was stopped."; break; /* case SCARD_E_UNEXPECTED: */ /* case SCARD_E_ICC_CREATEORDER: */ @@ -165,25 +189,25 @@ PCSC_API char* pcsc_stringify_error(const LONG pcscError) /* case SCARD_E_NO_SUCH_CERTIFICATE: */ /* case SCARD_E_CERTIFICATE_UNAVAILABLE: */ case SCARD_E_NO_READERS_AVAILABLE: - (void)strlcpy(strError, "Cannot find a smart card reader.", sizeof(strError)); + msg = "Cannot find a smart card reader."; break; /* case SCARD_E_COMM_DATA_LOST: */ /* case SCARD_E_NO_KEY_CONTAINER: */ /* case SCARD_E_SERVER_TOO_BUSY: */ case SCARD_W_UNSUPPORTED_CARD: - (void)strlcpy(strError, "Card is not supported.", sizeof(strError)); + msg = "Card is not supported."; break; case SCARD_W_UNRESPONSIVE_CARD: - (void)strlcpy(strError, "Card is unresponsive.", sizeof(strError)); + msg = "Card is unresponsive."; break; case SCARD_W_UNPOWERED_CARD: - (void)strlcpy(strError, "Card is unpowered.", sizeof(strError)); + msg = "Card is unpowered."; break; case SCARD_W_RESET_CARD: - (void)strlcpy(strError, "Card was reset.", sizeof(strError)); + msg = "Card was reset."; break; case SCARD_W_REMOVED_CARD: - (void)strlcpy(strError, "Card was removed.", sizeof(strError)); + msg = "Card was removed."; break; /* case SCARD_W_SECURITY_VIOLATION: */ /* case SCARD_W_WRONG_CHV: */ @@ -193,13 +217,19 @@ PCSC_API char* pcsc_stringify_error(const LONG pcscError) /* case SCARD_W_CARD_NOT_AUTHENTICATED: */ case SCARD_E_UNSUPPORTED_FEATURE: - (void)strlcpy(strError, "Feature not supported.", sizeof(strError)); + msg = "Feature not supported."; break; default: (void)snprintf(strError, sizeof(strError)-1, "Unknown error: 0x%08lX", pcscError); }; + if (msg) + (void)strncpy(strError, msg, sizeof(strError)); + else + (void)snprintf(strError, sizeof(strError)-1, "Unknown error: 0x%08lX", + pcscError); + /* add a null byte */ strError[sizeof(strError)-1] = '\0'; diff --git a/virtualsmartcard/src/pcsclite-vpcd/misc.h b/virtualsmartcard/src/pcsclite-vpcd/misc.h index 77ffd36..1567b6a 100644 --- a/virtualsmartcard/src/pcsclite-vpcd/misc.h +++ b/virtualsmartcard/src/pcsclite-vpcd/misc.h @@ -1,12 +1,35 @@ /* * This handles GCC attributes * - * MUSCLE SmartCard Development ( http://www.linuxnet.com ) + * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html ) * * Copyright (C) 2005-2010 * Ludovic Rousseau * - * $Id: misc.h 5434 2010-12-08 14:13:21Z rousseau $ +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ */ #ifndef __misc_h__ @@ -55,4 +78,8 @@ #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif +#ifndef COUNT_OF +#define COUNT_OF(arr) (sizeof(arr)/sizeof(arr[0])) +#endif + #endif /* __misc_h__ */ diff --git a/virtualsmartcard/src/pcsclite-vpcd/strlcpy.c b/virtualsmartcard/src/pcsclite-vpcd/strlcpy.c deleted file mode 100644 index 1a612a3..0000000 --- a/virtualsmartcard/src/pcsclite-vpcd/strlcpy.c +++ /dev/null @@ -1,60 +0,0 @@ -/* $OpenBSD: strlcpy.c,v 1.10 2005/08/08 08:05:37 espie Exp $ */ - -/* - * Copyright (c) 1998 Todd C. Miller - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifndef HAVE_STRLCPY - -#include -#include -#include "strlcpycat.h" - -/* - * Copy src to string dst of size siz. At most siz-1 characters - * will be copied. Always NUL terminates (unless siz == 0). - * Returns strlen(src); if retval >= siz, truncation occurred. - */ -size_t -strlcpy(char *dst, const char *src, size_t siz) -{ - char *d = dst; - const char *s = src; - size_t n = siz; - - /* Copy as many bytes as will fit */ - if (n != 0 && --n != 0) { - do { - if ((*d++ = *s++) == 0) - break; - } while (--n != 0); - } - - /* Not enough room in dst, add NUL and traverse rest of src */ - if (n == 0) { - if (siz != 0) - *d = '\0'; /* NUL-terminate dst */ - while (*s++) - ; - } - - return(s - src - 1); /* count does not include NUL */ -} - -#endif diff --git a/virtualsmartcard/src/pcsclite-vpcd/strlcpycat.h b/virtualsmartcard/src/pcsclite-vpcd/strlcpycat.h deleted file mode 100644 index d21f1e9..0000000 --- a/virtualsmartcard/src/pcsclite-vpcd/strlcpycat.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * MUSCLE SmartCard Development ( http://www.linuxnet.com ) - * - * Copyright (C) 2004-2010 - * Ludovic Rousseau - * - * $Id: strlcpycat.h 4974 2010-06-01 09:43:47Z rousseau $ - */ - -/** - * @file - * @brief prototypes of strlcpy()/strlcat() imported from OpenBSD - */ - -#ifdef HAVE_STRLCPY -#include -#else -size_t strlcpy(char *dst, const char *src, size_t siz); -#endif - -#ifndef HAVE_STRLCAT -size_t strlcat(char *dst, const char *src, size_t siz); -#endif -