diff --git a/ChangeLog b/ChangeLog index 7e475fe..d94daa7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +1.8.26: Ludovic Rousseau +3 January 2020 +- Use poll() instead of select() to allow file descriptor higher than FD_SETSIZE +- Enable reader filtering by default +- pcsc-spy: + . Do not read output buffer after error + . Adjust code to handle autoallocated buffers + . fix year-2038 issue by using long instead of int +- Android: fix compilation +- if client/server protocol mismatch: + . log an explicit message + . SCardEstablishContext() returns SCARD_E_SERVICE_STOPPED +- polkit: log the error message if polkit_authority_get_sync() fails +- Exit with EXIT_SUCCESS on shutdown to please systemd +- Doxygen: fix minor issues in the documentation +- Add --disable-documentation option +- Fix a minor memory leak + + 1.8.25: Ludovic Rousseau 25 March 2019 - Fix a socket issue when pcscd is used inside LXC container diff --git a/ChangeLog.git b/ChangeLog.git index aa33245..28dbe04 100644 --- a/ChangeLog.git +++ b/ChangeLog.git @@ -1,4 +1,485 @@ -commit efc56971cb8f8bf9cb44090bb3851d8c1d2a00f7 (HEAD -> master, tag: pcsc-1.8.25, origin/master, origin/HEAD) +commit b0c2f30c2bfe7f22fe1b985e647c6cb61cc66275 (HEAD -> master, tag: pcsc-1.8.26, origin/master, origin/HEAD) +Author: Ludovic Rousseau +Date: Fri Jan 3 17:29:44 2020 +0100 + + Release 1.8.26 + + Signed-off-by: Ludovic Rousseau + + ChangeLog | 19 +++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 20 insertions(+), 1 deletion(-) + +commit 1015741a8360c5655652764f052521a3308ef53b (zotac/master) +Author: Ludovic Rousseau +Date: Fri Jan 3 15:36:50 2020 +0100 + + Enable reader filtering by default + + The reader filtering feature is described in "Remove and/or customize + PC/SC reader names" + https://ludovicrousseau.blogspot.com/2015/12/remove-andor-customize-pcsc-reader-names.html + + This feature is requested in packages by some users. + In Debian bug #947883 " Enable reader name filter in pcscd " + https://bugs.debian.org/947883 + + In Arch Linux bug 51912 " [pcsclite] Enable 'filter' support " + https://bugs.archlinux.org/task/51912 + + And also in Ubuntu bug 1857118 " Build pcscd with --enable-filter option " + https://bugs.launchpad.net/bugs/1857118 + + To avoid that each GNU/Linux distribution change the packaging + configuration to enable the feature I decided to enable the feature by + default in the upstream project. + + This change should not have any bad side effect. Only root can modify + the configuration file /etc/default/pcscd or the systemd file + /etc/systemd/system/pcscd.service.d/override.conf + + For systemd use: "sudo systemctl edit pcscd" to add something like: + [Service] + Environment=PCSCLITE_FILTER_IGNORE_READER_NAMES=Nitrokey + + You can get the previous behavior by using ./configure --disable-filter + + configure.ac | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 1da5eb1874a49c1e7de993aaff23b92bbcc572f5 (github/master) +Author: Ludovic Rousseau +Date: Sat Dec 14 15:10:40 2019 +0100 + + reader.h: add URL for wLangId documentation + + src/PCSC/reader.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 20385efba2075d4c13acfea43d0abc8c38d8c106 +Author: Gabriele Svelto +Date: Mon Oct 28 14:29:07 2019 +0100 + + Use poll() instead of select() + + From [Pcsclite-muscle] select()-induced crashes (and attached tentative fix) + http://lists.infradead.org/pipermail/pcsclite-muscle/2019-November/001199.html + + " Hello all, + we tracked down some crashes in Firefox [1] to the use of select() and + its related macros in the libpcslite library. Recent versions of glibc + added checks to ensure that the values of the file descriptors passed to + the FD_SET(), FD_CLR() and FD_ISSET() macros have values lower than the + FD_SETSIZE constant. If the file descriptor value is found to be higher + than FD_SETSIZE then abort() gets called which is ultimately what we're + seeing in Firefox. + + I have attached a patch that replaces the select() calls with poll() + which does not suffer from this problem. Unfortunately I don't have a + smartcard reader on hand so I can't test the patch myself. + + Cheers, + + Gabriele Svelto + + [1] select() crashes in libpcslite + https://bugzilla.mozilla.org/show_bug.cgi?id=1591876 + " + + Fixes github issue https://github.com/LudovicRousseau/PCSC/issues/51 + "Using 'select' in libpcsclite can be problematic for application opening a large number of file descriptors #51" + + src/winscard_msg.c | 61 +++++++++++++++++++++++++++--------------------------- + 1 file changed, 31 insertions(+), 30 deletions(-) + +commit 864f955fb5fa785d664ba1fad1570ee1fcafdae8 +Author: Ludovic Rousseau +Date: Tue Oct 1 18:08:58 2019 +0200 + + Doxygen: fix SCardGetAttrib() documentation + + PCSC/src/winscard_clnt.c:2415: warning: return value 'SCARD_E_INSUFFICIENT_BUFFER' of SCardGetAttrib has multiple documentation sections + PCSC/src/winscard_clnt.c:2415: warning: return value 'SCARD_E_NOT_TRANSACTED' of SCardGetAttrib has multiple documentation sections + + src/winscard_clnt.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit 92b0f88c380c54f8109bd43e13144ab5c98bbf77 +Author: Ludovic Rousseau +Date: Tue Oct 1 18:04:00 2019 +0200 + + Doxygen: fix InitializeSocket() documentation + + PCSC/src/winscard_msg_srv.c:122: warning: return value '-1' of InitializeSocket has multiple documentation sections + PCSC/src/winscard_msg_srv.c:122: warning: return value '-1' of InitializeSocket has multiple documentation sections + + src/winscard_msg_srv.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit aa6a701fe771ce740f7e906b7f41ba4f26bc5564 +Author: Ludovic Rousseau +Date: Tue Oct 1 18:02:42 2019 +0200 + + Doxygen: fix MessageSend() documentation + + PCSC/src/winscard_msg.c:354: warning: return value 'SCARD_F_COMM_ERROR' of MessageSend has multiple documentation sections + + src/winscard_msg.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 025c941759ffbc5aeca6919cced4c308a8baca2a +Author: Ludovic Rousseau +Date: Tue Oct 1 18:01:26 2019 +0200 + + Doxygen: fix MessageReceiveTimeout() documentation + + PCSC/src/winscard_msg.c:194: warning: return value 'SCARD_F_COMM_ERROR' of MessageReceiveTimeout has multiple documentation sections + + src/winscard_msg.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit e231920500490ce9d9b896917c1992efd383444c +Author: Ludovic Rousseau +Date: Tue Oct 1 18:00:29 2019 +0200 + + Doxygen: fix MessageReceive() documentation + + PCSC/src/winscard_msg.c:453: warning: return value 'SCARD_F_COMM_ERROR' of MessageReceive has multiple documentation sections + + src/winscard_msg.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 4c12b456e4973dad5550fdfd4adffeced9e39cb2 +Author: Ludovic Rousseau +Date: Tue Oct 1 17:58:14 2019 +0200 + + Doxygen: fix ClientSetupSession() documentation + + PCSC/src/winscard_msg.c:119: warning: return value '-1' of ClientSetupSession has multiple documentation sections + PCSC/src/winscard_msg.c:119: warning: return value '-1' of ClientSetupSession has multiple documentation sections + + src/winscard_msg.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 63da545834167e50dbc55a9172a686886162b599 +Author: Ludovic Rousseau +Date: Tue Oct 1 17:55:36 2019 +0200 + + Doxygen: fix ClientSetupSession() documentation + + PCSC/src/winscard_msg.c:174: warning: documented empty return type of ClientCloseSession + + src/winscard_msg.c | 1 - + 1 file changed, 1 deletion(-) + +commit f4643c3809f9fcf05847041e82753c407cd7e834 +Author: Ludovic Rousseau +Date: Tue Oct 1 17:54:17 2019 +0200 + + Doxygen: fix SCardRemoveContext documentation + + PCSC/src/winscard_clnt.c:3351: warning: documented empty return type of SCardRemoveContext + + src/winscard_clnt.c | 3 --- + 1 file changed, 3 deletions(-) + +commit 98f4aa682a3778f9f0b44b4d289aab0d25521cdd +Author: Ludovic Rousseau +Date: Tue Oct 1 17:50:40 2019 +0200 + + Doxygen: update config file from version 1.8.7 to 1.8.16 + + doc/doxygen.conf.in | 546 ++++++++++++++++++++++++++++++++++------------------ + 1 file changed, 359 insertions(+), 187 deletions(-) + +commit e8abd1c1375b4f6d86a1a8718351f499eae5b1e2 +Author: Ludovic Rousseau +Date: Tue Oct 1 17:38:37 2019 +0200 + + Doxygen: fix doc of IFDHSetCapabilities() + + IFDHSetCapabilities() is not called from SCardGetAttrib() but from + SCardSetAttrib(). + + src/PCSC/ifdhandler.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3896019ce7cbc8899d7150544dde6b0d619eeb27 +Author: Ludovic Rousseau +Date: Wed Sep 11 15:44:16 2019 +0200 + + Exit with EXIT_SUCCESS on shutdown to please systemd + + From Jakub Jelen nice bug report: + " The pcscd daemon exits with exit code 1 when it is killed by systemd, + which confuses system thinking that there was some failure on the exit: + + Sep 11 13:22:54 workstation-uefi pcscd[8750]: 08450216 pcscdaemon.c:193:signal_thread() Received signal: 15 + Sep 11 13:22:54 workstation-uefi pcscd[8750]: 00000015 pcscdaemon.c:213:signal_thread() Direct suicide + Sep 11 13:22:54 workstation-uefi pcscd[8750]: 00000004 pcscdaemon.c:786:at_exit() cleaning /var/run/pcscd + Sep 11 13:22:54 workstation-uefi systemd[1]: Stopping PC/SC Smart Card Daemon... + Sep 11 13:22:54 workstation-uefi systemd[1]: pcscd.service: Main process exited, code=exited, status=1/FAILURE + Sep 11 13:22:54 workstation-uefi systemd[1]: pcscd.service: Failed with result 'exit-code'. + Sep 11 13:22:54 workstation-uefi systemd[1]: Stopped PC/SC Smart Card Daemon. + + Reading through the code, it looks like it exits always with 1 (except + for the alarm) so I think we should either + + - modify the shipped systemd service file to mark the exit code 1 as a + successful exit code using SuccessExitStatus or - sign in front of + ExecStart. + - modify the pcscd to exit "cleanly" in case of termination by systemd. + + I do not have any strong opinions which way is more correct, nor the + systemd maintainers do so this is merely cosmetic issue avoiding bogus + error messages filling log files on every reboot. + + Initially filled as a Fedora bug: + https://bugzilla.redhat.com/show_bug.cgi?id=1751153 " + + I implemented the second solution. + + Fixes https://github.com/LudovicRousseau/PCSC/issues/70 + "Unclean exit when the pcscd is killed by systemd (for example on reboot)" + + src/pcscdaemon.c | 1 + + 1 file changed, 1 insertion(+) + +commit 142bc175a209b97853ec4b543177d426718dce98 +Author: Ludovic Rousseau +Date: Sun Sep 1 14:35:05 2019 +0200 + + spy: fix minor warning + + Use %08lX for rv codes (LONG) + + Thanks to Coverity: + CID 1453383 (#1 of 1): Invalid type in argument to printf format specifier (PRINTF_ARGS) + invalid_type: Argument rv to format specifier %08X was expected to have type unsigned int but has type long. + + src/spy/libpcscspy.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9500c617f6e32b366b37c08ec893c29389cdc3d5 +Author: Ludovic Rousseau +Date: Sun Sep 1 14:25:43 2019 +0200 + + spy: fix year-2038 issue by using long instead of int + + .tv_sec and .tv_usec in struct timeval may be long (and should be) to + avoid the year-2038 problem. + + Thanks to Coverity: + CID 1453385 (#1 of 1): Invalid type in argument to printf format specifier (PRINTF_ARGS) + invalid_type: Argument profile_time.tv_usec to format specifier %d was expected to have type int but has type long. + + CID 1453384 (#1 of 1): Invalid type in argument to printf format specifier (PRINTF_ARGS) + invalid_type: Argument profile_time.tv_sec to format specifier %d was expected to have type int but has type long. + + src/spy/libpcscspy.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 62e1fb077e9017f6320b5d933498af764a61739e +Author: Ludovic Rousseau +Date: Wed Aug 21 22:34:43 2019 +0200 + + polkit: log the error message if polkit_authority_get_sync() fails + + If ever polkit_authority_get_sync() should fail we should log the + error message returned by the function to help debug. + + src/auth.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit c07cf7de43607720fd3954977672f39ae9f13249 +Author: Ludovic Rousseau +Date: Wed Aug 21 14:47:53 2019 +0200 + + pcscd: log an explicit message if client/server protocol mismatch + + If the libpcsclite (client) and pcscd (server) use different + communication protocols then a more explicit critical log message is + emitted: + winscard_svc.c:383:ContextThread() Communication protocol mismatch! + + We still get the protocol version for debug: + winscard_svc.c:385:ContextThread() Client protocol is 4:5 + winscard_svc.c:387:ContextThread() Server protocol is 4:5 + + src/winscard_svc.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit e1d4e1b9fc93cf222ae952ae01228c978924ad22 +Author: Ludovic Rousseau +Date: Wed Aug 21 14:42:32 2019 +0200 + + SCardEstablishContext() returns SCARD_E_SERVICE_STOPPED + + If the client and server uses 2 different communication protocol + version then SCardEstablishContext() now returns + SCARD_E_SERVICE_STOPPED instead of SCARD_E_NO_SERVICE. + + The idea is to differentiate 2 cases: + - pcscd is not running => SCARD_E_NO_SERVICE + - protocol mismatch => SCARD_E_SERVICE_STOPPED + + It is "common" that users re-install pcsc-lite on a system but with a + different version and in a different place. + + src/winscard_svc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 03f2134db460737a0797cf30ccf54b898210901d +Author: Ludovic Rousseau +Date: Wed Aug 21 14:34:39 2019 +0200 + + UnitaryTests: add definition of CPPFLAGS for C++ code + + Samples written in C++ uses CPPFLAGS to find the pcsc-lite headers and + library. + + UnitaryTests/Makefile | 1 + + 1 file changed, 1 insertion(+) + +commit 3afbec34c6deeff29a45c94cdef375e03b93c19b +Author: Ludovic Rousseau +Date: Thu Jun 20 09:08:27 2019 +0200 + + Guard definition of PCSC_API: Fix compiler warning + + When compiling CCID on macOS I got: + In file included from ccid_usb.c:34: + ./misc.h:47:9: warning: 'PCSC_API' macro redefined [-Wmacro-redefined] + ^ + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/PCSC.framework/Headers/pcsclite.h:51:9: note: + previous definition is here + ^ + + src/misc.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit 836872f97ef0e8775a8bc538e32eeb6449908ddd +Author: Raphaël Jakse +Date: Sun Jun 16 20:00:56 2019 +0200 + + Guard NDEBUG behind an ifdef in tokenparser + + Needed for Android as NDEBUG is already defined. + + src/tokenparser.l | 2 ++ + 1 file changed, 2 insertions(+) + +commit 285007c02dfac88cbabf2b056aa181190c4324d1 +Author: Raphaël Jakse +Date: Sun Jun 16 17:37:35 2019 +0200 + + Guard NDEBUG behind an ifdef + + Needed for Android as NDEBUG is already defined. + + src/simclist.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit e6aae093c063ce3cde4a6c4997d8d547e2dd62b3 +Author: Raphaël Jakse +Date: Sun Jun 16 17:37:23 2019 +0200 + + Add casts to fix unmatched signs in integer comparisons + + Android compilation failed with: + external/pcsc-lite/src/simclist.c:1342:17: error: comparison of integers of different signs: 'ssize_t' (aka 'int') and 'uint32_t' (aka 'unsigned int') [-Werror,-Wsign-compare] + READ_ERRCHECK(fd, buf, header.elemlen); + + src/simclist.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit c3f6b132ca1050123896e4d6a8be2372ec63d5cf +Author: Raphaël Jakse +Date: Sun Jun 16 17:19:39 2019 +0200 + + Fix buffsize size + + Android compilation failed with: + external/pcsc-lite/src/simclist.c:1225:21: error: in call to 'write', 'count' bytes overflows the given object + WRITE_ERRCHECK(fd, & bufsize, sizeof(size_t)); + + src/simclist.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 7256a30482b5ae6b62b1f018a4bfb1010873497f +Author: David Ward +Date: Sun Jun 2 23:20:29 2019 -0400 + + pcsc-spy: Reformat 4 spaces to 1 tab + + src/spy/libpcscspy.c | 264 +++++++++++++++++++++++++-------------------------- + 1 file changed, 132 insertions(+), 132 deletions(-) + +commit 9e905fcad63d7884c1252f5fbeeec0332e98a5ea +Author: David Ward +Date: Sun Jun 2 22:46:37 2019 -0400 + + pcsc-spy: Adjust code to handle autoallocated buffers + + No functional change. This is intended to improve understanding of + the code when comparing it with the relevant API documentation. + + src/spy/libpcscspy.c | 20 +++++++++++--------- + 1 file changed, 11 insertions(+), 9 deletions(-) + +commit cf0d3b127376d45ea5b75d7ca2a0badd24fc6291 +Author: David Ward +Date: Sat May 25 22:41:32 2019 -0400 + + pcsc-spy: Do not read output buffer after error + + If either SCardListReaderGroups() or SCardListReaders() returns an + error, the output buffer is not valid and should not be read. + + src/spy/libpcscspy.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +commit f759792e0855281c38f5efd45952701d85048c5a +Author: Jakub Jelen +Date: Thu May 30 09:58:23 2019 +0200 + + configfile: Avoid memory leaks in case of realloc failure (cppcheck warning) + + The original patch was written by Bob Relyea for RHEL package, but I tweaked it + a bit to make sure it builds without warnings. + + Signed-off-by: Jakub Jelen + + src/configfile.l | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +commit 4369771cf1a9e68c67a311eb6b52c1650d5de3aa +Author: Ludovic Rousseau +Date: Fri May 17 19:03:11 2019 +0200 + + Doxygen: fix a reference + + PCSC/src/winscard_clnt.c:2332: warning: unable to resolve reference to `SCARD_ATTR_DEVICE_FRIENDLY_NAME\n' for \ref command + + src/winscard_clnt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5345cf56907768d71ec443347ed94e9ef92f32fa +Author: Fabrice Fontaine +Date: Fri May 17 15:48:35 2019 +0200 + + Add --disable-documentation option + + This option allows the user to disable man pages which can be useful if + podman is not available + + Signed-off-by: Fabrice Fontaine + + configure.ac | 7 +++++++ + src/spy/Makefile.am | 2 ++ + 2 files changed, 9 insertions(+) + +commit efc56971cb8f8bf9cb44090bb3851d8c1d2a00f7 (tag: pcsc-1.8.25) Author: Ludovic Rousseau Date: Mon Mar 25 20:56:43 2019 +0100 @@ -8,7 +489,7 @@ Date: Mon Mar 25 20:56:43 2019 +0100 configure.ac | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) -commit d627aee864c3e9ce40e375fcc0e34a7855b6f0f1 (zotac/master, github/master) +commit d627aee864c3e9ce40e375fcc0e34a7855b6f0f1 Author: Ludovic Rousseau Date: Sun Mar 24 14:51:41 2019 +0100 @@ -20,7 +501,7 @@ Date: Sun Mar 24 14:51:41 2019 +0100 etc/pcscd.socket.in | 1 + 1 file changed, 1 insertion(+) -commit b9e6fe054c2ce883ce6070d4a5761d9d1e1da1bc (zmaster) +commit b9e6fe054c2ce883ce6070d4a5761d9d1e1da1bc Author: Ludovic Rousseau Date: Fri Mar 22 10:39:14 2019 +0100 diff --git a/configure b/configure index 473ab6e..e020c35 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for pcsc-lite 1.8.25. +# Generated by GNU Autoconf 2.69 for pcsc-lite 1.8.26. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='pcsc-lite' PACKAGE_TARNAME='pcsc-lite' -PACKAGE_VERSION='1.8.25' -PACKAGE_STRING='pcsc-lite 1.8.25' +PACKAGE_VERSION='1.8.26' +PACKAGE_STRING='pcsc-lite 1.8.26' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -661,6 +661,8 @@ ENABLE_SERIAL_FALSE ENABLE_SERIAL_TRUE LIBSYSTEMD_LIBS LIBSYSTEMD_CFLAGS +ENABLE_DOC_FALSE +ENABLE_DOC_TRUE SYMBOL_VISIBILITY ALLOCA LIBOBJS @@ -807,6 +809,7 @@ with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock +enable_documentation enable_libsystemd enable_serial enable_usb @@ -1392,7 +1395,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures pcsc-lite 1.8.25 to adapt to many kinds of systems. +\`configure' configures pcsc-lite 1.8.26 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1463,7 +1466,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of pcsc-lite 1.8.25:";; + short | recursive ) echo "Configuration of pcsc-lite 1.8.26:";; esac cat <<\_ACEOF @@ -1485,6 +1488,7 @@ Optional Features: --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) + --disable-documentation do not build documentation --disable-libsystemd do not use libsystemd --disable-serial do not use serial reader.conf file --disable-usb do not use usb hotplug @@ -1500,7 +1504,7 @@ Optional Features: /var/run/pcscd) --enable-confdir=DIR directory containing reader configurations (default /etc/reader.conf.d) - --enable-filter allow to filter readers using + --disable-filter disable reader filtering using PCSCLITE_FILTER_IGNORE_READER_NAMES and PCSCLITE_FILTER_EXTEND_READER_NAMES @@ -1615,7 +1619,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -pcsc-lite configure 1.8.25 +pcsc-lite configure 1.8.26 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2091,7 +2095,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by pcsc-lite $as_me 1.8.25, which was +It was created by pcsc-lite $as_me 1.8.26, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2955,7 +2959,7 @@ fi # Define the identity of the package. PACKAGE='pcsc-lite' - VERSION='1.8.25' + VERSION='1.8.26' cat >>confdefs.h <<_ACEOF @@ -14580,6 +14584,23 @@ _ACEOF PCSCLITE_FEATURES="${PCSCLITE_FEATURES} $PCSC_ARCH $host" +# --disable-documentation +# Check whether --enable-documentation was given. +if test "${enable_documentation+set}" = set; then : + enableval=$enable_documentation; enable_doc="${enableval}" +else + enable_doc="yes" +fi + + if test "$enable_doc" != "no"; then + ENABLE_DOC_TRUE= + ENABLE_DOC_FALSE='#' +else + ENABLE_DOC_TRUE='#' + ENABLE_DOC_FALSE= +fi + + # See if socket() is found from libsocket { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 $as_echo_n "checking for socket in -lsocket... " >&6; } @@ -15456,12 +15477,12 @@ else fi -# --enable-filter +# --disable-filter # Check whether --enable-filter was given. if test "${enable_filter+set}" = set; then : enableval=$enable_filter; use_filter="${enableval}" else - use_filter="no" + use_filter="yes" fi @@ -15613,6 +15634,7 @@ use libsystemd: ${use_libsystemd} systemd unit directory: ${with_systemdsystemunitdir} serial config dir.: ${confdir_exp} filter: ${use_filter} +documentation: ${enable_doc} PCSCLITE_FEATURES: ${PCSCLITE_FEATURES} @@ -15759,6 +15781,10 @@ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${ENABLE_DOC_TRUE}" && test -z "${ENABLE_DOC_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_DOC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${ENABLE_SERIAL_TRUE}" && test -z "${ENABLE_SERIAL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SERIAL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -16172,7 +16198,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by pcsc-lite $as_me 1.8.25, which was +This file was extended by pcsc-lite $as_me 1.8.26, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16238,7 +16264,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -pcsc-lite config.status 1.8.25 +pcsc-lite config.status 1.8.26 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 0fa5168..627b1eb 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.69]) -AC_INIT([pcsc-lite],[1.8.25]) +AC_INIT([pcsc-lite],[1.8.26]) AC_CONFIG_SRCDIR(src/pcscdaemon.c) AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip) AC_CONFIG_HEADERS([config.h]) @@ -144,6 +144,12 @@ esac AC_DEFINE_UNQUOTED(PCSC_ARCH, "$PCSC_ARCH", [PC/SC target architecture]) PCSCLITE_FEATURES="${PCSCLITE_FEATURES} $PCSC_ARCH $host" +# --disable-documentation +AC_ARG_ENABLE(documentation, + AS_HELP_STRING([--disable-documentation],[do not build documentation]), + [ enable_doc="${enableval}" ], [ enable_doc="yes" ] ) +AM_CONDITIONAL(ENABLE_DOC, test "$enable_doc" != "no") + # See if socket() is found from libsocket AC_CHECK_LIB(socket, socket, [LIBS="$LIBS -lsocket"]) @@ -383,11 +389,11 @@ AS_HELP_STRING([--enable-confdir=DIR],[directory containing reader configuration [confdir="${enableval}"], [confdir="${sysconfdir}/reader.conf.d"]) -# --enable-filter +# --disable-filter AC_ARG_ENABLE(filter, - AS_HELP_STRING([--enable-filter],[allow to filter readers using + AS_HELP_STRING([--disable-filter],[disable reader filtering using PCSCLITE_FILTER_IGNORE_READER_NAMES and PCSCLITE_FILTER_EXTEND_READER_NAMES]), - [ use_filter="${enableval}" ], [ use_filter="no" ]) + [ use_filter="${enableval}" ], [ use_filter="yes" ]) if test x$use_filter = xyes; then AC_DEFINE(FILTER_NAMES, 1, [Filter reader names]) @@ -446,6 +452,7 @@ use libsystemd: ${use_libsystemd} systemd unit directory: ${with_systemdsystemunitdir} serial config dir.: ${confdir_exp} filter: ${use_filter} +documentation: ${enable_doc} PCSCLITE_FEATURES: ${PCSCLITE_FEATURES} diff --git a/doc/doxygen.conf.in b/doc/doxygen.conf.in index 3e13e18..9dfc880 100644 --- a/doc/doxygen.conf.in +++ b/doc/doxygen.conf.in @@ -1,4 +1,4 @@ -# Doxyfile 1.8.7 +# Doxyfile 1.8.16 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -17,11 +17,11 @@ # Project related configuration options #--------------------------------------------------------------------------- -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 @@ -46,10 +46,10 @@ PROJECT_NUMBER = @VERSION@ PROJECT_BRIEF = -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. PROJECT_LOGO = @@ -60,7 +60,7 @@ PROJECT_LOGO = OUTPUT_DIRECTORY = doc -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where @@ -93,14 +93,22 @@ ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the @@ -135,7 +143,7 @@ ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. @@ -179,6 +187,16 @@ SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus @@ -205,9 +223,9 @@ MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a -# new page for each member. If set to NO, the documentation of a member will be -# part of the file/class/namespace that contains it. +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO @@ -226,7 +244,12 @@ TAB_SIZE = 4 # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) ALIASES = @@ -264,19 +287,28 @@ OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is +# Fortran), use: inc=Fortran f=C. # -# Note For files without extension you can use no_extension as a placeholder. +# Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. @@ -285,7 +317,7 @@ EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. +# documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. @@ -293,10 +325,19 @@ EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 5 + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES @@ -318,7 +359,7 @@ BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. @@ -336,13 +377,20 @@ SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first +# tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent @@ -401,7 +449,7 @@ LOOKUP_CACHE_SIZE = 0 # Build related configuration options #--------------------------------------------------------------------------- -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. @@ -411,35 +459,41 @@ LOOKUP_CACHE_SIZE = 0 EXTRACT_ALL = NO -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = YES -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES -# This flag is only useful for Objective-C code. When set to YES local methods, +# This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO only methods in the interface are +# included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. @@ -464,21 +518,21 @@ HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set -# to NO these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be +# (class|struct|union) declarations. If set to NO, these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO these +# documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. @@ -492,21 +546,28 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES upper-case letters are also +# names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. +# (including Cygwin) ands Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the +# their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = YES +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -534,14 +595,14 @@ INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. +# name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. Note that +# name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. @@ -586,27 +647,25 @@ SORT_BY_SCOPE_NAME = NO STRICT_PROTO_MATCHING = NO -# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the -# todo list. This list is created by putting \todo commands in the -# documentation. +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES -# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the -# test list. This list is created by putting \test commands in the -# documentation. +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. @@ -631,8 +690,8 @@ ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES the list -# will mention the files that were used to generate the documentation. +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES @@ -677,11 +736,10 @@ LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. +# search path. See also \cite for info how to create references. CITE_BIB_FILES = @@ -697,7 +755,7 @@ CITE_BIB_FILES = QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. @@ -705,7 +763,7 @@ QUIET = YES WARNINGS = YES -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. @@ -722,12 +780,19 @@ WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. # The default value is: NO. WARN_NO_PARAMDOC = YES +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated @@ -751,7 +816,7 @@ WARN_LOGFILE = # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with -# spaces. +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = src @@ -759,7 +824,7 @@ INPUT = src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of # possible encodings. # The default value is: UTF-8. @@ -767,12 +832,17 @@ INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.c \ *.h @@ -859,6 +929,10 @@ IMAGE_PATH = # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. INPUT_FILTER = @@ -868,11 +942,15 @@ INPUT_FILTER = # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for +# INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. @@ -920,7 +998,7 @@ INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. +# entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO @@ -932,7 +1010,7 @@ REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. @@ -952,12 +1030,12 @@ SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version +# (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # @@ -1009,7 +1087,7 @@ IGNORE_PREFIX = # Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES @@ -1071,13 +1149,15 @@ HTML_FOOTER = HTML_STYLESHEET = -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1093,9 +1173,9 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to +# will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. @@ -1124,12 +1204,24 @@ HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via Javascript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have Javascript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. @@ -1153,13 +1245,13 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1198,7 +1290,7 @@ DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output @@ -1221,28 +1313,28 @@ GENERATE_HTMLHELP = NO CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = -# The GENERATE_CHI flag controls if a separate .chi index file is generated ( -# YES) or that it should be included in the master .chm file ( NO). +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = -# The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1274,7 +1366,7 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1282,7 +1374,7 @@ QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1291,7 +1383,7 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1299,7 +1391,7 @@ QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1307,7 +1399,7 @@ QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = @@ -1356,7 +1448,7 @@ DISABLE_INDEX = NO # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has @@ -1384,7 +1476,7 @@ ENUM_VALUES_PER_LINE = 1 TREEVIEW_WIDTH = 250 -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1400,7 +1492,7 @@ EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # @@ -1412,8 +1504,8 @@ FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# https://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. @@ -1439,8 +1531,8 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://www.mathjax.org/mathjax @@ -1499,9 +1591,9 @@ SERVER_BASED_SEARCH = NO # external search engine pointed to by the SEARCHENGINE_URL option to obtain the # search results. # -# Doxygen ships with an example indexer ( doxyindexer) and search engine +# Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). +# Xapian (see: https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1512,9 +1604,9 @@ EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will return the search results when EXTERNAL_SEARCH is enabled. # -# Doxygen ships with an example indexer ( doxyindexer) and search engine +# Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Xapian (see: https://xapian.org/). See the section "External Indexing and # Searching" for details. # This tag requires that the tag SEARCHENGINE is set to YES. @@ -1550,7 +1642,7 @@ EXTRA_SEARCH_MAPPINGS = # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- -# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output. +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. GENERATE_LATEX = NO @@ -1566,22 +1658,36 @@ LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. # -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. +# Note that when not enabling USE_PDFLATEX the default is latex when enabling +# USE_PDFLATEX the default is pdflatex and when in the later case latex is +# chosen this is overwritten by pdflatex. For specific output languages the +# default can have been set differently, this depends on the implementation of +# the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. +# Note: This tag is used in the Makefile / make.bat. +# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file +# (.tex). # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. MAKEINDEX_CMD_NAME = makeindex -# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX +# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to +# generate index for LaTeX. In case there is no backslash (\) as first character +# it will be automatically added in the LaTeX code. +# Note: This tag is used in the generated output file (.tex). +# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. +# The default value is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_MAKEINDEX_CMD = makeindex + +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1599,9 +1705,12 @@ COMPACT_LATEX = NO PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names -# that should be included in the LaTeX output. To get the times font for -# instance you can specify -# EXTRA_PACKAGES=times +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1615,23 +1724,36 @@ EXTRA_PACKAGES = # # Note: Only use a user-defined header if you know what you are doing! The # following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will -# replace them by respectively the title of the page, the current date and time, -# only the current date, the version number of doxygen, the project name (see -# PROJECT_NAME), or the project number (see PROJECT_NUMBER). +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. # # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output # directory. Note that the files will be copied as-is; there are no commands or @@ -1649,8 +1771,8 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = NO -# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES to get a +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a # higher quality PDF documentation. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1685,17 +1807,33 @@ LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See -# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# https://en.wikipedia.org/wiki/BibTeX and \cite for more info. # The default value is: plain. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_BIB_STYLE = plain +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + +# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) +# path from which the emoji images will be read. If a relative path is entered, +# it will be relative to the LATEX_OUTPUT directory. If left blank the +# LATEX_OUTPUT directory will be used. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EMOJI_DIRECTORY = + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- -# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The # RTF output is optimized for Word 97 and may not look too pretty with other RTF # readers/editors. # The default value is: NO. @@ -1710,7 +1848,7 @@ GENERATE_RTF = NO RTF_OUTPUT = rtf -# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1730,9 +1868,9 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# configuration file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the # default style sheet that doxygen normally uses. @@ -1741,17 +1879,27 @@ RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. +# similar to doxygen's configuration file. A template extensions file can be +# generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- -# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for # classes and files. # The default value is: NO. @@ -1795,7 +1943,7 @@ MAN_LINKS = NO # Configuration options related to the XML output #--------------------------------------------------------------------------- -# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that # captures the structure of the code including all documentation. # The default value is: NO. @@ -1809,7 +1957,7 @@ GENERATE_XML = NO XML_OUTPUT = xml -# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to # the XML output. Note that enabling this will significantly increase the size # of the XML output. @@ -1818,11 +1966,18 @@ XML_OUTPUT = xml XML_PROGRAMLISTING = YES +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include +# namespace members in file scope as well, matching the HTML output. +# The default value is: NO. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_NS_MEMB_FILE_SCOPE = NO + #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- -# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files # that can be used to generate PDF. # The default value is: NO. @@ -1836,14 +1991,23 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- -# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen -# Definitions (see http://autogen.sf.net) file that captures the structure of -# the code including all documentation. Note that this feature is still -# experimental and incomplete at the moment. +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# the structure of the code including all documentation. Note that this feature +# is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO @@ -1852,7 +2016,7 @@ GENERATE_AUTOGEN_DEF = NO # Configuration options related to the Perl module output #--------------------------------------------------------------------------- -# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module # file that captures the structure of the code including all documentation. # # Note that this feature is still experimental and incomplete at the moment. @@ -1860,7 +2024,7 @@ GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO -# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI # output from the Perl module output. # The default value is: NO. @@ -1868,9 +2032,9 @@ GENERATE_PERLMOD = NO PERLMOD_LATEX = NO -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely # formatted so it can be parsed by a human reader. This is useful if you want to -# understand what is going on. On the other hand, if this tag is set to NO the +# understand what is going on. On the other hand, if this tag is set to NO, the # size of the Perl module output will be much smaller and Perl will parse it # just the same. # The default value is: YES. @@ -1890,14 +2054,14 @@ PERLMOD_MAKEVAR_PREFIX = # Configuration options related to the preprocessor #--------------------------------------------------------------------------- -# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all # C-preprocessor directives found in the sources and include files. # The default value is: YES. ENABLE_PREPROCESSING = YES -# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names -# in the source code. If set to NO only conditional compilation will be +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be # performed. Macro expansion can be done in a controlled way by setting # EXPAND_ONLY_PREDEF to YES. # The default value is: NO. @@ -1913,7 +2077,7 @@ MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO -# If the SEARCH_INCLUDES tag is set to YES the includes files in the +# If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. @@ -1989,37 +2153,32 @@ TAGFILES = GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES all external class will be listed in the -# class index. If set to NO only the inherited external classes will be listed. +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. # The default value is: NO. ALLEXTERNALS = NO -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in -# the modules index. If set to NO, only the current project's groups will be +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. EXTERNAL_GROUPS = YES -# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in # the related pages index. If set to NO, only the current project's pages will # be listed. # The default value is: YES. EXTERNAL_PAGES = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to # NO turns the diagrams off. Note that this option also works with HAVE_DOT # disabled, but it is recommended to install and use dot, since it yields more @@ -2028,15 +2187,6 @@ PERL_PATH = /usr/bin/perl CLASS_DIAGRAMS = YES -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. @@ -2044,7 +2194,7 @@ MSCGEN_PATH = DIA_PATH = -# If set to YES, the inheritance and collaboration graphs will hide inheritance +# If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2055,7 +2205,7 @@ HIDE_UNDOC_RELATIONS = YES # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO -# The default value is: YES. +# The default value is: NO. HAVE_DOT = NO @@ -2069,7 +2219,7 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font n the dot files that doxygen +# When you want a differently looking font in the dot files that doxygen # generates you can specify the font name using DOT_FONTNAME. You need to make # sure dot is able to find the font, which can be done by putting it in a # standard location or by setting the DOTFONTPATH environment variable or by @@ -2117,7 +2267,7 @@ COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. # The default value is: NO. @@ -2169,7 +2319,8 @@ INCLUDED_BY_GRAPH = YES # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2180,7 +2331,8 @@ CALL_GRAPH = YES # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2203,13 +2355,15 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). -# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, -# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, -# gif:cairo:gd, gif:gd, gif:gd:gd and svg. +# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. # The default value is: png. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2252,6 +2406,24 @@ MSCFILE_DIRS = DIAFILE_DIRS = +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for plantuml. + +PLANTUML_CFG_FILE = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes # larger than this value, doxygen will truncate the graph, which is visualized @@ -2288,7 +2460,7 @@ MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support # this, this feature is disabled by default. @@ -2305,7 +2477,7 @@ DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot # files that are used to generate the various graphs. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. diff --git a/ltmain.sh b/ltmain.sh index d3230f7..c12c197 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.6 Debian-2.4.6-4" +VERSION="2.4.6 Debian-2.4.6-9" package_revision=2.4.6 @@ -64,7 +64,7 @@ package_revision=2.4.6 # libraries, which are installed to $pkgauxdir. # Set a version string for this script. -scriptversion=2015-10-12.13; # UTC +scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 @@ -580,16 +580,16 @@ if test yes = "$_G_HAVE_PLUSEQ_OP"; then { $debug_cmd - func_quote_arg pretty "$2" - eval "$1+=\\ \$func_quote_arg_result" + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd - func_quote_arg pretty "$2" - eval "$1=\$$1\\ \$func_quote_arg_result" + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi @@ -1091,184 +1091,88 @@ func_relative_path () } -# func_quote_portable EVAL ARG -# ---------------------------- -# Internal function to portably implement func_quote_arg. Note that we still -# keep attention to performance here so we as much as possible try to avoid -# calling sed binary (so far O(N) complexity as long as func_append is O(1)). -func_quote_portable () +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () { $debug_cmd - func_quote_portable_result=$2 - - # one-time-loop (easy break) - while true - do - if $1; then - func_quote_portable_result=`$ECHO "$2" | $SED \ - -e "$sed_double_quote_subst" -e "$sed_double_backslash"` - break + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi - # Quote for eval. - case $func_quote_portable_result in - *[\\\`\"\$]*) - case $func_quote_portable_result in - *[\[\*\?]*) - func_quote_portable_result=`$ECHO "$func_quote_portable_result" | $SED "$sed_quote_subst"` - break - ;; - esac - - func_quote_portable_old_IFS=$IFS - for _G_char in '\' '`' '"' '$' - do - # STATE($1) PREV($2) SEPARATOR($3) - set start "" "" - func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy - IFS=$_G_char - for _G_part in $func_quote_portable_result - do - case $1 in - quote) - func_append func_quote_portable_result "$3$2" - set quote "$_G_part" "\\$_G_char" - ;; - start) - set first "" "" - func_quote_portable_result= - ;; - first) - set quote "$_G_part" "" - ;; - esac - done - done - IFS=$func_quote_portable_old_IFS + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" ;; - *) ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; esac - break - done - func_quote_portable_unquoted_result=$func_quote_portable_result - case $func_quote_portable_result in - # double-quote args containing shell metacharacters to delay - # word splitting, command substitution and variable expansion - # for a subsequent eval. - # many bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_portable_result=\"$func_quote_portable_result\" - ;; - esac -} - - -# func_quotefast_eval ARG -# ----------------------- -# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', -# but optimized for speed. Result is stored in $func_quotefast_eval. -if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then - func_quotefast_eval () - { - printf -v func_quotefast_eval_result %q "$1" - } -else - func_quotefast_eval () - { - func_quote_portable false "$1" - func_quotefast_eval_result=$func_quote_portable_result - } -fi - - -# func_quote_arg MODEs ARG -# ------------------------ -# Quote one ARG to be evaled later. MODEs argument may contain zero ore more -# specifiers listed below separated by ',' character. This function returns two -# values: -# i) func_quote_arg_result -# double-quoted (when needed), suitable for a subsequent eval -# ii) func_quote_arg_unquoted_result -# has all characters that are still active within double -# quotes backslashified. Available only if 'unquoted' is specified. -# -# Available modes: -# ---------------- -# 'eval' (default) -# - escape shell special characters -# 'expand' -# - the same as 'eval'; but do not quote variable references -# 'pretty' -# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might -# later used in func_quote to get output like: 'echo "a b"' instead of -# 'echo a\ b'. This is slower than default on some shells. -# 'unquoted' -# - produce also $func_quote_arg_unquoted_result which does not contain -# wrapping double-quotes. -# -# Examples for 'func_quote_arg pretty,unquoted string': -# -# string | *_result | *_unquoted_result -# ------------+-----------------------+------------------- -# " | \" | \" -# a b | "a b" | a b -# "a b" | "\"a b\"" | \"a b\" -# * | "*" | * -# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" -# -# Examples for 'func_quote_arg pretty,unquoted,expand string': -# -# string | *_result | *_unquoted_result -# --------------+---------------------+-------------------- -# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" -func_quote_arg () -{ - _G_quote_expand=false - case ,$1, in - *,expand,*) - _G_quote_expand=: - ;; - esac - - case ,$1, in - *,pretty,*|*,expand,*|*,unquoted,*) - func_quote_portable $_G_quote_expand "$2" - func_quote_arg_result=$func_quote_portable_result - func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result - ;; - *) - # Faster quote-for-eval for some shells. - func_quotefast_eval "$2" - func_quote_arg_result=$func_quotefast_eval_result - ;; - esac -} - - -# func_quote MODEs ARGs... -# ------------------------ -# Quote all ARGs to be evaled later and join them into single command. See -# func_quote_arg's description for more info. -func_quote () -{ - $debug_cmd - _G_func_quote_mode=$1 ; shift - func_quote_result= - while test 0 -lt $#; do - func_quote_arg "$_G_func_quote_mode" "$1" - if test -n "$func_quote_result"; then - func_append func_quote_result " $func_quote_arg_result" + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" else - func_append func_quote_result "$func_quote_arg_result" + func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. @@ -1311,8 +1215,8 @@ func_show_eval () _G_cmd=$1 _G_fail_exp=${2-':'} - func_quote_arg pretty,expand "$_G_cmd" - eval "func_notquiet $func_quote_arg_result" + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" @@ -1337,8 +1241,8 @@ func_show_eval_locale () _G_fail_exp=${2-':'} $opt_quiet || { - func_quote_arg expand,pretty "$_G_cmd" - eval "func_echo $func_quote_arg_result" + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { @@ -1466,7 +1370,7 @@ func_lt_ver () #! /bin/sh # Set a version string for this script. -scriptversion=2015-10-12.13; # UTC +scriptversion=2015-10-07.11; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 @@ -1676,8 +1580,8 @@ func_run_hooks () # ' # # No change in '$@' (ignored completely by this hook). There is # # no need to do the equivalent (but slower) action: -# # func_quote eval ${1+"$@"} -# # my_options_prep_result=$func_quote_result +# # func_quote_for_eval ${1+"$@"} +# # my_options_prep_result=$func_quote_for_eval_result # false # } # func_add_hook func_options_prep my_options_prep @@ -1713,8 +1617,8 @@ func_run_hooks () # done # # if $args_changed; then -# func_quote eval ${1+"$@"} -# my_silent_option_result=$func_quote_result +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result # fi # # $args_changed @@ -1781,8 +1685,8 @@ func_options () if $_G_rc_options; then func_options_result=$_G_res_var else - func_quote eval ${1+"$@"} - func_options_result=$func_quote_result + func_quote_for_eval ${1+"$@"} + func_options_result=$func_quote_for_eval_result fi $_G_rc_options @@ -1925,8 +1829,8 @@ func_parse_options () if $_G_rc_parse_options; then # save modified positional parameters for caller - func_quote eval ${1+"$@"} - func_parse_options_result=$func_quote_result + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result fi $_G_rc_parse_options @@ -2237,7 +2141,7 @@ include the following information: compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname $scriptversion Debian-2.4.6-4 + version: $progname $scriptversion Debian-2.4.6-9 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` @@ -2471,8 +2375,8 @@ libtool_options_prep () if $_G_rc_lt_options_prep; then # Pass back the list of options. - func_quote eval ${1+"$@"} - libtool_options_prep_result=$func_quote_result + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result fi $_G_rc_lt_options_prep @@ -2578,8 +2482,8 @@ libtool_parse_options () if $_G_rc_lt_parse_options; then # save modified positional parameters for caller - func_quote eval ${1+"$@"} - libtool_parse_options_result=$func_quote_result + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result fi $_G_rc_lt_parse_options @@ -2639,8 +2543,8 @@ libtool_validate_options () } # Pass back the unparsed argument list - func_quote eval ${1+"$@"} - libtool_validate_options_result=$func_quote_result + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options @@ -3606,8 +3510,8 @@ func_mode_compile () esac done - func_quote_arg pretty "$libobj" - test "X$libobj" != "X$func_quote_arg_result" \ + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" @@ -3680,8 +3584,8 @@ compiler." func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result - func_quote_arg pretty "$srcfile" - qsrcfile=$func_quote_arg_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then @@ -4284,8 +4188,8 @@ func_mode_install () case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. - func_quote_arg pretty "$nonopt" - install_prog="$func_quote_arg_result " + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " arg=$1 shift else @@ -4295,8 +4199,8 @@ func_mode_install () # The real first argument should be the name of the installation program. # Aesthetically quote it. - func_quote_arg pretty "$arg" - func_append install_prog "$func_quote_arg_result" + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; @@ -4353,12 +4257,12 @@ func_mode_install () esac # Aesthetically quote the argument. - func_quote_arg pretty "$arg" - func_append install_prog " $func_quote_arg_result" + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then - func_quote_arg pretty "$arg2" + func_quote_for_eval "$arg2" fi - func_append install_shared_prog " $func_quote_arg_result" + func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ @@ -4369,8 +4273,8 @@ func_mode_install () if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else - func_quote_arg pretty "$install_override_mode" - func_append install_shared_prog " -m $func_quote_arg_result" + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi @@ -4666,8 +4570,8 @@ func_mode_install () relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { - func_quote_arg expand,pretty "$relink_command" - eval "func_echo $func_quote_arg_result" + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else @@ -5446,8 +5350,7 @@ else if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" - func_quote_arg pretty "$ECHO" - qECHO=$func_quote_arg_result + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. @@ -5457,7 +5360,7 @@ func_fallback_echo () \$1 _LTECHO_EOF' } - ECHO=$qECHO + ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to @@ -6800,9 +6703,9 @@ func_mode_link () while test "$#" -gt 0; do arg=$1 shift - func_quote_arg pretty,unquoted "$arg" - qarg=$func_quote_arg_unquoted_result - func_append libtool_args " $func_quote_arg_result" + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then @@ -7400,9 +7303,9 @@ func_mode_link () save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs - func_quote_arg pretty "$flag" - func_append arg " $func_quote_arg_result" - func_append compiler_flags " $func_quote_arg_result" + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" @@ -7416,10 +7319,10 @@ func_mode_link () save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs - func_quote_arg pretty "$flag" - func_append arg " $wl$func_quote_arg_result" - func_append compiler_flags " $wl$func_quote_arg_result" - func_append linker_flags " $func_quote_arg_result" + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" @@ -7443,8 +7346,8 @@ func_mode_link () # -msg_* for osf cc -msg_*) - func_quote_arg pretty "$arg" - arg=$func_quote_arg_result + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: @@ -7464,12 +7367,13 @@ func_mode_link () # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer + # -fuse-ld=* Linker select flags for GCC -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ - -specs=*|-fsanitize=*) - func_quote_arg pretty "$arg" - arg=$func_quote_arg_result + -specs=*|-fsanitize=*|-fuse-ld=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" @@ -7490,15 +7394,15 @@ func_mode_link () continue else # Otherwise treat like 'Some other compiler flag' below - func_quote_arg pretty "$arg" - arg=$func_quote_arg_result + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) - func_quote_arg pretty "$arg" - arg=$func_quote_arg_result + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result ;; *.$objext) @@ -7618,8 +7522,8 @@ func_mode_link () *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. - func_quote_arg pretty "$arg" - arg=$func_quote_arg_result + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result ;; esac # arg @@ -10131,8 +10035,8 @@ EOF for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { - func_quote_arg expand,pretty "$cmd" - eval "func_echo $func_quote_arg_result" + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? @@ -10225,8 +10129,8 @@ EOF eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { - func_quote_arg expand,pretty "$cmd" - eval "func_echo $func_quote_arg_result" + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? @@ -10700,12 +10604,12 @@ EOF elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else - func_quote_arg pretty "$var_value" - relink_command="$var=$func_quote_arg_result; export $var; $relink_command" + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done - func_quote_arg pretty,unquoted "(cd `pwd`; $relink_command)" - relink_command=$func_quote_arg_unquoted_result + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. @@ -10945,14 +10849,13 @@ EOF elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else - func_quote_arg pretty,unquoted "$var_value" - relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - func_quote_arg pretty,unquoted "$relink_command" - relink_command=$func_quote_arg_unquoted_result + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi diff --git a/src/PCSC/ifdhandler.h b/src/PCSC/ifdhandler.h index a2f9f73..5f596d9 100644 --- a/src/PCSC/ifdhandler.h +++ b/src/PCSC/ifdhandler.h @@ -673,7 +673,7 @@ don't mind loading a new driver for each reader then ignore @p Lun. @param[out] Value Value of the desired data This function is also called when the application uses the PC/SC -SCardGetAttrib() function. The list of supported tags is not limited. +SCardSetAttrib() function. The list of supported tags is not limited. @return Error codes @retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) diff --git a/src/PCSC/pcsclite.h b/src/PCSC/pcsclite.h index 801c806..304380d 100644 --- a/src/PCSC/pcsclite.h +++ b/src/PCSC/pcsclite.h @@ -279,7 +279,7 @@ extern const SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci, g_rgSCardRawPci; #define INFINITE 0xFFFFFFFF /**< Infinite timeout */ #endif -#define PCSCLITE_VERSION_NUMBER "1.8.25" /**< Current version */ +#define PCSCLITE_VERSION_NUMBER "1.8.26" /**< Current version */ /** Maximum readers context (a slot is count as a reader) */ #define PCSCLITE_MAX_READERS_CONTEXTS 16 diff --git a/src/PCSC/reader.h b/src/PCSC/reader.h index 7dae763..7c8a802 100644 --- a/src/PCSC/reader.h +++ b/src/PCSC/reader.h @@ -187,7 +187,7 @@ typedef struct uint8_t bEntryValidationCondition; /**< Conditions under which PIN entry should * be considered complete */ uint8_t bNumberMessage; /**< Number of messages to display for PIN verification */ - uint16_t wLangId; /**< Language for messages */ + uint16_t wLangId; /**< Language for messages. https://docs.microsoft.com/en-us/windows/win32/intl/language-identifier-constants-and-strings */ uint8_t bMsgIndex; /**< Message index (should be 00) */ uint8_t bTeoPrologue[3]; /**< T=1 block prologue field to use (fill with 00) */ uint32_t ulDataLength; /**< length of Data to be sent to the ICC */ @@ -224,7 +224,7 @@ typedef struct uint8_t bEntryValidationCondition; /**< Conditions under which PIN entry should * be considered complete */ uint8_t bNumberMessage; /**< Number of messages to display for PIN verification*/ - uint16_t wLangId; /**< Language for messages */ + uint16_t wLangId; /**< Language for messages. https://docs.microsoft.com/en-us/windows/win32/intl/language-identifier-constants-and-strings */ uint8_t bMsgIndex1; /**< index of 1st prompting message */ uint8_t bMsgIndex2; /**< index of 2d prompting message */ uint8_t bMsgIndex3; /**< index of 3d prompting message */ diff --git a/src/auth.c b/src/auth.c index 1d06b3f..681833c 100644 --- a/src/auth.c +++ b/src/auth.c @@ -80,10 +80,12 @@ unsigned IsClientAuthorized(int socket, const char* action, const char* reader) return 0; } - authority = polkit_authority_get_sync(NULL, NULL); + authority = polkit_authority_get_sync(NULL, &error); if (authority == NULL) { - Log1(PCSC_LOG_CRITICAL, "polkit_authority_get_sync failed"); + Log2(PCSC_LOG_CRITICAL, "polkit_authority_get_sync failed: %s", + error->message); + g_error_free(error); return 0; } diff --git a/src/configfile.c b/src/configfile.c index 035e14c..441bd95 100644 --- a/src/configfile.c +++ b/src/configfile.c @@ -1937,9 +1937,18 @@ int evaluatetoken(char *pcToken) } else { + SerialReader *new_reader_list = NULL; reader_list_size++; - reader_list = realloc(reader_list, reader_list_size * + new_reader_list = realloc(reader_list, reader_list_size * sizeof(SerialReader)); + if (new_reader_list == NULL) + free(reader_list); + reader_list = new_reader_list; + } + if (reader_list == NULL) + { + tok_error("No Memory"); + return 1; } /* end marker */ diff --git a/src/configfile.l b/src/configfile.l index 63397e3..8a7edb7 100644 --- a/src/configfile.l +++ b/src/configfile.l @@ -216,9 +216,18 @@ int evaluatetoken(char *pcToken) } else { + SerialReader *new_reader_list = NULL; reader_list_size++; - reader_list = realloc(reader_list, reader_list_size * + new_reader_list = realloc(reader_list, reader_list_size * sizeof(SerialReader)); + if (new_reader_list == NULL) + free(reader_list); + reader_list = new_reader_list; + } + if (reader_list == NULL) + { + tok_error("No Memory"); + return 1; } /* end marker */ diff --git a/src/misc.h b/src/misc.h index a498b46..ac35723 100644 --- a/src/misc.h +++ b/src/misc.h @@ -44,7 +44,9 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) || \ defined(__SUNPRO_C) && __SUNPRO_C >= 0x590 #define INTERNAL __attribute__ ((visibility("hidden"))) +#ifndef PCSC_API #define PCSC_API __attribute__ ((visibility("default"))) +#endif #elif defined(__SUNPRO_C) && __SUNPRO_C >= 0x550 /* http://wikis.sun.com/display/SunStudio/Macros+for+Shared+Library+Symbol+Visibility */ #define INTERNAL __hidden diff --git a/src/pcscd.h b/src/pcscd.h index f20ead3..72d4e96 100644 --- a/src/pcscd.h +++ b/src/pcscd.h @@ -49,7 +49,7 @@ #define PCSCLITE_CSOCK_NAME PCSCLITE_IPC_DIR "/pcscd.comm" -#define PCSCLITE_VERSION_NUMBER "1.8.25" /**< Current version */ +#define PCSCLITE_VERSION_NUMBER "1.8.26" /**< Current version */ #define PCSCLITE_STATUS_POLL_RATE 400000 /**< Status polling rate */ #define PCSCLITE_LOCK_POLL_RATE 100000 /**< Lock polling rate */ diff --git a/src/pcscdaemon.c b/src/pcscdaemon.c index 2b28b17..45d622a 100644 --- a/src/pcscdaemon.c +++ b/src/pcscdaemon.c @@ -211,6 +211,7 @@ static void *signal_thread(void *arg) if (SIGTERM == sig) { Log1(PCSC_LOG_INFO, "Direct suicide"); + ExitValue = EXIT_SUCCESS; at_exit(); } diff --git a/src/simclist.c b/src/simclist.c index fac019a..659aab9 100644 --- a/src/simclist.c +++ b/src/simclist.c @@ -44,8 +44,10 @@ /* disable asserts */ #ifndef SIMCLIST_DEBUG +#ifndef NDEBUG #define NDEBUG #endif +#endif #include @@ -1222,7 +1224,7 @@ int list_dump_filedescriptor(const list_t *restrict l, int fd, size_t *restrict /* speculation confirmed */ WRITE_ERRCHECK(fd, ser_buf, bufsize); } else { /* speculation found broken */ - WRITE_ERRCHECK(fd, & bufsize, sizeof(size_t)); + WRITE_ERRCHECK(fd, &bufsize, sizeof(bufsize)); WRITE_ERRCHECK(fd, ser_buf, bufsize); } free(ser_buf); @@ -1245,7 +1247,7 @@ int list_dump_filedescriptor(const list_t *restrict l, int fd, size_t *restrict } WRITE_ERRCHECK(fd, x->data, bufsize); } else { - WRITE_ERRCHECK(fd, &bufsize, sizeof(size_t)); + WRITE_ERRCHECK(fd, &bufsize, sizeof(bufsize)); WRITE_ERRCHECK(fd, x->data, bufsize); } } @@ -1337,7 +1339,7 @@ int list_restore_filedescriptor(list_t *restrict l, int fd, size_t *restrict len if (NULL == buf) return -1; for (cnt = 0; cnt < header.numels; cnt++) { - READ_ERRCHECK(fd, buf, header.elemlen); + READ_ERRCHECK(fd, buf, (ssize_t) header.elemlen); list_append(l, l->attrs.unserializer(buf, & elsize)); totmemorylen += elsize; } @@ -1347,7 +1349,7 @@ int list_restore_filedescriptor(list_t *restrict l, int fd, size_t *restrict len buf = malloc(header.elemlen); if (NULL == buf) return -1; - READ_ERRCHECK(fd, buf, header.elemlen); + READ_ERRCHECK(fd, buf, (ssize_t) header.elemlen); list_append(l, buf); } totmemorylen = header.numels * header.elemlen; @@ -1362,7 +1364,7 @@ int list_restore_filedescriptor(list_t *restrict l, int fd, size_t *restrict len buf = malloc((size_t)elsize); if (NULL == buf) return -1; - READ_ERRCHECK(fd, buf, elsize); + READ_ERRCHECK(fd, buf, (ssize_t) elsize); totreadlen += elsize; list_append(l, l->attrs.unserializer(buf, & elsize)); totmemorylen += elsize; @@ -1374,7 +1376,7 @@ int list_restore_filedescriptor(list_t *restrict l, int fd, size_t *restrict len buf = malloc(elsize); if (NULL == buf) return -1; - READ_ERRCHECK(fd, buf, elsize); + READ_ERRCHECK(fd, buf, (ssize_t) elsize); totreadlen += elsize; list_append(l, buf); } diff --git a/src/spy/Makefile.am b/src/spy/Makefile.am index 3c3daee..0a83371 100644 --- a/src/spy/Makefile.am +++ b/src/spy/Makefile.am @@ -6,6 +6,7 @@ dist_bin_SCRIPTS = pcsc-spy libpcscspy_la_SOURCES = \ libpcscspy.c +if ENABLE_DOC man_MANS = pcsc-spy.1 pcsc-spy.1: pcsc-spy.pod @@ -13,6 +14,7 @@ pcsc-spy.1: pcsc-spy.pod --center="PC/SC lite" \ --release="$(PACKAGE_NAME) $(PACKAGE_VERSION)" \ $(srcdir)/pcsc-spy.pod > $@ +endif EXTRA_DIST = install_spy.sh uninstall_spy.sh pcsc-spy.pod CLEANFILES = pcsc-spy.1 diff --git a/src/spy/Makefile.in b/src/spy/Makefile.in index 8683f3e..0384278 100644 --- a/src/spy/Makefile.in +++ b/src/spy/Makefile.in @@ -366,7 +366,7 @@ dist_bin_SCRIPTS = pcsc-spy libpcscspy_la_SOURCES = \ libpcscspy.c -man_MANS = pcsc-spy.1 +@ENABLE_DOC_TRUE@man_MANS = pcsc-spy.1 EXTRA_DIST = install_spy.sh uninstall_spy.sh pcsc-spy.pod CLEANFILES = pcsc-spy.1 all: all-am @@ -778,11 +778,11 @@ uninstall-man: uninstall-man1 .PRECIOUS: Makefile -pcsc-spy.1: pcsc-spy.pod - pod2man \ - --center="PC/SC lite" \ - --release="$(PACKAGE_NAME) $(PACKAGE_VERSION)" \ - $(srcdir)/pcsc-spy.pod > $@ +@ENABLE_DOC_TRUE@pcsc-spy.1: pcsc-spy.pod +@ENABLE_DOC_TRUE@ pod2man \ +@ENABLE_DOC_TRUE@ --center="PC/SC lite" \ +@ENABLE_DOC_TRUE@ --release="$(PACKAGE_NAME) $(PACKAGE_VERSION)" \ +@ENABLE_DOC_TRUE@ $(srcdir)/pcsc-spy.pod > $@ framework: rm -rf PCSC.framework diff --git a/src/spy/libpcscspy.c b/src/spy/libpcscspy.c index 525150a..df7b6a8 100644 --- a/src/spy/libpcscspy.c +++ b/src/spy/libpcscspy.c @@ -36,8 +36,8 @@ #define SCardControl SCardControl132 PCSC_API int32_t SCardControl132(SCARDHANDLE hCard, uint32_t dwControlCode, - const void *pbSendBuffer, uint32_t cbSendLength, - void *pbRecvBuffer, uint32_t cbRecvLength, uint32_t *lpBytesReturned); + const void *pbSendBuffer, uint32_t cbSendLength, + void *pbRecvBuffer, uint32_t cbRecvLength, uint32_t *lpBytesReturned); #endif /* function prototypes */ @@ -207,19 +207,19 @@ static void spy_line(const char *fmt, ...) static void spy_enter(const char *fname) { - struct timeval profile_time; + struct timeval profile_time; - gettimeofday(&profile_time, NULL); - spy_line(">|%d|%d|%s", profile_time.tv_sec, profile_time.tv_usec, fname); + gettimeofday(&profile_time, NULL); + spy_line(">|%ld|%ld|%s", profile_time.tv_sec, profile_time.tv_usec, fname); } static void spy_quit(const char *fname, LONG rv) { - struct timeval profile_time; + struct timeval profile_time; - gettimeofday(&profile_time, NULL); - spy_line("<|%d|%d|%s|%s|0x%08X", profile_time.tv_sec, - profile_time.tv_usec, fname, spy.pcsc_stringify_error(rv), rv); + gettimeofday(&profile_time, NULL); + spy_line("<|%ld|%ld|%s|%s|0x%08lX", profile_time.tv_sec, + profile_time.tv_usec, fname, spy.pcsc_stringify_error(rv), rv); } #define Enter() spy_enter(__FUNCTION__) @@ -248,85 +248,85 @@ static void spy_ptr_ulong(ULONG *arg) static void spy_pvoid(const void *ptr) { - spy_line("%p", ptr); + spy_line("%p", ptr); } static void spy_buffer(const unsigned char *buffer, size_t length) { - spy_long(length); + spy_long(length); - if (NULL == buffer) - spy_line("NULL"); - else - { + if (NULL == buffer) + spy_line("NULL"); + else + { /* "78 79 7A" */ - char log_buffer[length * 3 +1], *p; - size_t i; + char log_buffer[length * 3 +1], *p; + size_t i; - p = log_buffer; - log_buffer[0] = '\0'; - for (i=0; i #include #include +#ifndef NDEBUG #define NDEBUG +#endif #include #include "simclist.h" @@ -781,9 +783,9 @@ void tperrorCheck (char *pcToken_error); static list_t *ListKeys; static list_t *ListValues; -#line 785 "tokenparser.c" -#define YY_NO_INPUT 1 #line 787 "tokenparser.c" +#define YY_NO_INPUT 1 +#line 789 "tokenparser.c" #define INITIAL 0 @@ -998,10 +1000,10 @@ YY_DECL } { -#line 67 "tokenparser.l" +#line 69 "tokenparser.l" -#line 1005 "tokenparser.c" +#line 1007 "tokenparser.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -1060,41 +1062,41 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 69 "tokenparser.l" +#line 71 "tokenparser.l" {} YY_BREAK case 2: /* rule 2 can match eol */ YY_RULE_SETUP -#line 70 "tokenparser.l" +#line 72 "tokenparser.l" {} YY_BREAK case 3: YY_RULE_SETUP -#line 71 "tokenparser.l" +#line 73 "tokenparser.l" { eval_key(yytext, ListKeys); } YY_BREAK case 4: YY_RULE_SETUP -#line 72 "tokenparser.l" +#line 74 "tokenparser.l" {} YY_BREAK case 5: YY_RULE_SETUP -#line 73 "tokenparser.l" +#line 75 "tokenparser.l" { eval_value(yytext, ListValues); } YY_BREAK case 6: YY_RULE_SETUP -#line 74 "tokenparser.l" +#line 76 "tokenparser.l" { tperrorCheck(yytext); } YY_BREAK case 7: YY_RULE_SETUP -#line 75 "tokenparser.l" +#line 77 "tokenparser.l" ECHO; YY_BREAK -#line 1098 "tokenparser.c" +#line 1100 "tokenparser.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2062,7 +2064,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 75 "tokenparser.l" +#line 77 "tokenparser.l" diff --git a/src/tokenparser.l b/src/tokenparser.l index d22696e..0d58a69 100644 --- a/src/tokenparser.l +++ b/src/tokenparser.l @@ -44,7 +44,9 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#ifndef NDEBUG #define NDEBUG +#endif #include #include "simclist.h" diff --git a/src/winscard_clnt.c b/src/winscard_clnt.c index 7cd85ff..207f018 100644 --- a/src/winscard_clnt.c +++ b/src/winscard_clnt.c @@ -2329,7 +2329,7 @@ end: * - \ref SCARD_ATTR_CURRENT_W * - \ref SCARD_ATTR_DEFAULT_CLK * - \ref SCARD_ATTR_DEFAULT_DATA_RATE - * - \ref SCARD_ATTR_DEVICE_FRIENDLY_NAME\n + * - \ref SCARD_ATTR_DEVICE_FRIENDLY_NAME * Implemented by pcsc-lite if the IFD Handler (driver) returns \ref * IFD_ERROR_TAG. pcsc-lite then returns the same reader name as * returned by \ref SCardListReaders(). @@ -2366,14 +2366,16 @@ end: * @return Error code. * @retval SCARD_S_SUCCESS Successful (\ref SCARD_S_SUCCESS) * @retval SCARD_E_UNSUPPORTED_FEATURE the \p dwAttrId attribute is not supported by the driver (\ref SCARD_E_UNSUPPORTED_FEATURE) - * @retval SCARD_E_NOT_TRANSACTED the driver returned an error (\ref SCARD_E_NOT_TRANSACTED) - * @retval SCARD_E_INSUFFICIENT_BUFFER \p cbAttrLen is too big (\ref SCARD_E_INSUFFICIENT_BUFFER) - * @retval SCARD_E_INSUFFICIENT_BUFFER \p pbAttr buffer not large enough. In that case the expected buffer size is indicated in \p *pcbAttrLen (\ref SCARD_E_INSUFFICIENT_BUFFER) + * @retval SCARD_E_NOT_TRANSACTED + * - the driver returned an error (\ref SCARD_E_NOT_TRANSACTED) + * - Data exchange not successful (\ref SCARD_E_NOT_TRANSACTED) + * @retval SCARD_E_INSUFFICIENT_BUFFER + * - \p cbAttrLen is too big (\ref SCARD_E_INSUFFICIENT_BUFFER) + * - \p pbAttr buffer not large enough. In that case the expected buffer size is indicated in \p *pcbAttrLen (\ref SCARD_E_INSUFFICIENT_BUFFER) * @retval SCARD_E_INVALID_HANDLE Invalid \p hCard handle (\ref SCARD_E_INVALID_HANDLE) * @retval SCARD_E_INVALID_PARAMETER A parameter is NULL and should not (\ref SCARD_E_INVALID_PARAMETER) * @retval SCARD_E_NO_MEMORY Memory allocation failed (\ref SCARD_E_NO_MEMORY) * @retval SCARD_E_NO_SERVICE The server is not running (\ref SCARD_E_NO_SERVICE) - * @retval SCARD_E_NOT_TRANSACTED Data exchange not successful (\ref SCARD_E_NOT_TRANSACTED) * @retval SCARD_E_READER_UNAVAILABLE The reader has been removed (\ref SCARD_E_READER_UNAVAILABLE) * @retval SCARD_F_COMM_ERROR An internal communications error has been detected (\ref SCARD_F_COMM_ERROR) * @@ -3336,9 +3338,6 @@ static SCONTEXTMAP * SCardGetContextTH(SCARDCONTEXT hContext) * * @param[in] hContext Application Context to be removed. * - * @return Error code. - * @retval SCARD_S_SUCCESS Success (\ref SCARD_S_SUCCESS) - * @retval SCARD_E_INVALID_HANDLE The context \p hContext was not found (\ref SCARD_E_INVALID_HANDLE) */ static void SCardRemoveContext(SCARDCONTEXT hContext) { diff --git a/src/winscard_msg.c b/src/winscard_msg.c index bd165d0..8efa52e 100644 --- a/src/winscard_msg.c +++ b/src/winscard_msg.c @@ -51,6 +51,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include #include #include #include @@ -112,9 +113,10 @@ char *getSocketName(void) * @param[out] pdwClientID Client Connection ID. * * @retval 0 Success. - * @retval -1 Can not create the socket. - * @retval -1 The socket can not open a connection. - * @retval -1 Can not set the socket to non-blocking. + * @retval -1 + * - Can not create the socket + * - or the socket can not open a connection + * - or can not set the socket to non-blocking. */ INTERNAL int ClientSetupSession(uint32_t *pdwClientID) { @@ -169,7 +171,6 @@ INTERNAL int ClientSetupSession(uint32_t *pdwClientID) * * @param[in] dwClientID Client socket handle to be closed. * - * @retval 0 Success. */ INTERNAL void ClientCloseSession(uint32_t dwClientID) { @@ -189,8 +190,9 @@ INTERNAL void ClientCloseSession(uint32_t dwClientID) * * @retval SCARD_S_SUCCESS Success. * @retval SCARD_E_TIMEOUT Timeout. - * @retval SCARD_F_COMM_ERROR Socket is closed. - * @retval SCARD_F_COMM_ERROR A signal was received. + * @retval SCARD_F_COMM_ERROR + * - Socket is closed + * - or a signal was received. */ INTERNAL LONG MessageReceiveTimeout(uint32_t command, void *buffer_void, uint64_t buffer_size, int32_t filedes, long timeOut) @@ -211,15 +213,15 @@ INTERNAL LONG MessageReceiveTimeout(uint32_t command, void *buffer_void, /* repeat until we get the whole message */ while (remaining > 0) { - fd_set read_fd; - struct timeval timeout, now; - int selret; + struct pollfd read_fd; + struct timeval now; + int pollret; long delta; gettimeofday(&now, NULL); - delta = time_sub(&now, &start); + delta = time_sub(&now, &start) / 1000; - if (delta > timeOut*1000) + if (delta > timeOut) { /* we already timed out */ retval = SCARD_E_TIMEOUT; @@ -227,22 +229,20 @@ INTERNAL LONG MessageReceiveTimeout(uint32_t command, void *buffer_void, } /* remaining time to wait */ - delta = timeOut*1000 - delta; + delta = timeOut - delta; - FD_ZERO(&read_fd); - FD_SET(filedes, &read_fd); + read_fd.fd = filedes; + read_fd.events = POLLIN; + read_fd.revents = 0; - timeout.tv_sec = delta/1000000; - timeout.tv_usec = delta - timeout.tv_sec*1000000; - - selret = select(filedes + 1, &read_fd, NULL, NULL, &timeout); + pollret = poll(&read_fd, 1, delta); /* try to read only when socket is readable */ - if (selret > 0) + if (pollret > 0) { int readed; - if (!FD_ISSET(filedes, &read_fd)) + if (!(read_fd.revents & POLLIN)) { /* very strange situation. it should be an assert really */ retval = SCARD_F_COMM_ERROR; @@ -270,7 +270,7 @@ INTERNAL LONG MessageReceiveTimeout(uint32_t command, void *buffer_void, break; } } - } else if (selret == 0) + } else if (pollret == 0) { /* is the daemon still there? */ retval = SCardCheckDaemonAvailability(); @@ -350,8 +350,9 @@ INTERNAL LONG MessageSendWithHeader(uint32_t command, uint32_t dwClientID, * * @retval SCARD_S_SUCCESS Success * @retval SCARD_E_TIMEOUT Timeout. - * @retval SCARD_F_COMM_ERROR Socket is closed. - * @retval SCARD_F_COMM_ERROR A signal was received. + * @retval SCARD_F_COMM_ERROR + * - Socket is closed + * - or a signal was received. */ INTERNAL LONG MessageSend(void *buffer_void, uint64_t buffer_size, int32_t filedes) @@ -367,20 +368,21 @@ INTERNAL LONG MessageSend(void *buffer_void, uint64_t buffer_size, /* repeat until all data is written */ while (remaining > 0) { - fd_set write_fd; - int selret; + struct pollfd write_fd; + int pollret; - FD_ZERO(&write_fd); - FD_SET(filedes, &write_fd); + write_fd.fd = filedes; + write_fd.events = POLLOUT; + write_fd.revents = 0; - selret = select(filedes + 1, NULL, &write_fd, NULL, NULL); + pollret = poll(&write_fd, 1, -1); /* try to write only when the file descriptor is writable */ - if (selret > 0) + if (pollret > 0) { int written; - if (!FD_ISSET(filedes, &write_fd)) + if (!(write_fd.revents & POLLOUT)) { /* very strange situation. it should be an assert really */ retval = SCARD_F_COMM_ERROR; @@ -417,7 +419,7 @@ INTERNAL LONG MessageSend(void *buffer_void, uint64_t buffer_size, break; } } - } else if (selret == 0) + } else if (pollret == 0) { /* timeout */ retval = SCARD_E_TIMEOUT; @@ -448,8 +450,9 @@ INTERNAL LONG MessageSend(void *buffer_void, uint64_t buffer_size, * @param[in] filedes Socket handle. * * @retval SCARD_S_SUCCESS Success. - * @retval SCARD_F_COMM_ERROR Socket is closed. - * @retval SCARD_F_COMM_ERROR A signal was received. + * @retval SCARD_F_COMM_ERROR + * - Socket is closed + * - or a signal was received. */ INTERNAL LONG MessageReceive(void *buffer_void, uint64_t buffer_size, int32_t filedes) @@ -465,20 +468,21 @@ INTERNAL LONG MessageReceive(void *buffer_void, uint64_t buffer_size, /* repeat until we get the whole message */ while (remaining > 0) { - fd_set read_fd; - int selret; + struct pollfd read_fd; + int pollret; - FD_ZERO(&read_fd); - FD_SET(filedes, &read_fd); + read_fd.fd = filedes; + read_fd.events = POLLIN; + read_fd.revents = 0; - selret = select(filedes + 1, &read_fd, NULL, NULL, NULL); + pollret = poll(&read_fd, 1 , -1); /* try to read only when socket is readable */ - if (selret > 0) + if (pollret > 0) { int readed; - if (!FD_ISSET(filedes, &read_fd)) + if (!(read_fd.revents & POLLIN)) { /* very strange situation. it should be an assert really */ retval = SCARD_F_COMM_ERROR; diff --git a/src/winscard_msg_srv.c b/src/winscard_msg_srv.c index 7287279..126e7d2 100644 --- a/src/winscard_msg_srv.c +++ b/src/winscard_msg_srv.c @@ -115,9 +115,10 @@ static int ProcessCommonChannelRequest(/*@out@*/ uint32_t *pdwClientID) * * @return Error code. * @retval 0 Success - * @retval -1 Can not create the socket. - * @retval -1 Can not bind the socket to the file \c PCSCLITE_CSOCK_NAME. - * @retval -1 Can not put the socket in listen mode. + * @retval -1 + * - Can not create the socket + * - or Can not bind the socket to the file \c PCSCLITE_CSOCK_NAME + * - or Can not put the socket in listen mode. */ INTERNAL int32_t InitializeSocket(void) { diff --git a/src/winscard_svc.c b/src/winscard_svc.c index b845827..cdeac33 100644 --- a/src/winscard_svc.c +++ b/src/winscard_svc.c @@ -379,11 +379,13 @@ static void * ContextThread(LPVOID newContext) if ((veStr.major != PROTOCOL_VERSION_MAJOR) || (veStr.minor != PROTOCOL_VERSION_MINOR)) { - Log3(PCSC_LOG_CRITICAL, "Client protocol is %d:%d", + Log1(PCSC_LOG_CRITICAL, + "Communication protocol mismatch!"); + Log3(PCSC_LOG_ERROR, "Client protocol is %d:%d", veStr.major, veStr.minor); - Log3(PCSC_LOG_CRITICAL, "Server protocol is %d:%d", + Log3(PCSC_LOG_ERROR, "Server protocol is %d:%d", PROTOCOL_VERSION_MAJOR, PROTOCOL_VERSION_MINOR); - veStr.rv = SCARD_E_NO_SERVICE; + veStr.rv = SCARD_E_SERVICE_STOPPED; } /* set the server protocol version */