New upstream version 1.9.6

This commit is contained in:
Ludovic Rousseau 2022-05-11 17:31:16 +02:00
parent 8360e0e1aa
commit 6bed2b05f1
36 changed files with 4172 additions and 3031 deletions

View File

@ -1,3 +1,19 @@
1.9.6: Ludovic Rousseau
11 May 2022
- do not fail reader removal in some specific cases (USB/Thunderbolt port)
- improve documentation regarding /etc/reader.conf.d/
- SCardGetStatusChange: speedup the case DISABLE_AUTO_POWER_ON
- configure:
. add --disable-strict option
By default the compiler arguments are now:
-Wall -Wextra -Wno-unused-parameter -Werror ${CFLAGS}
. fail if flex is not found
- fix different data races
- pcscdaemon: -v displays internal constants values:
MAX_READERNAME & PCSCLITE_MAX_READERS_CONTEXTS
- Some other minor improvements
1.9.5: Ludovic Rousseau
4 December 2021
- pcscd: autoexit even if no client connects
@ -6,11 +22,13 @@
- Add and use tag TAG_IFD_DEVICE_REMOVED
- UnitaryTests: port code to Python 3
1.9.4: Ludovic Rousseau
1 October 2021
- fix a memory leak when libusb is used for hotplug (i.e. non-Linux
systems)
1.9.3: Ludovic Rousseau
6 August 2021
- fix a stupid regression with systemd introduced in the previous version

View File

@ -1,4 +1,736 @@
commit d92b5d4fad5dea95ce8d12fac07fe1eec2150ad1 (HEAD -> master)
commit c783224e5109258a17856f9ef90c044093bfc949 (HEAD -> master, zotac/master, origin/master, origin/HEAD, github/master)
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed May 11 17:06:28 2022 +0200
Release 1.9.6
Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
ChangeLog | 18 ++++++++++++++++++
configure.ac | 2 +-
2 files changed, 19 insertions(+), 1 deletion(-)
commit 28f9f0e249d9378e34e887bc6006acdcd0b9f539
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Tue May 10 21:52:37 2022 +0200
Fix warning reported by clang scan-build
readerfactory.c:622:7: warning: Value stored to 'ret' is never read [deadcode.DeadStores]
ret = IFDSetCapabilities(sReadersContexts[i],
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/readerfactory.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit c906ccf5ccfb8ac0fb0e8fece0a1405f2327e269
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Tue May 10 21:50:26 2022 +0200
Fix warning reported by clang scan-build
pcscdaemon.c:750:2: warning: Value stored to 'rv' is never read [deadcode.DeadStores]
rv = HPSearchHotPluggables();
^ ~~~~~~~~~~~~~~~~~~~~~~~
src/pcscdaemon.c | 2 ++
1 file changed, 2 insertions(+)
commit a3e09df033e024541314bc6bb7dba6f4b5d05d6e
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Tue May 3 21:23:13 2022 +0200
libudev: do not fail removal if the device has no parent
With some USB devices (like Yubikey) a new USB bus is created when the
device is inserted. The USB bus is then destroyed when the token is
removed.
The USB device has no parent any more and the call to
udev_device_get_parent_with_subsystem_devtype() fails. The device is
then NOT removed and you get a loop of:
ccid_usb.c:886:WriteUSB() write failed (3/2): LIBUSB_ERROR_NO_DEVICE
src/ifdwrapper.c:364:IFDStatusICC() Card not transacted: 617
src/eventhandler.c:336:EHStatusHandlerThread() Error communicating to: Yubico YubiKey OTP+FIDO+CCID 00 00
Closes: https://github.com/LudovicRousseau/PCSC/issues/125
Thanks to oddlama for the bug report
src/hotplug_libudev.c | 20 --------------------
1 file changed, 20 deletions(-)
commit a2f8a23685d2ff7bd607bafbea4ab3c0ecfc6c37 (debug/master)
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Apr 3 15:37:26 2022 +0200
SCardTransmit(): check the reception buffer is large enough
This check is already made on the server side at winscard_svc.c line
683.
But the client may be connected to a rogue server. So double check does
not hurt.
Thanks to Coverity for the bug report:
CID 1503364 (#1 of 1): Untrusted loop bound (TAINTED_SCALAR)
15. tainted_data: Passing tainted expression scTransmitStruct.pcbRecvLength to MessageReceive, which uses it as a loop boundary.
src/winscard_clnt.c | 7 +++++++
1 file changed, 7 insertions(+)
commit 2977de7b4101e53f7b1fde7df32fd4173e6af51b
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Apr 3 15:28:41 2022 +0200
SCardControl(): check the reception buffer is large enough
This check is already made on the server side at winscard_svc.c line
737.
But the client may be connected to a rogue server. So double check does
not hurt.
Thanks to Coverity for the bug report:
CID 1503367 (#1 of 1): Untrusted loop bound (TAINTED_SCALAR)
10. tainted_data: Passing tainted expression scControlStruct.dwBytesReturned to MessageReceive, which uses it as a loop boundary.
src/winscard_clnt.c | 8 ++++++++
1 file changed, 8 insertions(+)
commit a07ca483f24bcefcf0c81c4bf497f4225ee9227b
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Apr 3 15:12:48 2022 +0200
testpcsc: simplify code
Remove a test code duplication
Thanks to Coverity for the bug report:
CID 1503368 (#1 of 1): Untrusted loop bound (TAINTED_SCALAR)
45. tainted_data: Using tainted variable iReader as a loop boundary.
src/testpcsc.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
commit cda0df14731c6b5e11521564b0b13eb89c1fe0eb
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Apr 3 14:58:01 2022 +0200
HPAddDevice(): fix memory leak in case of error
Thansk to Coverity for the bug report:
CID 1503363 (#1 of 1): Resource leak (RESOURCE_LEAK)
26. leaked_storage: Variable deviceName going out of scope leaks the storage it points to.
src/hotplug_libudev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 3f89340785934785cf1490d3e788eefb25c50a69
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Fri Mar 25 17:26:14 2022 +0100
configure.ac: fail if flex is not found
Thanks to Ian Norton for the bug report
Closes https://github.com/LudovicRousseau/PCSC/issues/124
configure.ac | 4 ++++
1 file changed, 4 insertions(+)
commit dfd05d56b7a0f415e2d8c44cd4de7eb9091eb2f3
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Fri Feb 18 10:35:44 2022 +0100
Makefile.am: do not include pcsclite.h in archive
The file src/PCSC/pcsclite.h is generated from src/PCSC/pcsclite.h.in by
./configure
No need to include it in the tarball archive.
Also no need to patch the .h in additon to the .h.in to update the value
of PCSCLITE_MAX_READERS_CONTEXTS as done in the Fedora package.
src/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit c7e62a42e8536f4657b35a08e619fc62da09d83e
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Fri Feb 18 10:30:50 2022 +0100
Makefile.am: do not include pcscd.h in archive
The file pcscd.h is generated from pcscd.h.in by ./configure
No need to include it in the tarball archive.
src/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 3835a22cd359c95940b10fd9eec3c76c77b97c14
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Feb 16 11:59:11 2022 +0100
Fix compiler warning: comparison of integers of different signs
winscard_svc.c:441:18: warning: comparison of integers of different signs: 'uint32_t' (aka 'unsigned int') and 'LONG' (aka 'int') [-Wsign-compare]
if (waStr.rv != SCARD_F_INTERNAL_ERROR)
~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~
Thanks to Александр for the bug report
Fixes: https://github.com/LudovicRousseau/PCSC/issues/120
src/winscard_svc.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
commit 7aa2e8fd024c1ddbaf786a27575d23c7fa1a9d4e
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Feb 12 18:39:33 2022 +0100
pcscdaemon: -v displays internal constants values
If the option -v|--version is used then pcscd displays 2 constant
values: MAX_READERNAME & PCSCLITE_MAX_READERS_CONTEXTS
It is interesting to display PCSCLITE_MAX_READERS_CONTEXTS because
Fedora includes a patch to increase the value from 16 (default) to 48.
This change will help diagnose problems like Fedora + flatpak
https://github.com/LudovicRousseau/PCSC/issues/118
src/pcscdaemon.c | 2 ++
1 file changed, 2 insertions(+)
commit c88055cebe0cd435c5415832726fc978538c563f
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Feb 12 18:37:50 2022 +0100
pcscdaemon: update copyright date
src/pcscdaemon.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
commit 8d3ac33ff515e4eb61b8903efa68771347d530a8
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Feb 12 18:36:52 2022 +0100
pcscdaemon: code reformat
src/pcscdaemon.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 7e56d2773be27bb2e2935ee80a6deb5f47f1c936
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Feb 12 18:25:45 2022 +0100
pcscd.h.in: remove unused MAX_DEVICENAME
src/pcscd.h.in | 1 -
1 file changed, 1 deletion(-)
commit 9b485539159396ad866edc9ede7548feed3623c4
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Feb 12 18:18:38 2022 +0100
hotplug_libusb: use asprintf(3) instead of MAX_DEVICENAME
src/hotplug_libusb.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
commit d0cebfb784a9e22e9fa0d4dc29f84c9cf1f8b33c
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Feb 12 18:16:51 2022 +0100
hotplug_macosx: use asprintf(3) instead of MAX_DEVICENAME
src/hotplug_macosx.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
commit 111788c902daf09c81b47487e014c2cd9bcce19d
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Fri Feb 11 17:15:53 2022 +0100
Fix compiler warning: variable newReaderConfig set but not used
If "--disable-serial" is used we get:
pcscdaemon.c:263:15: warning: variable newReaderConfig set but not used [-Wunused-but-set-variable]
263 | char *newReaderConfig;
| ^~~~~~~~~~~~~~~
This issue was discovered while playing with PC/SC in flatpak(1)
projects.
src/pcscdaemon.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
commit c49ea4bf88f08070a695f7d05f28db72a0dbad7b
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Feb 6 16:52:53 2022 +0100
ISSUE_TEMPLATE.md: add "Issue" section
### Issue
* What do you do?
* What result do you expect?
* What result do you get instead?
.github/ISSUE_TEMPLATE.md | 6 ++++++
1 file changed, 6 insertions(+)
commit dcee5370b33f2e2ff6556d6a435e817cc0eca969
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Jan 22 17:19:01 2022 +0100
SCardGetStatusChange: speedup the case DISABLE_AUTO_POWER_ON
If DISABLE_AUTO_POWER_ON is defined then we do not waste time waiting
for the card to be powered. The card may not be powered before long.
Since we wait PCSCLITE_STATUS_POLL_RATE (400000 µs) for each card, the
delay can be very long for an 8 slots reader (sysmoOCTSIM):
400ms * 8 = 3.2 seconds
or very very long for a 96 slots reader (sysmoSIMBANK-96):
400ms * 96 = 38.4 seconds
src/winscard_clnt.c | 2 ++
1 file changed, 2 insertions(+)
commit 731e929d2f1c1d6c6db03a6337f35cf4fd1c12fb (debug-zotac/master)
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Dec 19 17:42:02 2021 +0100
Initialize Atomic field of struct RdrCliHandles
src/readerfactory.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 0e78fde711a28c0de8a46371207469466f41e490
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Dec 19 17:34:38 2021 +0100
Initialize Atomic fields of struct ReaderContext
The elements of array READER_CONTEXT *
sReadersContexts[PCSCLITE_MAX_READERS_CONTEXTS] are dynamically allocated
so they also need to be dynamically initialized for atomic fields.
src/readerfactory.c | 4 ++++
1 file changed, 4 insertions(+)
commit 84555bcdcdd3b014f414710ffca2c4350cb25aba
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 18:57:17 2021 +0100
github actions: add --enable-debugatr
.github/workflows/build.yml | 1 +
1 file changed, 1 insertion(+)
commit 9d54ed3fe1d89d539bdadcc63b5a7ef098c9231e
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 18:56:56 2021 +0100
github actions: reformat
.github/workflows/build.yml | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
commit d942a8c895760191257ddcb792fdeb7ac2a7ef24
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 18:48:06 2021 +0100
github actions: run "make distcheck" only for --disable-strict
.github/workflows/build.yml | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
commit 451daab067b23718e179f4b6931c5f07fd21487a
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 18:40:20 2021 +0100
github action; remove double make
.github/workflows/build.yml | 1 -
1 file changed, 1 deletion(-)
commit 8d2e26ddfa613c0a411fcf4d07aa7e5f374eecc4
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 12:06:19 2021 +0100
github actions: build default config
.github/workflows/build.yml | 53 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
commit 5d920fb14b8320f6ea82036df89bde7431e0f828
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 14:58:04 2021 +0100
Fix compiler warning for --enable-embedded
debuglog.c: In function DebugLogSetCategory:
debuglog.c:89:9: error: return with a value, in function returning void [-Werror=return-type]
89 | return 0;
| ^
debuglog.c:85:15: note: declared here
85 | INTERNAL void DebugLogSetCategory(const int dbginfo)
| ^~~~~~~~~~~~~~~~~~~
src/debuglog.c | 2 --
1 file changed, 2 deletions(-)
commit 8650c062eed45e25fa05e35dbc8b5130cf8ab061
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 15:03:53 2021 +0100
Fix compiler warnings for --enable-embedded
readerfactory.c: In function RFAddReader:
readerfactory.c:392:7: error: variable log_level set but not used [-Werror=unused-but-set-variable]
392 | int log_level = PCSC_LOG_ERROR;
| ^~~~~~~~~
CC pcscd-hotplug_libusb.o
readerfactory.c: In function RFInitializeReader:
readerfactory.c:1143:7: error: variable log_level set but not used [-Werror=unused-but-set-variable]
1143 | int log_level = PCSC_LOG_CRITICAL;
| ^~~~~~~~~
src/PCSC/debuglog.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
commit 9124a59d8f1a8536f0b46f5ef2a1b4a1711f96b2
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 14:34:05 2021 +0100
configure: add --disable-strict option
By default the compiler arguments are now:
-Wall -Wextra -Wno-unused-parameter -Werror ${CFLAGS}
configure.ac | 11 +++++++++++
1 file changed, 11 insertions(+)
commit 5f6519a7b25b31d1d5fbfde70a3083741f824715
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 11:51:15 2021 +0100
hotplug_generic: remove useless #include
src/hotplug_generic.c | 2 --
1 file changed, 2 deletions(-)
commit 618359945ede2de12bbe53f5cbafea3c3c608111
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 11:49:42 2021 +0100
hotplug_generic: remove dead code
src/hotplug_generic.c | 5 -----
1 file changed, 5 deletions(-)
commit 25db7bc5504cb74336d45224ed33bd4ea88e835f
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Wed Dec 15 11:48:52 2021 +0100
hotplug_generic: Fix compiler warnings:
hotplug_generic.c:53:6: warning: no previous prototype for HPSearchHotPluggables [-Wmissing-prototypes]
53 | LONG HPSearchHotPluggables(void)
| ^~~~~~~~~~~~~~~~~~~~~
hotplug_generic.c:58:7: warning: no previous prototype for HPRegisterForHotplugEvents [-Wmissing-prototypes]
58 | ULONG HPRegisterForHotplugEvents(void)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
hotplug_generic.c:63:6: warning: no previous prototype for HPStopHotPluggables [-Wmissing-prototypes]
63 | LONG HPStopHotPluggables(void)
| ^~~~~~~~~~~~~~~~~~~
hotplug_generic.c:68:6: warning: no previous prototype for HPReCheckSerialReaders [-Wmissing-prototypes]
68 | void HPReCheckSerialReaders(void)
| ^~~~~~~~~~~~~~~~~~~~~~
src/hotplug_generic.c | 2 ++
1 file changed, 2 insertions(+)
commit a4bdfd2eb6e908c8306fe421137a83573ba05d8c
Author: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Date: Tue Dec 14 08:20:59 2021 +0100
src/hotplug_generic.c: fix build without lib{udev,usb}
Fix the following build failure without lib{udev,usb} raised since
version 1.9.5 and
https://github.com/LudovicRousseau/PCSC/commit/6f8f170db3c88c59a5ddb5ae5319b921a901a6aa:
/home/giuliobenetti/autobuild/run/instance-2/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/11.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: pcscd-pcscdaemon.o: in function `signal_thread':
pcscdaemon.c:(.text+0x444): undefined reference to `HPReCheckSerialReaders'
Fixes:
- http://autobuild.buildroot.org/results/6cf323229f32967aa554418410dc94b7094d09af
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
src/hotplug_generic.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit d56ed18dbebc4423506ce7f61d3e3bcf4bdc4cb0
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Dec 12 17:26:09 2021 +0100
Remove mutex and use _Atomic instead
Remove the mutex "reference_lock" used to protect modifications of
"reference".
"reference" is now "_Atomic int" so +1 and -1 operations are managed by
C11 language itself.
src/readerfactory.c | 8 --------
src/readerfactory.h | 3 +--
2 files changed, 1 insertion(+), 10 deletions(-)
commit c2d6e38e0a3d871718b8f06b37fa04aa4c245eb2
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Dec 12 16:56:32 2021 +0100
Fix race with dwEventStatus
The problem is (in part) with the switch() that may read the variable
more than once.
==================
WARNING: ThreadSanitizer: data race (pid=10828)
Write of size 8 at 0x7b040000ae78 by thread T6 (mutexes: write M0):
#0 RFSetReaderEventState PCSC/src/readerfactory.c:1321:32 (pcscd+0x4c45ce)
#1 EHStatusHandlerThread PCSC/src/eventhandler.c:382:11 (pcscd+0x4bee54)
Previous read of size 8 at 0x7b040000ae78 by thread T8:
#0 RFCheckReaderEventState PCSC/src/readerfactory.c:1350:24 (pcscd+0x4c46c6)
#1 SCardStatus PCSC/src/winscard.c:1286:7 (pcscd+0x4ce7b5)
#2 ContextThread PCSC/src/winscard_svc.c:635:16 (pcscd+0x4d0cc1)
Location is heap block of size 16 at 0x7b040000ae70 allocated by thread T8:
#0 malloc <null> (pcscd+0x42a65c)
#1 RFAddReaderHandle PCSC/src/readerfactory.c:1249:14 (pcscd+0x4c43b4)
#2 SCardConnect PCSC/src/winscard.c:491:7 (pcscd+0x4ccc16)
#3 ContextThread PCSC/src/winscard_svc.c:502:16 (pcscd+0x4d0a70)
Mutex M0 (0x7b4c000000a0) created at:
#0 pthread_mutex_init <null> (pcscd+0x42d2fd)
#1 RFAddReader PCSC/src/readerfactory.c:329:8 (pcscd+0x4c1d18)
#2 HPAddDevice PCSC/src/hotplug_libudev.c:534:8 (pcscd+0x4cba1c)
#3 HPEstablishUSBNotifications PCSC/src/hotplug_libudev.c:668:6 (pcscd+0x4cb4d4)
Thread T6 (tid=11122, running) created by thread T2 at:
#0 pthread_create <null> (pcscd+0x42be8b)
#1 ThreadCreate PCSC/src/utils.c:184:8 (pcscd+0x4cc2dc)
#2 EHSpawnEventHandler PCSC/src/eventhandler.c:237:7 (pcscd+0x4beb59)
#3 RFAddReader PCSC/src/readerfactory.c:426:8 (pcscd+0x4c21b9)
#4 HPAddDevice PCSC/src/hotplug_libudev.c:534:8 (pcscd+0x4cba1c)
#5 HPEstablishUSBNotifications PCSC/src/hotplug_libudev.c:668:6 (pcscd+0x4cb4d4)
Thread T8 (tid=11173, running) created by main thread at:
#0 pthread_create <null> (pcscd+0x42be8b)
#1 ThreadCreate PCSC/src/utils.c:184:8 (pcscd+0x4cc2dc)
#2 CreateContextThread PCSC/src/winscard_svc.c:236:7 (pcscd+0x4cfd8b)
#3 SVCServiceRunLoop PCSC/src/pcscdaemon.c:134:9 (pcscd+0x4c1082)
#4 main PCSC/src/pcscdaemon.c:786:2 (pcscd+0x4c09c4)
SUMMARY: ThreadSanitizer: data race PCSC/src/readerfactory.c:1321:32 in RFSetReaderEventState
==================
src/readerfactory.c | 4 +++-
src/readerfactory.h | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
commit 4a2fb8f770ec307c6bca50b8176674dedab2a205
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Dec 12 15:44:24 2021 +0100
readerfactory.h: fix data race with contexts field
The .contexts field is used in read/write from different threads. We
must protect the accesses by declaring it _Atomic (from C11).
Thanks to andrei-datcu for the patch
"No data races in EHStatusHandlerThread #112"
https://github.com/LudovicRousseau/PCSC/pull/112
src/readerfactory.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 49655255c7c5519cdd61045ea5d3cefb72f8ae7b
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Dec 12 15:40:27 2021 +0100
readerfactory.h: fix data race with hLockId
"volatile" does not help solve data races in multi-thread programs.
See https://en.cppreference.com/w/c/language/volatile
" Note that volatile variables are not suitable for communication
between threads; they do not offer atomicity, synchronization, or memory
ordering. A read from a volatile variable that is modified by another
thread without synchronization or concurrent modification from two
unsynchronized threads is undefined behavior due to a data race. "
We must use "_Atomic" from C11 instead.
Thanks to andrei-datcu for the patch
"No data races in EHStatusHandlerThread #112"
https://github.com/LudovicRousseau/PCSC/pull/112
src/readerfactory.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit e46aad0c3571bd5f9da4cd4544fa3d6201dc3890
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Dec 12 15:25:32 2021 +0100
pcscdaemon.c: Fix data race for AraKiri variable
Issue reported by clang ThreadSanitizer
WARNING: ThreadSanitizer: data race (pid=14419)
Read of size 1 at 0x000000f3a9c8 by main thread:
#0 SVCServiceRunLoop <null> (pcscd+0x4c0da9)
#1 main <null> (pcscd+0x4c0694)
Previous write of size 1 at 0x000000f3a9c8 by thread T1:
#0 signal_thread <null> (pcscd+0x4c0aca)
As if synchronized via sleep:
#0 nanosleep <null> (pcscd+0x4297dd)
#1 SYS_USleep <null> (pcscd+0x4c6c36)
#2 SVCServiceRunLoop <null> (pcscd+0x4c0cef)
#3 main <null> (pcscd+0x4c0694)
Location is global 'AraKiri' of size 1 at 0x000000f3a9c8 (pcscd+0x000000f3a9c8)
Thread T1 (tid=14421, running) created by main thread at:
#0 pthread_create <null> (pcscd+0x42be9b)
#1 main <null> (pcscd+0x4c01c8)
SUMMARY: ThreadSanitizer: data race (/home/rousseau/sc/costa/PCSC/src/pcscd+0x4c0da9) in SVCServiceRunLoop
src/pcscdaemon.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 7e63856e6661b67a84871bfd4f4783f9b971509a
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Dec 5 14:31:44 2021 +0100
pcscd.8: improve documentation of --config
doc/pcscd.8.in | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
commit e706590870f2422921bf24b680df84efedf52b1f
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sun Dec 5 14:21:30 2021 +0100
pcscd: improve messages about reader.conf.d
Thanks to Kirill Elagin
" Misleading references to /etc/reader.conf throughout the documentation #115 "
https://github.com/LudovicRousseau/PCSC/issues/115
src/pcscdaemon.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
commit 68da917fb086e318eac2910877e2c87f9f49b370
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Dec 4 21:46:42 2021 +0100
configure.ac: better documentation for --disable-serial
Thanks to Kirill Elagin
" Misleading references to /etc/reader.conf throughout the documentation #115 "
https://github.com/LudovicRousseau/PCSC/issues/115
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 0fb14511c3820499837e2e6c1ec4f760816ed0fc
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Dec 4 21:45:02 2021 +0100
configfile.l: update reader.conf warning for USB
Thanks to Kirill Elagin
" Misleading references to /etc/reader.conf throughout the documentation #115 "
https://github.com/LudovicRousseau/PCSC/issues/115
src/configfile.l | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit ded8c3246fb16d133ed5a5c3f288583f016ba462
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Dec 4 21:43:12 2021 +0100
pcscd.8: update /etc/reader.conf.d/ documentation
Thanks to Kirill Elagin
" Misleading references to /etc/reader.conf throughout the documentation #115 "
https://github.com/LudovicRousseau/PCSC/issues/115
doc/pcscd.8.in | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
commit e4afdbad265601170e4cfa2f304a513d863c3b77
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Dec 4 17:54:09 2021 +0100
reader.conf.5: update /etc/reader.conf.d/ documentation
Thanks to Kirill Elagin
" Misleading references to /etc/reader.conf throughout the documentation #115 "
https://github.com/LudovicRousseau/PCSC/issues/115
doc/reader.conf.5.in | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
commit 1f99fa0bc497db6c376968d7fe996b7c669b11e4
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Dec 4 17:37:13 2021 +0100
Remove useless src/utils/
"installifd" is for non-USB drivers. Not very usefull any more
"formaticc" can be replaced by scriptor from pcsc-tools
src/utils/Makefile.am | 14 ---
src/utils/README | 27 -----
src/utils/formaticc.c | 316 -------------------------------------------------
src/utils/installifd.c | 166 --------------------------
src/utils/sample.ibm | 1 -
src/utils/sample.in | 6 -
src/utils/sample.out | 1 -
7 files changed, 531 deletions(-)
commit 2d52b510be2b77d266f8de89d10029fd67b46783
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Dec 4 17:32:21 2021 +0100
README: improve documentation about /etc/reader.conf.d/
Thanks to Kirill Elagin
" Misleading references to /etc/reader.conf throughout the documentation #115 "
https://github.com/LudovicRousseau/PCSC/issues/115
README | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
commit 9a24ac2f978d6a762eaf62b56a65a3426c39e822
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Dec 4 17:19:31 2021 +0100
configure.ac: update --enable-confdir= documentation
The default value is "${sysconfdir}/reader.conf.d" and not
"/etc/reader.conf.d".
This makes it more explicit that ${sysconfdir} is used.
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit d92b5d4fad5dea95ce8d12fac07fe1eec2150ad1 (tag: 1.9.5)
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Dec 4 13:16:36 2021 +0100
@ -36,7 +768,7 @@ Date: Sat Dec 4 13:23:53 2021 +0100
etc/Makefile.am | 4 ++++
1 file changed, 4 insertions(+)
commit 4b39499ac201116a90dee5151dcc7b5af6ac153d (origin/master, origin/HEAD, github/master)
commit 4b39499ac201116a90dee5151dcc7b5af6ac153d
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
Date: Sat Dec 4 12:46:18 2021 +0100

View File

@ -235,6 +235,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@

23
README
View File

@ -61,23 +61,20 @@ By running pcscd under a priveledged account you can link to
libpcsclite.so and it will act as a client to the pcscd allowing multiple
applications to be run under non-priveledged accounts.
Then type make install to copy etc/reader.conf to
/etc/reader.conf and the libraries to /usr/local/lib. If you choose
not to have your reader.conf in /etc then use --enable-confdir=DIR
Then type "make install" to copy the libraries to /usr/local/lib. If you
choose not to have your reader configuration file in /etc/reader.conf.d/
then use --enable-confdir=DIR
You must be root to do make install in the default locations.
Be sure to edit the /etc/reader.conf file to fit your needs and make sure
your IFD Handler driver is located in the path specified as LIBRARYPATH
in reader.conf. If you are using a reader with multiple smart card slots
all you have to do is define a different FRIENDLYNAME in the reader.conf
for each reader. Both will have the same information otherwise.
Be sure to edit the /etc/reader.conf.d/my_reader.conf file for your
reader to fit your needs and make sure your IFD Handler driver is
located in the path specified as LIBRARYPATH in my_reader.conf. If you
are using a reader with multiple smart card slots all you have to do is
define a different FRIENDLYNAME in the my_reader.conf for each reader.
Both will have the same information otherwise.
There is an config file generator in the utils directory. It is called
installifd. You may use this to generate the /etc/reader.conf file.
USB users shall not use /etc/reader.conf. pcscd will give
a warning that the file does not exist or contain anything useful.
USB users shall not use /etc/reader.conf.d/ to configure USB drivers.
There is a test program with this package:

1450
config.guess vendored

File diff suppressed because it is too large Load Diff

2847
config.sub vendored

File diff suppressed because it is too large Load Diff

337
configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.71 for pcsc-lite 1.9.5.
# Generated by GNU Autoconf 2.71 for pcsc-lite 1.9.6.
#
#
# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@ -618,8 +618,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='pcsc-lite'
PACKAGE_TARNAME='pcsc-lite'
PACKAGE_VERSION='1.9.5'
PACKAGE_STRING='pcsc-lite 1.9.5'
PACKAGE_VERSION='1.9.6'
PACKAGE_STRING='pcsc-lite 1.9.6'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@ -701,6 +701,7 @@ MANIFEST_TOOL
RANLIB
DLLTOOL
OBJDUMP
FILECMD
NM
ac_ct_DUMPBIN
DUMPBIN
@ -852,6 +853,7 @@ enable_debugatr
enable_ipcdir
enable_confdir
enable_filter
enable_strict
'
ac_precious_vars='build_alias
host_alias
@ -1422,7 +1424,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.9.5 to adapt to many kinds of systems.
\`configure' configures pcsc-lite 1.9.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1493,7 +1495,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of pcsc-lite 1.9.5:";;
short | recursive ) echo "Configuration of pcsc-lite 1.9.6:";;
esac
cat <<\_ACEOF
@ -1517,7 +1519,7 @@ Optional Features:
--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-serial do not use serial reader.conf files
--disable-usb do not use usb hotplug
--disable-libudev do not use libudev
--enable-libusb use libusb
@ -1529,10 +1531,11 @@ Optional Features:
--enable-debugatr enable ATR debug messages from pcscd
--enable-ipcdir=DIR directory containing IPC files (default /run/pcscd)
--enable-confdir=DIR directory containing reader configurations (default
/etc/reader.conf.d)
${sysconfdir}/reader.conf.d)
--disable-filter disable reader filtering using
PCSCLITE_FILTER_IGNORE_READER_NAMES and
PCSCLITE_FILTER_EXTEND_READER_NAMES
--disable-strict disable strict compile mode [enabled]
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@ -1646,7 +1649,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
pcsc-lite configure 1.9.5
pcsc-lite configure 1.9.6
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@ -2062,7 +2065,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.9.5, which was
It was created by pcsc-lite $as_me 1.9.6, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@ -3333,7 +3336,7 @@ fi
# Define the identity of the package.
PACKAGE='pcsc-lite'
VERSION='1.9.5'
VERSION='1.9.6'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@ -5529,6 +5532,10 @@ fi
rm -f conftest.l $LEX_OUTPUT_ROOT.c
fi
if test $LEX = ":"
then
as_fn_error $? "no lex or flex found" "$LINENO" 5
fi
@ -6859,8 +6866,8 @@ esac
macro_version='2.4.6'
macro_revision='2.4.6'
macro_version='2.4.7'
macro_revision='2.4.7'
@ -7271,13 +7278,13 @@ else
mingw*) lt_bad_file=conftest.nm/nofile ;;
*) lt_bad_file=/dev/null ;;
esac
case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
*$lt_bad_file* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break 2
;;
*)
case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
*/dev/null*)
lt_cv_path_NM="$tmp_nm -p"
break 2
@ -7415,7 +7422,7 @@ esac
fi
fi
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
*COFF*)
DUMPBIN="$DUMPBIN -symbols -headers"
;;
@ -7508,7 +7515,7 @@ else $as_nop
lt_cv_sys_max_cmd_len=8192;
;;
bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@ -7551,7 +7558,7 @@ else $as_nop
sysv5* | sco5v6* | sysv4.2uw2*)
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
if test -n "$kargmax"; then
lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
@ -7756,6 +7763,114 @@ esac
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
set dummy ${ac_tool_prefix}file; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_FILECMD+y}
then :
printf %s "(cached) " >&6
else $as_nop
if test -n "$FILECMD"; then
ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
case $as_dir in #(((
'') as_dir=./ ;;
*/) ;;
*) as_dir=$as_dir/ ;;
esac
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_FILECMD="${ac_tool_prefix}file"
printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
FILECMD=$ac_cv_prog_FILECMD
if test -n "$FILECMD"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
printf "%s\n" "$FILECMD" >&6; }
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
fi
fi
if test -z "$ac_cv_prog_FILECMD"; then
ac_ct_FILECMD=$FILECMD
# Extract the first word of "file", so it can be a program name with args.
set dummy file; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_prog_ac_ct_FILECMD+y}
then :
printf %s "(cached) " >&6
else $as_nop
if test -n "$ac_ct_FILECMD"; then
ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
case $as_dir in #(((
'') as_dir=./ ;;
*/) ;;
*) as_dir=$as_dir/ ;;
esac
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_FILECMD="file"
printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD
if test -n "$ac_ct_FILECMD"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
printf "%s\n" "$ac_ct_FILECMD" >&6; }
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
fi
if test "x$ac_ct_FILECMD" = x; then
FILECMD=":"
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
FILECMD=$ac_ct_FILECMD
fi
else
FILECMD="$ac_cv_prog_FILECMD"
fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
set dummy ${ac_tool_prefix}objdump; ac_word=$2
@ -7899,7 +8014,7 @@ beos*)
bsdi[45]*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
lt_cv_file_magic_cmd='/usr/bin/file -L'
lt_cv_file_magic_cmd='$FILECMD -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
@ -7933,14 +8048,14 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
freebsd* | dragonfly*)
freebsd* | dragonfly* | midnightbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
esac
@ -7954,7 +8069,7 @@ haiku*)
;;
hpux10.20* | hpux11*)
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_cmd=$FILECMD
case $host_cpu in
ia64*)
lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
@ -8001,7 +8116,7 @@ netbsd* | netbsdelf*-gnu)
newos6*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
@ -8374,13 +8489,29 @@ esac
fi
: ${AR=ar}
: ${AR_FLAGS=cr}
# Use ARFLAGS variable as AR's operation code to sync the variable naming with
# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
# higher priority because thats what people were doing historically (setting
# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
# variable obsoleted/removed.
test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
lt_ar_flags=$AR_FLAGS
# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
@ -8797,7 +8928,7 @@ esac
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Gets list of data symbols to import.
lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
# Adjust the below global symbol transforms to fixup imported variables.
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
@ -8815,20 +8946,20 @@ fi
# Transform an extracted symbol line into a proper C declaration.
# Some systems (esp. on ia64) link data and code symbols differently,
# so use this general approach.
lt_cv_sys_global_symbol_to_cdecl="sed -n"\
lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
$lt_cdecl_hook\
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
# Transform an extracted symbol line into symbol name and symbol address
lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
$lt_c_name_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
# Transform an extracted symbol line into symbol name with lib prefix and
# symbol address.
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
$lt_c_name_lib_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
@ -8852,7 +8983,7 @@ for ac_symprfx in "" "_"; do
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Fake it for dumpbin and say T for any non-static function,
# D for any global variable and I for any imported variable.
# Also find C++ and __fastcall symbols from MSVC++,
# Also find C++ and __fastcall symbols from MSVC++ or ICC,
# which start with @ or ?.
lt_cv_sys_global_symbol_pipe="$AWK '"\
" {last_section=section; section=\$ 3};"\
@ -8870,9 +9001,9 @@ for ac_symprfx in "" "_"; do
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
" ' prfx=^$ac_symprfx"
else
lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
fi
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
# Check to see that the pipe works correctly.
pipe_works=no
@ -9072,7 +9203,7 @@ case $with_sysroot in #(
fi
;; #(
/*)
lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
@ -9197,7 +9328,7 @@ ia64-*-hpux*)
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE=32
;;
@ -9218,7 +9349,7 @@ ia64-*-hpux*)
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
if test yes = "$lt_cv_prog_gnu_ld"; then
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
@ -9230,7 +9361,7 @@ ia64-*-hpux*)
;;
esac
else
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@ -9256,7 +9387,7 @@ mips64*-*linux*)
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
emul=elf
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*32-bit*)
emul="${emul}32"
;;
@ -9264,7 +9395,7 @@ mips64*-*linux*)
emul="${emul}64"
;;
esac
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*MSB*)
emul="${emul}btsmip"
;;
@ -9272,7 +9403,7 @@ mips64*-*linux*)
emul="${emul}ltsmip"
;;
esac
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*N32*)
emul="${emul}n32"
;;
@ -9296,14 +9427,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
case `/usr/bin/file conftest.o` in
case `$FILECMD conftest.o` in
*32-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
case `/usr/bin/file conftest.o` in
case `$FILECMD conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
@ -9411,7 +9542,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
case `/usr/bin/file conftest.o` in
case `$FILECMD conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
@ -10194,8 +10325,8 @@ int forced_loaded() { return 2;}
_LT_EOF
echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
$LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
echo "$AR cr libconftest.a conftest.o" >&5
$AR cr libconftest.a conftest.o 2>&5
echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5
$AR $AR_FLAGS libconftest.a conftest.o 2>&5
echo "$RANLIB libconftest.a" >&5
$RANLIB libconftest.a 2>&5
cat > conftest.c << _LT_EOF
@ -10222,16 +10353,11 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; }
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
darwin*) # darwin 5.x on
# if running on 10.5 or later, the deployment target defaults
# to the OS version, if on x86, and 10.4, the deployment
# target defaults to 10.4. Don't you love it?
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
10.0,*86*-darwin8*|10.0,*-darwin[912]*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
10.[012][,.]*)
darwin*)
case $MACOSX_DEPLOYMENT_TARGET,$host in
10.[012],*|,*powerpc*-darwin[5-8]*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
10.*|11.*)
*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
esac
;;
@ -10590,8 +10716,8 @@ esac
ofile=libtool
can_build_shared=yes
# All known linkers require a '.a' archive for static linking (except MSVC,
# which needs '.lib').
# All known linkers require a '.a' archive for static linking (except MSVC and
# ICC, which need '.lib').
libext=a
with_gnu_ld=$lt_cv_prog_gnu_ld
@ -11109,7 +11235,7 @@ lt_prog_compiler_static=
lt_prog_compiler_static='-qstaticlink'
;;
*)
case `$CC -V 2>&1 | sed 5q` in
case `$CC -V 2>&1 | $SED 5q` in
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
# Sun Fortran 8.3 passes all unrecognized flags to the linker
lt_prog_compiler_pic='-KPIC'
@ -11532,15 +11658,15 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
case $host_os in
cygwin* | mingw* | pw32* | cegcc*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# Microsoft Visual C++ or Intel C++ Compiler.
if test yes != "$GCC"; then
with_gnu_ld=no
fi
;;
interix*)
# we just hope/assume this is gcc and not c89 (= MSVC++)
# we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
with_gnu_ld=yes
;;
openbsd* | bitrig*)
@ -11595,7 +11721,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
whole_archive_flag_spec=
fi
supports_anon_versioning=no
case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
*GNU\ gold*) supports_anon_versioning=yes ;;
*\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@ -11707,6 +11833,7 @@ _LT_EOF
emximp -o $lib $output_objdir/$libname.def'
old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
enable_shared_with_static_runtimes=yes
file_list_spec='@'
;;
interix[3-9]*)
@ -11721,7 +11848,7 @@ _LT_EOF
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
@ -11764,7 +11891,7 @@ _LT_EOF
compiler_needs_object=yes
;;
esac
case `$CC -V 2>&1 | sed 5q` in
case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C 5.9
whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
compiler_needs_object=yes
@ -11776,13 +11903,14 @@ _LT_EOF
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
fi
case $cc_basename in
tcc*)
hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
export_dynamic_flag_spec='-rdynamic'
;;
xlf* | bgf* | bgxlf* | mpixlf*)
@ -11792,7 +11920,7 @@ _LT_EOF
archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
@ -11924,7 +12052,7 @@ _LT_EOF
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
aix_use_runtimelinking=no
@ -12195,12 +12323,12 @@ fi
cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# Microsoft Visual C++ or Intel C++ Compiler.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
case $cc_basename in
cl*)
# Native MSVC
cl* | icl*)
# Native MSVC or ICC
hardcode_libdir_flag_spec=' '
allow_undefined_flag=unsupported
always_export_symbols=yes
@ -12241,7 +12369,7 @@ fi
fi'
;;
*)
# Assume MSVC wrapper
# Assume MSVC and ICC wrapper
hardcode_libdir_flag_spec=' '
allow_undefined_flag=unsupported
# Tell ltmain to make .lib files, not .a files.
@ -12282,8 +12410,8 @@ fi
output_verbose_link_cmd=func_echo_all
archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
else
ld_shlibs=no
@ -12317,7 +12445,7 @@ fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
freebsd* | dragonfly*)
freebsd* | dragonfly* | midnightbsd*)
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
@ -12498,6 +12626,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
# Fabrice Bellard et al's Tiny C Compiler
ld_shlibs=yes
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
;;
esac
;;
@ -12569,6 +12698,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
emximp -o $lib $output_objdir/$libname.def'
old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
enable_shared_with_static_runtimes=yes
file_list_spec='@'
;;
osf3*)
@ -13261,7 +13391,7 @@ cygwin* | mingw* | pw32* | cegcc*)
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
;;
@ -13271,14 +13401,14 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
;;
esac
dynamic_linker='Win32 ld.exe'
;;
*,cl*)
# Native MSVC
*,cl* | *,icl*)
# Native MSVC or ICC
libname_spec='$name'
soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
library_names_spec='$libname.dll.lib'
@ -13297,7 +13427,7 @@ cygwin* | mingw* | pw32* | cegcc*)
done
IFS=$lt_save_ifs
# Convert to MSYS style.
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
;;
cygwin*)
# Convert to unix form, then to dos form, then back to unix form
@ -13334,7 +13464,7 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
*)
# Assume MSVC wrapper
# Assume MSVC and ICC wrapper
library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
@ -13367,7 +13497,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
freebsd* | dragonfly*)
freebsd* | dragonfly* | midnightbsd*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@ -14532,19 +14662,29 @@ striplib=
old_striplib=
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
printf %s "checking whether stripping libraries is possible... " >&6; }
if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
test -z "$striplib" && striplib="$STRIP --strip-unneeded"
if test -z "$STRIP"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
else
if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
old_striplib="$STRIP --strip-debug"
striplib="$STRIP --strip-unneeded"
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
else
# FIXME - insert some real tests, host_os isn't really good enough
case $host_os in
darwin*)
if test -n "$STRIP"; then
# FIXME - insert some real tests, host_os isn't really good enough
striplib="$STRIP -x"
old_striplib="$STRIP -S"
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
;;
freebsd*)
if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
old_striplib="$STRIP --strip-debug"
striplib="$STRIP --strip-unneeded"
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
@ -14557,6 +14697,7 @@ printf "%s\n" "no" >&6; }
;;
esac
fi
fi
@ -16458,6 +16599,20 @@ printf "%s\n" "#define FILTER_NAMES 1" >>confdefs.h
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} filter"
fi
# --disable-strict
# Check whether --enable-strict was given.
if test ${enable_strict+y}
then :
enableval=$enable_strict;
else $as_nop
enable_strict="yes"
fi
if test "${enable_strict}" = "yes"; then
CFLAGS="-Wall -Wextra -Wno-unused-parameter -Werror ${CFLAGS}"
fi
# Setup dist stuff
@ -17081,7 +17236,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.9.5, which was
This file was extended by pcsc-lite $as_me 1.9.6, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -17149,7 +17304,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
pcsc-lite config.status 1.9.5
pcsc-lite config.status 1.9.6
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
@ -17312,6 +17467,7 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q
lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
@ -17320,6 +17476,7 @@ want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`'
AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
@ -17440,6 +17597,7 @@ LN_S \
lt_SP2NL \
lt_NL2SP \
reload_flag \
FILECMD \
OBJDUMP \
deplibs_check_method \
file_magic_cmd \
@ -17448,7 +17606,6 @@ want_nocaseglob \
DLLTOOL \
sharedlib_from_linklib_cmd \
AR \
AR_FLAGS \
archiver_list_spec \
STRIP \
RANLIB \
@ -18401,6 +18558,9 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd
# convert \$build files to toolchain format.
to_tool_file_cmd=$lt_cv_to_tool_file_cmd
# A file(cmd) program that detects file types.
FILECMD=$lt_FILECMD
# An object symbol dumper.
OBJDUMP=$lt_OBJDUMP
@ -18425,8 +18585,11 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
# The archiver.
AR=$lt_AR
# Flags to create an archive (by configure).
lt_ar_flags=$lt_ar_flags
# Flags to create an archive.
AR_FLAGS=$lt_AR_FLAGS
AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
# How to feed a file listing to the archiver.
archiver_list_spec=$lt_archiver_list_spec
@ -18802,7 +18965,7 @@ ltmain=$ac_aux_dir/ltmain.sh
# if finds mixed CR/LF and LF-only lines. Since sed operates in
# text mode, it properly converts lines to CR/LF. This bash problem
# is reportedly fixed, but why not run on old versions too?
sed '$q' "$ltmain" >> "$cfgfile" \
$SED '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
mv -f "$cfgfile" "$ofile" ||

View File

@ -3,7 +3,7 @@
AC_PREREQ([2.69])
AC_INIT([pcsc-lite],[1.9.5])
AC_INIT([pcsc-lite],[1.9.6])
AC_CONFIG_SRCDIR(src/pcscdaemon.c)
AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip)
AC_CONFIG_HEADERS([config.h])
@ -61,6 +61,10 @@ AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_LEX([noyywrap])
if test $LEX = ":"
then
AC_MSG_ERROR([no lex or flex found])
fi
PKG_PROG_PKG_CONFIG
AM_PROG_CC_C_O
AM_PROG_AR
@ -167,7 +171,7 @@ fi
# --disable-serial
AC_ARG_ENABLE(serial,
AS_HELP_STRING([--disable-serial],[do not use serial reader.conf file]),
AS_HELP_STRING([--disable-serial],[do not use serial reader.conf files]),
[ use_serial="${enableval}" ], [ use_serial="yes" ] )
AM_CONDITIONAL(ENABLE_SERIAL, test "$use_serial" != "no")
if test "$use_serial" != "no"; then
@ -383,7 +387,7 @@ CPPFLAGS="-I\${top_srcdir}/src $CPPFLAGS"
# --enable-confdir=DIR
AC_ARG_ENABLE(confdir,
AS_HELP_STRING([--enable-confdir=DIR],[directory containing reader configurations (default /etc/reader.conf.d)]),
AS_HELP_STRING([--enable-confdir=DIR],[directory containing reader configurations (default ${sysconfdir}/reader.conf.d)]),
[confdir="${enableval}"],
[confdir="${sysconfdir}/reader.conf.d"])
@ -398,6 +402,17 @@ if test x$use_filter = xyes; then
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} filter"
fi
# --disable-strict
AC_ARG_ENABLE(
[strict],
[AS_HELP_STRING([--disable-strict],[disable strict compile mode @<:@enabled@:>@])],
,
[enable_strict="yes"]
)
if test "${enable_strict}" = "yes"; then
CFLAGS="-Wall -Wextra -Wno-unused-parameter -Werror ${CFLAGS}"
fi
# Setup dist stuff
AC_SUBST(usbdropdir)
AC_SUBST(ipcdir)

View File

@ -248,6 +248,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@

View File

@ -206,6 +206,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@

View File

@ -1,4 +1,4 @@
.TH PCSCD 8 "January 2007" Muscle "PC/SC Lite"
.TH PCSCD 8 "December 2021" Muscle "PC/SC Lite"
.SH NAME
pcscd \- PC/SC Smart Card Daemon
.
@ -12,9 +12,11 @@ pcscd \- PC/SC Smart Card Daemon
log APDUs and SW using the debug method (see
.BR \-\-debug ).
.TP
.BR \-c ", " \-\-config " \fIfile\fP"
Specifies the file \fIfile\fP as an alternate location for
.IR @PCSCLITE_CONFIG_DIR@/reader.conf .
.BR \-c ", " \-\-config " \fIdir\fP"
Specifies the directory \fIdir\fP as an alternate location for
.IR @PCSCLITE_CONFIG_DIR@/ .
The argument can also be a single configuration file (for backward
compatibility).
.TP
.BR \-f ", " \-\-foreground
Runs pcscd in the foreground and sends log messages to stderr instead of
@ -68,8 +70,8 @@ Displays the program version number
.TP
.BR \-H ", " \-\-hotplug
Ask pcscd to re-read the
.I @PCSCLITE_CONFIG_DIR@/reader.conf
file to detect added or removed non-USB readers (serial or PCMCIA).
.I @PCSCLITE_CONFIG_DIR@/my_reader.conf
files to detect added or removed non-USB readers (serial or PCMCIA).
.
.TP
.BR \-x ", " \-\-auto\-exit
@ -98,8 +100,8 @@ Smart card reader drivers are placed in the
directory. Each driver is simply an
.I .so
file. pcscd locates the driver using the
.I @PCSCLITE_CONFIG_DIR@/reader.conf
file. See the
.I @PCSCLITE_CONFIG_DIR@/my_reader.conf
files. See the
.BR reader.conf (5)
manual page for more information.
.PP
@ -108,18 +110,18 @@ Some drivers are available at \fIhttps://muscle.apdu.fr/musclecard.com/drivers.h
.SH "USB SMART CARD READER DRIVERS"
USB smart card reader drivers are located in
.I @usbdropdir@
directory as a bundle. You shall not add a USB driver in
.I @PCSCLITE_CONFIG_DIR@/reader.conf
directory as a bundle. You shall NOT add a USB driver in a
.I @PCSCLITE_CONFIG_DIR@/my_reader.conf
file.
.
.SH FILES
.I @PCSCLITE_CONFIG_DIR@/reader.conf
: Reader configuration file
.I @PCSCLITE_CONFIG_DIR@/*
: Serial reader configuration files
.PP
.I @ipcdir@/pcscd.pid
: process id of the running pcscd
.PP
.I @usbdropdir@
.I @usbdropdir@/
: directory containing bundles for USB drivers
.
.SH "SEE ALSO"

View File

@ -1,21 +1,21 @@
.TH READER.CONF 5 "August 2005" Muscle "PC/SC Lite"
.TH READER.CONF 5 "December 2021" Muscle "PC/SC Lite"
.SH NAME
reader.conf \- configuration file for pcscd readers' drivers
.
.SH DESCRIPTION
The
.I @PCSCLITE_CONFIG_DIR@/reader.conf
file contains configuration information for serial and (some) PCMCIA
.I @PCSCLITE_CONFIG_DIR@/*
files contain configuration information for serial and (some) PCMCIA
smart card readers.
.PP
USB readers SHALL NOT be configured using this file.
USB readers SHALL NOT be configured using these files.
.B pcscd
uses another mechanism to automatically load USB drivers.
.
.SH SYNTAX
The
.I @PCSCLITE_CONFIG_DIR@/reader.conf
is a regular text file. Each reader must be defined by four fields:
.I @PCSCLITE_CONFIG_DIR@/*
files are regular text file. Each reader must be defined by four fields:
.PP
FRIENDLYNAME TEXT_STRING
DEVICENAME FILENAME
@ -39,7 +39,8 @@ under FreeBSD.
.PP
The "LIBPATH" field is the filename of the driver code. The driver is
a dynamically loaded piece of code (generally a
.IR drivername.so* file).
.IR drivername.so.*
file).
.PP
The "CHANNELID" is no more used for recent drivers (IFD handler 3.0) and
has been superseded by "DEVICENAME". If you have an old driver this
@ -57,7 +58,7 @@ serial port number for a serial reader.
.
.SH DEBUGGING
In order to set up your
.I @PCSCLITE_CONFIG_DIR@/reader.conf
.I @PCSCLITE_CONFIG_DIR@/my_reader.conf
file correctly you may want to have debug messages from
.BR pcscd .
I recommend you to start

View File

@ -182,6 +182,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@

813
ltmain.sh

File diff suppressed because it is too large Load Diff

205
m4/libtool.m4 vendored
View File

@ -1,6 +1,7 @@
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is free software; the Free Software Foundation gives
@ -31,7 +32,7 @@ m4_define([_LT_COPYING], [dnl
# along with this program. If not, see <http://www.gnu.org/licenses/>.
])
# serial 58 LT_INIT
# serial 59 LT_INIT
# LT_PREREQ(VERSION)
@ -181,6 +182,7 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_CHECK_SHELL_FEATURES])dnl
m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
m4_require([_LT_CMD_RELOAD])dnl
m4_require([_LT_DECL_FILECMD])dnl
m4_require([_LT_CHECK_MAGIC_METHOD])dnl
m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
m4_require([_LT_CMD_OLD_ARCHIVE])dnl
@ -219,8 +221,8 @@ esac
ofile=libtool
can_build_shared=yes
# All known linkers require a '.a' archive for static linking (except MSVC,
# which needs '.lib').
# All known linkers require a '.a' archive for static linking (except MSVC and
# ICC, which need '.lib').
libext=a
with_gnu_ld=$lt_cv_prog_gnu_ld
@ -777,7 +779,7 @@ _LT_EOF
# if finds mixed CR/LF and LF-only lines. Since sed operates in
# text mode, it properly converts lines to CR/LF. This bash problem
# is reportedly fixed, but why not run on old versions too?
sed '$q' "$ltmain" >> "$cfgfile" \
$SED '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
mv -f "$cfgfile" "$ofile" ||
@ -1041,8 +1043,8 @@ int forced_loaded() { return 2;}
_LT_EOF
echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
$LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
echo "$AR cr libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
$AR cr libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
$AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
$RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
cat > conftest.c << _LT_EOF
@ -1066,16 +1068,11 @@ _LT_EOF
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
darwin*) # darwin 5.x on
# if running on 10.5 or later, the deployment target defaults
# to the OS version, if on x86, and 10.4, the deployment
# target defaults to 10.4. Don't you love it?
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
10.0,*86*-darwin8*|10.0,*-darwin[[912]]*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
10.[[012]][[,.]]*)
darwin*)
case $MACOSX_DEPLOYMENT_TARGET,$host in
10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
10.*|11.*)
*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
esac
;;
@ -1125,12 +1122,12 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
output_verbose_link_cmd=func_echo_all
_LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
_LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
_LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
_LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
_LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
_LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
m4_if([$1], [CXX],
[ if test yes != "$lt_cv_apple_cc_single_mod"; then
_LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
_LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
_LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
fi
],[])
else
@ -1244,7 +1241,8 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
# _LT_WITH_SYSROOT
# ----------------
AC_DEFUN([_LT_WITH_SYSROOT],
[AC_MSG_CHECKING([for sysroot])
[m4_require([_LT_DECL_SED])dnl
AC_MSG_CHECKING([for sysroot])
AC_ARG_WITH([sysroot],
[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
[Search for dependent libraries within DIR (or the compiler's sysroot
@ -1261,7 +1259,7 @@ case $with_sysroot in #(
fi
;; #(
/*)
lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
@ -1291,7 +1289,7 @@ ia64-*-hpux*)
# options accordingly.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE=32
;;
@ -1308,7 +1306,7 @@ ia64-*-hpux*)
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
if test yes = "$lt_cv_prog_gnu_ld"; then
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
@ -1320,7 +1318,7 @@ ia64-*-hpux*)
;;
esac
else
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@ -1342,7 +1340,7 @@ mips64*-*linux*)
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
emul=elf
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*32-bit*)
emul="${emul}32"
;;
@ -1350,7 +1348,7 @@ mips64*-*linux*)
emul="${emul}64"
;;
esac
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*MSB*)
emul="${emul}btsmip"
;;
@ -1358,7 +1356,7 @@ mips64*-*linux*)
emul="${emul}ltsmip"
;;
esac
case `/usr/bin/file conftest.$ac_objext` in
case `$FILECMD conftest.$ac_objext` in
*N32*)
emul="${emul}n32"
;;
@ -1378,14 +1376,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# not appear in the list.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `/usr/bin/file conftest.o` in
case `$FILECMD conftest.o` in
*32-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
case `/usr/bin/file conftest.o` in
case `$FILECMD conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
@ -1453,7 +1451,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# options accordingly.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `/usr/bin/file conftest.o` in
case `$FILECMD conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
@ -1492,9 +1490,22 @@ need_locks=$enable_libtool_lock
m4_defun([_LT_PROG_AR],
[AC_CHECK_TOOLS(AR, [ar], false)
: ${AR=ar}
: ${AR_FLAGS=cr}
_LT_DECL([], [AR], [1], [The archiver])
_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
# Use ARFLAGS variable as AR's operation code to sync the variable naming with
# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
# higher priority because thats what people were doing historically (setting
# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
# variable obsoleted/removed.
test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
lt_ar_flags=$AR_FLAGS
_LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)])
# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
_LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}],
[Flags to create an archive])
AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
[lt_cv_ar_at_file=no
@ -1713,7 +1724,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
lt_cv_sys_max_cmd_len=8192;
;;
bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@ -1756,7 +1767,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
sysv5* | sco5v6* | sysv4.2uw2*)
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
if test -n "$kargmax"; then
lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
@ -2206,18 +2217,26 @@ m4_defun([_LT_CMD_STRIPLIB],
striplib=
old_striplib=
AC_MSG_CHECKING([whether stripping libraries is possible])
if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
test -z "$striplib" && striplib="$STRIP --strip-unneeded"
if test -z "$STRIP"; then
AC_MSG_RESULT([no])
else
if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
old_striplib="$STRIP --strip-debug"
striplib="$STRIP --strip-unneeded"
AC_MSG_RESULT([yes])
else
# FIXME - insert some real tests, host_os isn't really good enough
case $host_os in
darwin*)
if test -n "$STRIP"; then
# FIXME - insert some real tests, host_os isn't really good enough
striplib="$STRIP -x"
old_striplib="$STRIP -S"
AC_MSG_RESULT([yes])
;;
freebsd*)
if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
old_striplib="$STRIP --strip-debug"
striplib="$STRIP --strip-unneeded"
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
@ -2227,6 +2246,7 @@ else
;;
esac
fi
fi
_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
_LT_DECL([], [striplib], [1])
])# _LT_CMD_STRIPLIB
@ -2548,7 +2568,7 @@ cygwin* | mingw* | pw32* | cegcc*)
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
m4_if([$1], [],[
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
;;
@ -2558,14 +2578,14 @@ m4_if([$1], [],[
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
;;
esac
dynamic_linker='Win32 ld.exe'
;;
*,cl*)
# Native MSVC
*,cl* | *,icl*)
# Native MSVC or ICC
libname_spec='$name'
soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
library_names_spec='$libname.dll.lib'
@ -2584,7 +2604,7 @@ m4_if([$1], [],[
done
IFS=$lt_save_ifs
# Convert to MSYS style.
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
;;
cygwin*)
# Convert to unix form, then to dos form, then back to unix form
@ -2621,7 +2641,7 @@ m4_if([$1], [],[
;;
*)
# Assume MSVC wrapper
# Assume MSVC and ICC wrapper
library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
@ -2654,7 +2674,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
freebsd* | dragonfly*)
freebsd* | dragonfly* | midnightbsd*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@ -3465,7 +3485,7 @@ beos*)
bsdi[[45]]*)
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
lt_cv_file_magic_cmd='/usr/bin/file -L'
lt_cv_file_magic_cmd='$FILECMD -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
@ -3499,14 +3519,14 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
freebsd* | dragonfly*)
freebsd* | dragonfly* | midnightbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
esac
@ -3520,7 +3540,7 @@ haiku*)
;;
hpux10.20* | hpux11*)
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_cmd=$FILECMD
case $host_cpu in
ia64*)
lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
@ -3567,7 +3587,7 @@ netbsd* | netbsdelf*-gnu)
newos6*)
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
lt_cv_file_magic_cmd=/usr/bin/file
lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
@ -3694,13 +3714,13 @@ else
mingw*) lt_bad_file=conftest.nm/nofile ;;
*) lt_bad_file=/dev/null ;;
esac
case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
*$lt_bad_file* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break 2
;;
*)
case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
*/dev/null*)
lt_cv_path_NM="$tmp_nm -p"
break 2
@ -3726,7 +3746,7 @@ else
# Let the user override the test.
else
AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
*COFF*)
DUMPBIN="$DUMPBIN -symbols -headers"
;;
@ -3966,7 +3986,7 @@ esac
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Gets list of data symbols to import.
lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
# Adjust the below global symbol transforms to fixup imported variables.
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
@ -3984,20 +4004,20 @@ fi
# Transform an extracted symbol line into a proper C declaration.
# Some systems (esp. on ia64) link data and code symbols differently,
# so use this general approach.
lt_cv_sys_global_symbol_to_cdecl="sed -n"\
lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
$lt_cdecl_hook\
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
# Transform an extracted symbol line into symbol name and symbol address
lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
$lt_c_name_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
# Transform an extracted symbol line into symbol name with lib prefix and
# symbol address.
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
$lt_c_name_lib_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
@ -4021,7 +4041,7 @@ for ac_symprfx in "" "_"; do
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Fake it for dumpbin and say T for any non-static function,
# D for any global variable and I for any imported variable.
# Also find C++ and __fastcall symbols from MSVC++,
# Also find C++ and __fastcall symbols from MSVC++ or ICC,
# which start with @ or ?.
lt_cv_sys_global_symbol_pipe="$AWK ['"\
" {last_section=section; section=\$ 3};"\
@ -4039,9 +4059,9 @@ for ac_symprfx in "" "_"; do
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
" ' prfx=^$ac_symprfx]"
else
lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
fi
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
# Check to see that the pipe works correctly.
pipe_works=no
@ -4329,7 +4349,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
freebsd* | dragonfly*)
freebsd* | dragonfly* | midnightbsd*)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
@ -4412,7 +4432,7 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
;;
*)
case `$CC -V 2>&1 | sed 5q` in
case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*)
# Sun C++ 5.9
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@ -4754,7 +4774,7 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
;;
*)
case `$CC -V 2>&1 | sed 5q` in
case `$CC -V 2>&1 | $SED 5q` in
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
# Sun Fortran 8.3 passes all unrecognized flags to the linker
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@ -4937,7 +4957,7 @@ m4_if([$1], [CXX], [
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
;;
pw32*)
@ -4945,7 +4965,7 @@ m4_if([$1], [CXX], [
;;
cygwin* | mingw* | cegcc*)
case $cc_basename in
cl*)
cl* | icl*)
_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
;;
*)
@ -5005,15 +5025,15 @@ dnl Note also adjust exclude_expsyms for C++ above.
case $host_os in
cygwin* | mingw* | pw32* | cegcc*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# Microsoft Visual C++ or Intel C++ Compiler.
if test yes != "$GCC"; then
with_gnu_ld=no
fi
;;
interix*)
# we just hope/assume this is gcc and not c89 (= MSVC++)
# we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
with_gnu_ld=yes
;;
openbsd* | bitrig*)
@ -5068,7 +5088,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
_LT_TAGVAR(whole_archive_flag_spec, $1)=
fi
supports_anon_versioning=no
case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in
*GNU\ gold*) supports_anon_versioning=yes ;;
*\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@ -5180,6 +5200,7 @@ _LT_EOF
emximp -o $lib $output_objdir/$libname.def'
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
_LT_TAGVAR(file_list_spec, $1)='@'
;;
interix[[3-9]]*)
@ -5194,7 +5215,7 @@ _LT_EOF
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
@ -5237,7 +5258,7 @@ _LT_EOF
_LT_TAGVAR(compiler_needs_object, $1)=yes
;;
esac
case `$CC -V 2>&1 | sed 5q` in
case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C 5.9
_LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
_LT_TAGVAR(compiler_needs_object, $1)=yes
@ -5249,13 +5270,14 @@ _LT_EOF
if test yes = "$supports_anon_versioning"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
fi
case $cc_basename in
tcc*)
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
;;
xlf* | bgf* | bgxlf* | mpixlf*)
@ -5265,7 +5287,7 @@ _LT_EOF
_LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
if test yes = "$supports_anon_versioning"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
@ -5397,7 +5419,7 @@ _LT_EOF
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
aix_use_runtimelinking=no
@ -5580,12 +5602,12 @@ _LT_EOF
cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# Microsoft Visual C++ or Intel C++ Compiler.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
case $cc_basename in
cl*)
# Native MSVC
cl* | icl*)
# Native MSVC or ICC
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
_LT_TAGVAR(always_export_symbols, $1)=yes
@ -5626,7 +5648,7 @@ _LT_EOF
fi'
;;
*)
# Assume MSVC wrapper
# Assume MSVC and ICC wrapper
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
# Tell ltmain to make .lib files, not .a files.
@ -5674,7 +5696,7 @@ _LT_EOF
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
freebsd* | dragonfly*)
freebsd* | dragonfly* | midnightbsd*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
_LT_TAGVAR(hardcode_direct, $1)=yes
@ -5815,6 +5837,7 @@ _LT_EOF
# Fabrice Bellard et al's Tiny C Compiler
_LT_TAGVAR(ld_shlibs, $1)=yes
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
;;
esac
;;
@ -5886,6 +5909,7 @@ _LT_EOF
emximp -o $lib $output_objdir/$libname.def'
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
_LT_TAGVAR(file_list_spec, $1)='@'
;;
osf3*)
@ -6656,8 +6680,8 @@ if test yes != "$_lt_caught_CXX_error"; then
cygwin* | mingw* | pw32* | cegcc*)
case $GXX,$cc_basename in
,cl* | no,cl*)
# Native MSVC
,cl* | no,cl* | ,icl* | no,icl*)
# Native MSVC or ICC
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
@ -6755,6 +6779,7 @@ if test yes != "$_lt_caught_CXX_error"; then
emximp -o $lib $output_objdir/$libname.def'
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
_LT_TAGVAR(file_list_spec, $1)='@'
;;
dgux*)
@ -6785,7 +6810,7 @@ if test yes != "$_lt_caught_CXX_error"; then
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
;;
freebsd* | dragonfly*)
freebsd* | dragonfly* | midnightbsd*)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
_LT_TAGVAR(ld_shlibs, $1)=yes
@ -6922,7 +6947,7 @@ if test yes != "$_lt_caught_CXX_error"; then
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
irix5* | irix6*)
case $cc_basename in
@ -7062,13 +7087,13 @@ if test yes != "$_lt_caught_CXX_error"; then
_LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
if test yes = "$supports_anon_versioning"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
fi
;;
*)
case `$CC -V 2>&1 | sed 5q` in
case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*)
# Sun C++ 5.9
_LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
@ -8214,6 +8239,14 @@ _LT_DECL([], [DLLTOOL], [1], [DLL creation program])
AC_SUBST([DLLTOOL])
])
# _LT_DECL_FILECMD
# ----------------
# Check for a file(cmd) program that can be used to detect file type and magic
m4_defun([_LT_DECL_FILECMD],
[AC_CHECK_TOOL([FILECMD], [file], [:])
_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types])
])# _LD_DECL_FILECMD
# _LT_DECL_SED
# ------------
# Check for a fully-functional sed program, that truncates

13
m4/ltversion.m4 vendored
View File

@ -1,6 +1,7 @@
# ltversion.m4 -- version numbers -*- Autoconf -*-
#
# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
# Inc.
# Written by Scott James Remnant, 2004
#
# This file is free software; the Free Software Foundation gives
@ -9,15 +10,15 @@
# @configure_input@
# serial 4179 ltversion.m4
# serial 4245 ltversion.m4
# This file is part of GNU Libtool
m4_define([LT_PACKAGE_VERSION], [2.4.6])
m4_define([LT_PACKAGE_REVISION], [2.4.6])
m4_define([LT_PACKAGE_VERSION], [2.4.7])
m4_define([LT_PACKAGE_REVISION], [2.4.7])
AC_DEFUN([LTVERSION_VERSION],
[macro_version='2.4.6'
macro_revision='2.4.6'
[macro_version='2.4.7'
macro_revision='2.4.7'
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
_LT_DECL(, macro_revision, 0)
])

View File

@ -52,10 +52,10 @@ pcscd_SOURCES = \
misc.h \
parser.h \
pcscdaemon.c \
pcscd.h \
pcscd.h.in \
PCSC/debuglog.h \
PCSC/ifdhandler.h \
PCSC/pcsclite.h \
PCSC/pcsclite.h.in \
PCSC/winscard.h \
PCSC/wintypes.h \
prothandler.c \

View File

@ -167,8 +167,8 @@ am__pcscd_SOURCES_DIST = auth.c auth.h atrhandler.c atrhandler.h \
configfile.h configfile.l debuglog.c dyn_generic.h dyn_hpux.c \
dyn_macosx.c dyn_unix.c eventhandler.c eventhandler.h \
hotplug_generic.c hotplug.h ifdwrapper.c ifdwrapper.h misc.h \
parser.h pcscdaemon.c pcscd.h PCSC/debuglog.h \
PCSC/ifdhandler.h PCSC/pcsclite.h PCSC/winscard.h \
parser.h pcscdaemon.c pcscd.h.in PCSC/debuglog.h \
PCSC/ifdhandler.h PCSC/pcsclite.h.in PCSC/winscard.h \
PCSC/wintypes.h prothandler.c prothandler.h readerfactory.c \
readerfactory.h simclist.c simclist.h sys_generic.h sys_unix.c \
tokenparser.l hotplug_libudev.c hotplug_libusb.c \
@ -380,6 +380,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@ -547,10 +548,10 @@ pcscd_SOURCES = \
misc.h \
parser.h \
pcscdaemon.c \
pcscd.h \
pcscd.h.in \
PCSC/debuglog.h \
PCSC/ifdhandler.h \
PCSC/pcsclite.h \
PCSC/pcsclite.h.in \
PCSC/winscard.h \
PCSC/wintypes.h \
prothandler.c \

View File

@ -89,8 +89,8 @@ enum {
#define Log0(priority) do { } while(0)
#define Log1(priority, fmt) do { } while(0)
#define Log2(priority, fmt, data) do { } while(0)
#define Log3(priority, fmt, data1, data2) do { } while(0)
#define Log2(priority, fmt, data) do {(void)priority; } while(0)
#define Log3(priority, fmt, data1, data2) do {int p = priority; (void)p; } while(0)
#define Log4(priority, fmt, data1, data2, data3) do { } while(0)
#define Log5(priority, fmt, data1, data2, data3, data4) do { } while(0)
#define Log9(priority, fmt, data1, data2, data3, data4, data5, data6, data7, data8) do { } while(0)

View File

@ -1,309 +0,0 @@
/*
* MUSCLE SmartCard Development ( https://pcsclite.apdu.fr/ )
*
* Copyright (C) 1999-2004
* David Corcoran <corcoran@musclecard.com>
* Copyright (C) 2002-2011
* Ludovic Rousseau <ludovic.rousseau@free.fr>
* Copyright (C) 2005
* Martin Paljak <martin@paljak.pri.ee>
*
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file
* @brief This keeps a list of defines for pcsc-lite.
*
* Error codes from http://msdn.microsoft.com/en-us/library/aa924526.aspx
*/
#ifndef __pcsclite_h__
#define __pcsclite_h__
#include <wintypes.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef LONG SCARDCONTEXT; /**< \p hContext returned by SCardEstablishContext() */
typedef SCARDCONTEXT *PSCARDCONTEXT;
typedef SCARDCONTEXT *LPSCARDCONTEXT;
typedef LONG SCARDHANDLE; /**< \p hCard returned by SCardConnect() */
typedef SCARDHANDLE *PSCARDHANDLE;
typedef SCARDHANDLE *LPSCARDHANDLE;
#define MAX_ATR_SIZE 33 /**< Maximum ATR size */
/* Set structure elements aligment on bytes
* http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */
#ifdef __APPLE__
#pragma pack(1)
#endif
typedef struct
{
const char *szReader;
void *pvUserData;
DWORD dwCurrentState;
DWORD dwEventState;
DWORD cbAtr;
unsigned char rgbAtr[MAX_ATR_SIZE];
}
SCARD_READERSTATE, *LPSCARD_READERSTATE;
/** Protocol Control Information (PCI) */
typedef struct
{
unsigned long dwProtocol; /**< Protocol identifier */
unsigned long cbPciLength; /**< Protocol Control Inf Length */
}
SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
extern const SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci, g_rgSCardRawPci;
/* restore default structure elements alignment */
#ifdef __APPLE__
#pragma pack()
#endif
#define SCARD_PCI_T0 (&g_rgSCardT0Pci) /**< protocol control information (PCI) for T=0 */
#define SCARD_PCI_T1 (&g_rgSCardT1Pci) /**< protocol control information (PCI) for T=1 */
#define SCARD_PCI_RAW (&g_rgSCardRawPci) /**< protocol control information (PCI) for RAW protocol */
/**
* @defgroup ErrorCodes ErrorCodes
* @brief Error code documentation
*
* The error codes descriptions are from
* http://msdn.microsoft.com/en-us/library/aa924526.aspx
*/
/** @ingroup ErrorCodes */
#define SCARD_S_SUCCESS ((LONG)0x00000000) /**< No error was encountered. */
/** @ingroup ErrorCodes */
#define SCARD_F_INTERNAL_ERROR ((LONG)0x80100001) /**< An internal consistency check failed. */
/** @ingroup ErrorCodes */
#define SCARD_E_CANCELLED ((LONG)0x80100002) /**< The action was cancelled by an SCardCancel request. */
/** @ingroup ErrorCodes */
#define SCARD_E_INVALID_HANDLE ((LONG)0x80100003) /**< The supplied handle was invalid. */
/** @ingroup ErrorCodes */
#define SCARD_E_INVALID_PARAMETER ((LONG)0x80100004) /**< One or more of the supplied parameters could not be properly interpreted. */
/** @ingroup ErrorCodes */
#define SCARD_E_INVALID_TARGET ((LONG)0x80100005) /**< Registry startup information is missing or invalid. */
/** @ingroup ErrorCodes */
#define SCARD_E_NO_MEMORY ((LONG)0x80100006) /**< Not enough memory available to complete this command. */
/** @ingroup ErrorCodes */
#define SCARD_F_WAITED_TOO_LONG ((LONG)0x80100007) /**< An internal consistency timer has expired. */
/** @ingroup ErrorCodes */
#define SCARD_E_INSUFFICIENT_BUFFER ((LONG)0x80100008) /**< The data buffer to receive returned data is too small for the returned data. */
/** @ingroup ErrorCodes */
#define SCARD_E_UNKNOWN_READER ((LONG)0x80100009) /**< The specified reader name is not recognized. */
/** @ingroup ErrorCodes */
#define SCARD_E_TIMEOUT ((LONG)0x8010000A) /**< The user-specified timeout value has expired. */
/** @ingroup ErrorCodes */
#define SCARD_E_SHARING_VIOLATION ((LONG)0x8010000B) /**< The smart card cannot be accessed because of other connections outstanding. */
/** @ingroup ErrorCodes */
#define SCARD_E_NO_SMARTCARD ((LONG)0x8010000C) /**< The operation requires a Smart Card, but no Smart Card is currently in the device. */
/** @ingroup ErrorCodes */
#define SCARD_E_UNKNOWN_CARD ((LONG)0x8010000D) /**< The specified smart card name is not recognized. */
/** @ingroup ErrorCodes */
#define SCARD_E_CANT_DISPOSE ((LONG)0x8010000E) /**< The system could not dispose of the media in the requested manner. */
/** @ingroup ErrorCodes */
#define SCARD_E_PROTO_MISMATCH ((LONG)0x8010000F) /**< The requested protocols are incompatible with the protocol currently in use with the smart card. */
/** @ingroup ErrorCodes */
#define SCARD_E_NOT_READY ((LONG)0x80100010) /**< The reader or smart card is not ready to accept commands. */
/** @ingroup ErrorCodes */
#define SCARD_E_INVALID_VALUE ((LONG)0x80100011) /**< One or more of the supplied parameters values could not be properly interpreted. */
/** @ingroup ErrorCodes */
#define SCARD_E_SYSTEM_CANCELLED ((LONG)0x80100012) /**< The action was cancelled by the system, presumably to log off or shut down. */
/** @ingroup ErrorCodes */
#define SCARD_F_COMM_ERROR ((LONG)0x80100013) /**< An internal communications error has been detected. */
/** @ingroup ErrorCodes */
#define SCARD_F_UNKNOWN_ERROR ((LONG)0x80100014) /**< An internal error has been detected, but the source is unknown. */
/** @ingroup ErrorCodes */
#define SCARD_E_INVALID_ATR ((LONG)0x80100015) /**< An ATR obtained from the registry is not a valid ATR string. */
/** @ingroup ErrorCodes */
#define SCARD_E_NOT_TRANSACTED ((LONG)0x80100016) /**< An attempt was made to end a non-existent transaction. */
/** @ingroup ErrorCodes */
#define SCARD_E_READER_UNAVAILABLE ((LONG)0x80100017) /**< The specified reader is not currently available for use. */
/** @ingroup ErrorCodes */
#define SCARD_P_SHUTDOWN ((LONG)0x80100018) /**< The operation has been aborted to allow the server application to exit. */
/** @ingroup ErrorCodes */
#define SCARD_E_PCI_TOO_SMALL ((LONG)0x80100019) /**< The PCI Receive buffer was too small. */
/** @ingroup ErrorCodes */
#define SCARD_E_READER_UNSUPPORTED ((LONG)0x8010001A) /**< The reader driver does not meet minimal requirements for support. */
/** @ingroup ErrorCodes */
#define SCARD_E_DUPLICATE_READER ((LONG)0x8010001B) /**< The reader driver did not produce a unique reader name. */
/** @ingroup ErrorCodes */
#define SCARD_E_CARD_UNSUPPORTED ((LONG)0x8010001C) /**< The smart card does not meet minimal requirements for support. */
/** @ingroup ErrorCodes */
#define SCARD_E_NO_SERVICE ((LONG)0x8010001D) /**< The Smart card resource manager is not running. */
/** @ingroup ErrorCodes */
#define SCARD_E_SERVICE_STOPPED ((LONG)0x8010001E) /**< The Smart card resource manager has shut down. */
/** @ingroup ErrorCodes */
#define SCARD_E_UNEXPECTED ((LONG)0x8010001F) /**< An unexpected card error has occurred. */
/** @ingroup ErrorCodes */
#define SCARD_E_UNSUPPORTED_FEATURE ((LONG)0x8010001F) /**< This smart card does not support the requested feature. */
/** @ingroup ErrorCodes */
#define SCARD_E_ICC_INSTALLATION ((LONG)0x80100020) /**< No primary provider can be found for the smart card. */
/** @ingroup ErrorCodes */
#define SCARD_E_ICC_CREATEORDER ((LONG)0x80100021) /**< The requested order of object creation is not supported. */
/** @ingroup ErrorCodes */
/* #define SCARD_E_UNSUPPORTED_FEATURE ((LONG)0x80100022) / **< This smart card does not support the requested feature. */
/** @ingroup ErrorCodes */
#define SCARD_E_DIR_NOT_FOUND ((LONG)0x80100023) /**< The identified directory does not exist in the smart card. */
/** @ingroup ErrorCodes */
#define SCARD_E_FILE_NOT_FOUND ((LONG)0x80100024) /**< The identified file does not exist in the smart card. */
/** @ingroup ErrorCodes */
#define SCARD_E_NO_DIR ((LONG)0x80100025) /**< The supplied path does not represent a smart card directory. */
/** @ingroup ErrorCodes */
#define SCARD_E_NO_FILE ((LONG)0x80100026) /**< The supplied path does not represent a smart card file. */
/** @ingroup ErrorCodes */
#define SCARD_E_NO_ACCESS ((LONG)0x80100027) /**< Access is denied to this file. */
/** @ingroup ErrorCodes */
#define SCARD_E_WRITE_TOO_MANY ((LONG)0x80100028) /**< The smart card does not have enough memory to store the information. */
/** @ingroup ErrorCodes */
#define SCARD_E_BAD_SEEK ((LONG)0x80100029) /**< There was an error trying to set the smart card file object pointer. */
/** @ingroup ErrorCodes */
#define SCARD_E_INVALID_CHV ((LONG)0x8010002A) /**< The supplied PIN is incorrect. */
/** @ingroup ErrorCodes */
#define SCARD_E_UNKNOWN_RES_MNG ((LONG)0x8010002B) /**< An unrecognized error code was returned from a layered component. */
/** @ingroup ErrorCodes */
#define SCARD_E_NO_SUCH_CERTIFICATE ((LONG)0x8010002C) /**< The requested certificate does not exist. */
/** @ingroup ErrorCodes */
#define SCARD_E_CERTIFICATE_UNAVAILABLE ((LONG)0x8010002D) /**< The requested certificate could not be obtained. */
/** @ingroup ErrorCodes */
#define SCARD_E_NO_READERS_AVAILABLE ((LONG)0x8010002E) /**< Cannot find a smart card reader. */
/** @ingroup ErrorCodes */
#define SCARD_E_COMM_DATA_LOST ((LONG)0x8010002F) /**< A communications error with the smart card has been detected. Retry the operation. */
/** @ingroup ErrorCodes */
#define SCARD_E_NO_KEY_CONTAINER ((LONG)0x80100030) /**< The requested key container does not exist on the smart card. */
/** @ingroup ErrorCodes */
#define SCARD_E_SERVER_TOO_BUSY ((LONG)0x80100031) /**< The Smart Card Resource Manager is too busy to complete this operation. */
/** @ingroup ErrorCodes */
#define SCARD_W_UNSUPPORTED_CARD ((LONG)0x80100065) /**< The reader cannot communicate with the card, due to ATR string configuration conflicts. */
/** @ingroup ErrorCodes */
#define SCARD_W_UNRESPONSIVE_CARD ((LONG)0x80100066) /**< The smart card is not responding to a reset. */
/** @ingroup ErrorCodes */
#define SCARD_W_UNPOWERED_CARD ((LONG)0x80100067) /**< Power has been removed from the smart card, so that further communication is not possible. */
/** @ingroup ErrorCodes */
#define SCARD_W_RESET_CARD ((LONG)0x80100068) /**< The smart card has been reset, so any shared state information is invalid. */
/** @ingroup ErrorCodes */
#define SCARD_W_REMOVED_CARD ((LONG)0x80100069) /**< The smart card has been removed, so further communication is not possible. */
/** @ingroup ErrorCodes */
#define SCARD_W_SECURITY_VIOLATION ((LONG)0x8010006A) /**< Access was denied because of a security violation. */
/** @ingroup ErrorCodes */
#define SCARD_W_WRONG_CHV ((LONG)0x8010006B) /**< The card cannot be accessed because the wrong PIN was presented. */
/** @ingroup ErrorCodes */
#define SCARD_W_CHV_BLOCKED ((LONG)0x8010006C) /**< The card cannot be accessed because the maximum number of PIN entry attempts has been reached. */
/** @ingroup ErrorCodes */
#define SCARD_W_EOF ((LONG)0x8010006D) /**< The end of the smart card file has been reached. */
/** @ingroup ErrorCodes */
#define SCARD_W_CANCELLED_BY_USER ((LONG)0x8010006E) /**< The user pressed "Cancel" on a Smart Card Selection Dialog. */
/** @ingroup ErrorCodes */
#define SCARD_W_CARD_NOT_AUTHENTICATED ((LONG)0x8010006F) /**< No PIN was presented to the smart card. */
#define SCARD_AUTOALLOCATE (DWORD)(-1) /**< see SCardFreeMemory() */
#define SCARD_SCOPE_USER 0x0000 /**< Scope in user space */
#define SCARD_SCOPE_TERMINAL 0x0001 /**< Scope in terminal */
#define SCARD_SCOPE_SYSTEM 0x0002 /**< Scope in system */
#define SCARD_SCOPE_GLOBAL 0x0003 /**< Scope is global */
#define SCARD_PROTOCOL_UNDEFINED 0x0000 /**< protocol not set */
#define SCARD_PROTOCOL_UNSET SCARD_PROTOCOL_UNDEFINED /* backward compat */
#define SCARD_PROTOCOL_T0 0x0001 /**< T=0 active protocol. */
#define SCARD_PROTOCOL_T1 0x0002 /**< T=1 active protocol. */
#define SCARD_PROTOCOL_RAW 0x0004 /**< Raw active protocol. */
#define SCARD_PROTOCOL_T15 0x0008 /**< T=15 protocol. */
#define SCARD_PROTOCOL_ANY (SCARD_PROTOCOL_T0|SCARD_PROTOCOL_T1) /**< IFD determines prot. */
#define SCARD_SHARE_EXCLUSIVE 0x0001 /**< Exclusive mode only */
#define SCARD_SHARE_SHARED 0x0002 /**< Shared mode only */
#define SCARD_SHARE_DIRECT 0x0003 /**< Raw mode only */
#define SCARD_LEAVE_CARD 0x0000 /**< Do nothing on close */
#define SCARD_RESET_CARD 0x0001 /**< Reset on close */
#define SCARD_UNPOWER_CARD 0x0002 /**< Power down on close */
#define SCARD_EJECT_CARD 0x0003 /**< Eject on close */
#define SCARD_UNKNOWN 0x0001 /**< Unknown state */
#define SCARD_ABSENT 0x0002 /**< Card is absent */
#define SCARD_PRESENT 0x0004 /**< Card is present */
#define SCARD_SWALLOWED 0x0008 /**< Card not powered */
#define SCARD_POWERED 0x0010 /**< Card is powered */
#define SCARD_NEGOTIABLE 0x0020 /**< Ready for PTS */
#define SCARD_SPECIFIC 0x0040 /**< PTS has been set */
#define SCARD_STATE_UNAWARE 0x0000 /**< App wants status */
#define SCARD_STATE_IGNORE 0x0001 /**< Ignore this reader */
#define SCARD_STATE_CHANGED 0x0002 /**< State has changed */
#define SCARD_STATE_UNKNOWN 0x0004 /**< Reader unknown */
#define SCARD_STATE_UNAVAILABLE 0x0008 /**< Status unavailable */
#define SCARD_STATE_EMPTY 0x0010 /**< Card removed */
#define SCARD_STATE_PRESENT 0x0020 /**< Card inserted */
#define SCARD_STATE_ATRMATCH 0x0040 /**< ATR matches card */
#define SCARD_STATE_EXCLUSIVE 0x0080 /**< Exclusive Mode */
#define SCARD_STATE_INUSE 0x0100 /**< Shared Mode */
#define SCARD_STATE_MUTE 0x0200 /**< Unresponsive card */
#define SCARD_STATE_UNPOWERED 0x0400 /**< Unpowered card */
#ifndef INFINITE
#define INFINITE 0xFFFFFFFF /**< Infinite timeout */
#endif
#define PCSCLITE_VERSION_NUMBER "1.9.5" /**< Current version */
/** Maximum readers context (a slot is count as a reader) */
#define PCSCLITE_MAX_READERS_CONTEXTS 16
#define MAX_READERNAME 128
#ifndef SCARD_ATR_LENGTH
#define SCARD_ATR_LENGTH MAX_ATR_SIZE /**< Maximum ATR size */
#endif
/*
* The message and buffer sizes must be multiples of 16.
* The max message size must be at least large enough
* to accomodate the transmit_struct
*/
#define MAX_BUFFER_SIZE 264 /**< Maximum Tx/Rx Buffer for short APDU */
#define MAX_BUFFER_SIZE_EXTENDED (4 + 3 + (1<<16) + 3 + 2) /**< enhanced (64K + APDU + Lc + Le + SW) Tx/Rx Buffer */
/*
* Gets a stringified error response
*/
const char *pcsc_stringify_error(const LONG);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1889,7 +1889,7 @@ int evaluatetoken(char *pcToken)
if (strstr(pcLibpath, ".bundle") != NULL)
{
Log1(PCSC_LOG_ERROR, "WARNING *************************************");
Log2(PCSC_LOG_ERROR, "WARNING: USB drivers SHOULD NOT be declared in reader.conf: %s", pcLibpath);
Log2(PCSC_LOG_ERROR, "WARNING: USB drivers SHOULD NOT be declared in a reader.conf file: %s", pcLibpath);
Log1(PCSC_LOG_ERROR, "WARNING *************************************");
}
}

View File

@ -168,7 +168,7 @@ int evaluatetoken(char *pcToken)
if (strstr(pcLibpath, ".bundle") != NULL)
{
Log1(PCSC_LOG_ERROR, "WARNING *************************************");
Log2(PCSC_LOG_ERROR, "WARNING: USB drivers SHOULD NOT be declared in reader.conf: %s", pcLibpath);
Log2(PCSC_LOG_ERROR, "WARNING: USB drivers SHOULD NOT be declared in a reader.conf file: %s", pcLibpath);
Log1(PCSC_LOG_ERROR, "WARNING *************************************");
}
}

View File

@ -85,8 +85,6 @@ void DebugLogSetLevel(const int level)
INTERNAL void DebugLogSetCategory(const int dbginfo)
{
(void)dbginfo;
return 0;
}
INTERNAL void DebugLogCategory(const int category, const unsigned char *buffer,

View File

@ -41,14 +41,9 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "pcsclite.h"
#include "hotplug.h"
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
#if !defined(__APPLE__) && !defined(HAVE_LIBUSB) && !defined(__linux__) && !defined(HAVE_LIBUDEV)
#if !defined(__APPLE__) && !defined(HAVE_LIBUSB) && !defined(HAVE_LIBUDEV)
LONG HPSearchHotPluggables(void)
{

View File

@ -331,28 +331,8 @@ static LONG HPReadBundleValues(void)
static void HPRemoveDevice(struct udev_device *dev)
{
int i;
const char *devpath;
struct udev_device *parent;
const char *sysname;
/* The device pointed to by dev contains information about
the interface. In order to get information about the USB
device, get the parent device with the subsystem/devtype pair
of "usb"/"usb_device". This will be several levels up the
tree, but the function will find it.*/
parent = udev_device_get_parent_with_subsystem_devtype(dev, "usb",
"usb_device");
if (!parent)
return;
devpath = udev_device_get_devnode(parent);
if (!devpath)
{
/* the device disapeared? */
Log1(PCSC_LOG_ERROR, "udev_device_get_devnode() failed");
return;
}
sysname = udev_device_get_sysname(dev);
if (!sysname)
{
@ -465,7 +445,7 @@ static void HPAddDevice(struct udev_device *dev)
{
Log2(PCSC_LOG_ERROR,
"Not enough reader entries. Already found %d readers", index);
return;
goto exit;
}
if (Add_Interface_In_Name)

View File

@ -42,6 +42,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "config.h"
#ifdef HAVE_LIBUSB
#define _GNU_SOURCE /* for asprintf(3) */
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
@ -606,15 +607,13 @@ static LONG HPAddHotPluggable(struct libusb_device *dev,
int i;
uint8_t iInterface = 0;
uint8_t iSerialNumber = 0;
char deviceName[MAX_DEVICENAME];
char *deviceName;
Log2(PCSC_LOG_INFO, "Adding USB device: %s", bus_device);
snprintf(deviceName, sizeof(deviceName), "usb:%04x/%04x:libusb-1.0:%s",
asprintf(&deviceName, "usb:%04x/%04x:libusb-1.0:%s",
desc.idVendor, desc.idProduct, bus_device);
deviceName[sizeof(deviceName) -1] = '\0';
pthread_mutex_lock(&usbNotifierMutex);
/* find a free entry */
@ -751,6 +750,8 @@ static LONG HPAddHotPluggable(struct libusb_device *dev,
pthread_mutex_unlock(&usbNotifierMutex);
free(deviceName);
return 1;
} /* End of function */

View File

@ -788,17 +788,16 @@ static int HPScan(void)
}
if (!found)
{
char deviceName[MAX_DEVICENAME];
char *deviceName;
/* the format should be "usb:%04x/%04x" but Apple uses the
* friendly name instead */
snprintf(deviceName, sizeof(deviceName),
"%s", a->m_driver->m_friendlyName);
deviceName[sizeof(deviceName)-1] = '\0';
asprintf(&deviceName, "%s", a->m_driver->m_friendlyName);
RFAddReader(a->m_driver->m_friendlyName,
PCSCLITE_HP_BASE_PORT + a->m_address, a->m_driver->m_libPath,
deviceName);
free(deviceName);
}
}

View File

@ -1,86 +0,0 @@
/*
* MUSCLE SmartCard Development ( https://pcsclite.apdu.fr/ )
*
* Copyright (C) 2006-2011
* Ludovic Rousseau <ludovic.rousseau@free.fr>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file
* @brief This keeps a list of defines for pcsc-lite.
*/
#ifndef __pcscd_h__
#define __pcscd_h__
#define TIME_BEFORE_SUICIDE 60
#define SCARD_RESET 0x0001 /**< Card was reset */
#define SCARD_INSERTED 0x0002 /**< Card was inserted */
#define SCARD_REMOVED 0x0004 /**< Card was removed */
#define PCSCLITE_CONFIG_DIR "/usr/local/etc/reader.conf.d"
#define PCSCLITE_IPC_DIR USE_IPCDIR
#define PCSCLITE_RUN_PID PCSCLITE_IPC_DIR "/pcscd.pid"
#define PCSCLITE_CSOCK_NAME PCSCLITE_IPC_DIR "/pcscd.comm"
#define PCSCLITE_VERSION_NUMBER "1.9.5" /**< Current version */
#define PCSCLITE_STATUS_POLL_RATE 400000 /**< Status polling rate */
#define PCSCLITE_LOCK_POLL_RATE 100000 /**< Lock polling rate */
#define PCSC_MAX_CONTEXT_THREADS 200
#define PCSC_MAX_CONTEXT_CARD_HANDLES 200
#define PCSC_MAX_READER_HANDLES 200
#define PCSCLITE_STATUS_WAIT 200000 /**< Status Change Sleep */
#define MAX_DEVICENAME 255
/** Different values for struct ReaderContext powerState field */
enum
{
POWER_STATE_UNPOWERED, /**< auto power off */
POWER_STATE_POWERED, /**< powered */
POWER_STATE_GRACE_PERIOD, /**< card was in use */
POWER_STATE_IN_USE /**< card is used */
};
/** time to wait before powering down an unused card */
#define PCSCLITE_POWER_OFF_GRACE_PERIOD 5*1000 /* 5 second */
/** normal timeout for pthCardEvent driver function when
* no card or card in use */
#define PCSCLITE_STATUS_EVENT_TIMEOUT 10*60*1000 /* 10 minutes */
/* Uncomment the next line if you do NOT want to use auto power off */
/* #define DISABLE_ON_DEMAND_POWER_ON */
/* Uncomment the next line if you do not want the card to be powered on
* when inserted */
/* #define DISABLE_AUTO_POWER_ON */
#endif

View File

@ -58,7 +58,6 @@
#define PCSC_MAX_READER_HANDLES 200
#define PCSCLITE_STATUS_WAIT 200000 /**< Status Change Sleep */
#define MAX_DEVICENAME 255
/** Different values for struct ReaderContext powerState field */
enum

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 1999-2002
* David Corcoran <corcoran@musclecard.com>
* Copyright (C) 2002-2018
* Copyright (C) 2002-2022
* Ludovic Rousseau <ludovic.rousseau@free.fr>
*
Redistribution and use in source and binary forms, with or without
@ -75,7 +75,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define FALSE 0
#endif
char AraKiri = FALSE;
_Atomic char AraKiri = FALSE;
static char Init = TRUE;
char AutoExit = FALSE;
char SocketActivated = FALSE;
@ -260,7 +260,9 @@ int main(int argc, char **argv)
int rv;
char setToForeground;
char HotPlug;
char *newReaderConfig;
#ifdef USE_SERIAL
char *newReaderConfig = NULL;
#endif
struct stat fStatBuf;
int customMaxThreadCounter = 0;
int customMaxReaderHandles = 0;
@ -293,7 +295,6 @@ int main(int argc, char **argv)
#endif
#define OPT_STRING "c:fTdhvaieCHt:r:s:xSI"
newReaderConfig = NULL;
setToForeground = FALSE;
HotPlug = FALSE;
@ -335,10 +336,12 @@ int main(int argc, char **argv)
HPForceReaderPolling = optarg ? abs(atoi(optarg)) : 1;
break;
#endif
#ifdef USE_SERIAL
case 'c':
Log2(PCSC_LOG_INFO, "using new config file: %s", optarg);
Log2(PCSC_LOG_INFO, "using new config directory: %s", optarg);
newReaderConfig = optarg;
break;
#endif
case 'f':
setToForeground = TRUE;
@ -640,14 +643,14 @@ int main(int argc, char **argv)
#ifdef USE_SERIAL
/*
* Grab the information from the reader.conf
* Grab the information from the reader.conf files
*/
if (newReaderConfig)
{
rv = RFStartSerialReaders(newReaderConfig);
if (rv != 0)
{
Log3(PCSC_LOG_CRITICAL, "invalid file %s: %s", newReaderConfig,
Log3(PCSC_LOG_CRITICAL, "invalid directory %s: %s", newReaderConfig,
strerror(errno));
at_exit();
}
@ -748,6 +751,8 @@ int main(int argc, char **argv)
#ifndef USE_SERIAL
if (rv)
at_exit();
#else
(void)rv;
#endif
rv = HPRegisterForHotplugEvents();
@ -844,11 +849,13 @@ static void print_version(void)
{
printf("%s version %s.\n", PACKAGE, VERSION);
printf("Copyright (C) 1999-2002 by David Corcoran <corcoran@musclecard.com>.\n");
printf("Copyright (C) 2001-2018 by Ludovic Rousseau <ludovic.rousseau@free.fr>.\n");
printf("Copyright (C) 2001-2022 by Ludovic Rousseau <ludovic.rousseau@free.fr>.\n");
printf("Copyright (C) 2003-2004 by Damien Sauveron <sauveron@labri.fr>.\n");
printf("Report bugs to <pcsclite-muscle@lists.infradead.org>.\n");
printf("Enabled features:%s\n", PCSCLITE_FEATURES);
printf("MAX_READERNAME: %d, PCSCLITE_MAX_READERS_CONTEXTS: %d\n",
MAX_READERNAME, PCSCLITE_MAX_READERS_CONTEXTS);
}
static void print_usage(char const * const progname)
@ -857,7 +864,9 @@ static void print_usage(char const * const progname)
printf("Options:\n");
#ifdef HAVE_GETOPT_LONG
printf(" -a, --apdu log APDU commands and results\n");
printf(" -c, --config path to reader.conf\n");
#ifdef USE_SERIAL
printf(" -c, --config new reader.conf.d path\n");
#endif
printf(" -f, --foreground run in foreground (no daemon),\n");
printf(" send logs to stdout instead of syslog\n");
printf(" -T, --color force use of colored logs\n");
@ -877,7 +886,9 @@ static void print_usage(char const * const progname)
printf(" -I, --reader-name-no-interface do not include the USB interface name in the name\n");
#else
printf(" -a log APDU commands and results\n");
printf(" -c path to reader.conf\n");
#ifdef USE_SERIAL
printf(" -c new reader.conf.d path\n");
#endif
printf(" -f run in foreground (no daemon), send logs to stdout instead of syslog\n");
printf(" -T force use of colored logs\n");
printf(" -d display debug messages.\n");

View File

@ -52,6 +52,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifdef HAVE_ALLOCA_H
#include <alloca.h>
#endif
#include <stdatomic.h>
#include "misc.h"
#include "pcscd.h"
@ -107,9 +108,7 @@ LONG _RefReader(READER_CONTEXT * sReader)
if (0 == sReader->reference)
return SCARD_E_READER_UNAVAILABLE;
pthread_mutex_lock(&sReader->reference_lock);
sReader->reference += 1;
pthread_mutex_unlock(&sReader->reference_lock);
return SCARD_S_SUCCESS;
}
@ -119,9 +118,7 @@ LONG _UnrefReader(READER_CONTEXT * sReader)
if (0 == sReader->reference)
return SCARD_E_READER_UNAVAILABLE;
pthread_mutex_lock(&sReader->reference_lock);
sReader->reference -= 1;
pthread_mutex_unlock(&sReader->reference_lock);
if (0 == sReader->reference)
removeReader(sReader);
@ -141,6 +138,9 @@ LONG RFAllocateReaderSpace(unsigned int customMaxReaderHandles)
{
sReadersContexts[i] = malloc(sizeof(READER_CONTEXT));
sReadersContexts[i]->vHandle = NULL;
atomic_init(&sReadersContexts[i]->hLockId, 0);
atomic_init(&sReadersContexts[i]->contexts, 0);
atomic_init(&sReadersContexts[i]->reference, 0);
/* Zero out each value in the struct */
memset(readerStates[i].readerName, 0, MAX_READERNAME);
@ -311,8 +311,6 @@ LONG RFAddReader(const char *readerNameLong, int port, const char *library,
sReadersContexts[dwContext]->powerState = POWER_STATE_UNPOWERED;
/* reference count */
(void)pthread_mutex_init(&sReadersContexts[dwContext]->reference_lock,
NULL);
sReadersContexts[dwContext]->reference = 1;
/* If a clone to this reader exists take some values from that clone */
@ -514,8 +512,6 @@ LONG RFAddReader(const char *readerNameLong, int port, const char *library,
sReadersContexts[dwContextB]->powerState = POWER_STATE_UNPOWERED;
/* reference count */
(void)pthread_mutex_init(&sReadersContexts[dwContextB]->reference_lock,
NULL);
sReadersContexts[dwContextB]->reference = 1;
/* Call on the parent driver to see if the slots are thread safe */
@ -623,7 +619,7 @@ LONG RFRemoveReader(const char *readerName, int port, int flags)
if ((IFD_SUCCESS) == ret && (1 == tagValue[0]))
{
tagValue[0] = 1;
ret = IFDSetCapabilities(sReadersContexts[i],
IFDSetCapabilities(sReadersContexts[i],
TAG_IFD_DEVICE_REMOVED, sizeof tagValue, tagValue);
}
}
@ -1232,7 +1228,7 @@ LONG RFAddReaderHandle(READER_CONTEXT * rContext, SCARDHANDLE hCard)
}
newHandle->hCard = hCard;
newHandle->dwEventStatus = 0;
atomic_init(&newHandle->dwEventStatus, 0);
lrv = list_append(&rContext->handlesList, newHandle);
if (lrv < 0)
@ -1313,6 +1309,7 @@ LONG RFCheckReaderEventState(READER_CONTEXT * rContext, SCARDHANDLE hCard)
{
LONG rv;
RDR_CLIHANDLES *currentHandle;
DWORD dwEventStatus;
(void)pthread_mutex_lock(&rContext->handlesList_lock);
currentHandle = list_seek(&rContext->handlesList, &hCard);
@ -1324,7 +1321,8 @@ LONG RFCheckReaderEventState(READER_CONTEXT * rContext, SCARDHANDLE hCard)
return SCARD_E_INVALID_HANDLE;
}
switch(currentHandle->dwEventStatus)
dwEventStatus = currentHandle->dwEventStatus;
switch(dwEventStatus)
{
case 0:
rv = SCARD_S_SUCCESS;

View File

@ -98,7 +98,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
struct RdrCliHandles
{
SCARDHANDLE hCard; /**< hCard for this connection */
DWORD dwEventStatus; /**< Recent event that must be sent */
_Atomic DWORD dwEventStatus; /**< Recent event that must be sent */
};
typedef struct RdrCliHandles RDR_CLIHANDLES;
@ -123,15 +123,14 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
int version; /**< IFD Handler version number */
int port; /**< Port ID */
int slot; /**< Current Reader Slot */
volatile SCARDHANDLE hLockId; /**< Lock Id */
_Atomic SCARDHANDLE hLockId; /**< Lock Id */
int LockCount; /**< number of recursive locks */
int32_t contexts; /**< Number of open contexts */
_Atomic int32_t contexts; /**< Number of open contexts */
int * pFeeds; /**< Number of shared client to lib */
int * pMutex; /**< Number of client to mutex */
int powerState; /**< auto power off state */
pthread_mutex_t powerState_lock; /**< powerState mutex */
int reference; /**< number of users of the structure */
pthread_mutex_t reference_lock; /**< reference mutex */
_Atomic int reference; /**< number of users of the structure */
struct pubReaderStatesList *readerState; /**< link to the reader state */
/* we can't use READER_STATE * here since eventhandler.h can't be

View File

@ -235,6 +235,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FILECMD = @FILECMD@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@

View File

@ -203,6 +203,9 @@ wait_for_card_again:
}
if (p > 1)
{
int again = 0;
do
{
char input[80];
@ -216,9 +219,13 @@ wait_for_card_again:
iReader = atoi(input);
if (iReader > p || iReader <= 0)
{
printf("Invalid Value - try again\n");
again = 1;
}
}
while (again);
}
while (iReader > p || iReader <= 0);
else
iReader = 1;

View File

@ -1916,10 +1916,12 @@ LONG SCardGetStatusChange(SCARDCONTEXT hContext, DWORD dwTimeout,
/* Check for card presence in the reader */
if (readerState & SCARD_PRESENT)
{
#ifndef DISABLE_AUTO_POWER_ON
/* card present but not yet powered up */
if (0 == rContext->cardAtrLength)
/* Allow the status thread to convey information */
(void)SYS_USleep(PCSCLITE_STATUS_POLL_RATE + 10);
#endif
currReader->cbAtr = rContext->cardAtrLength;
memcpy(currReader->rgbAtr, rContext->cardAtr,
@ -2269,6 +2271,14 @@ LONG SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID pbSendBuffer,
if (SCARD_S_SUCCESS == scControlStruct.rv)
{
if (scControlStruct.dwBytesReturned > cbRecvLength)
{
if (NULL != lpBytesReturned)
*lpBytesReturned = scControlStruct.dwBytesReturned;
rv = SCARD_E_INSUFFICIENT_BUFFER;
goto end;
}
/* read the received buffer */
rv = MessageReceive(pbRecvBuffer, scControlStruct.dwBytesReturned,
currentContextMap->dwClientID);
@ -2728,6 +2738,13 @@ retry:
if (SCARD_S_SUCCESS == scTransmitStruct.rv)
{
if (scTransmitStruct.pcbRecvLength > *pcbRecvLength)
{
*pcbRecvLength = scTransmitStruct.pcbRecvLength;
rv = SCARD_E_INSUFFICIENT_BUFFER;
goto end;
}
/* read the received buffer */
rv = MessageReceive(pbRecvBuffer, scTransmitStruct.pcbRecvLength,
currentContextMap->dwClientID);

View File

@ -432,15 +432,19 @@ static void * ContextThread(LPVOID newContext)
.timeOut = 0,
.rv = 0
};
LONG rv;
/* remove the client fd from the list */
waStr.rv = EHUnregisterClientForEvent(filedes);
rv = EHUnregisterClientForEvent(filedes);
/* send the response only if the client was still in the
* list */
if (waStr.rv != SCARD_F_INTERNAL_ERROR)
if (rv != SCARD_F_INTERNAL_ERROR)
{
waStr.rv = rv;
WRITE_BODY(waStr);
}
}
break;
case SCARD_ESTABLISH_CONTEXT: