File pcsc-lite-1.4.3-64bit-compat2.patch of Package pcsc-lite
diff -urNp pcsc-lite-1.4.0.orig/src/eventhandler.c pcsc-lite-1.4.0/src/eventhandler.c
--- pcsc-lite-1.4.0.orig/src/eventhandler.c 2007-02-05 08:13:56.000000000 -0500
+++ pcsc-lite-1.4.0/src/eventhandler.c 2007-04-12 12:12:45.000000000 -0400
@@ -40,7 +40,7 @@ static PREADER_STATE readerStates[PCSCLI
void EHStatusHandlerThread(PREADER_CONTEXT);
-LONG EHInitializeEventStructures(void)
+int32_t EHInitializeEventStructures(void)
{
int fd, i, pageSize;
@@ -99,7 +99,7 @@ LONG EHInitializeEventStructures(void)
return SCARD_S_SUCCESS;
}
-LONG EHDestroyEventHandler(PREADER_CONTEXT rContext)
+int32_t EHDestroyEventHandler(PREADER_CONTEXT rContext)
{
if (NULL == rContext->readerState)
{
@@ -152,7 +152,7 @@ LONG EHDestroyEventHandler(PREADER_CONTE
return SCARD_S_SUCCESS;
}
-LONG EHSpawnEventHandler(PREADER_CONTEXT rContext)
+int32_t EHSpawnEventHandler(PREADER_CONTEXT rContext)
{
LONG rv;
DWORD dwStatus = 0;
@@ -206,6 +206,7 @@ void EHStatusHandlerThread(PREADER_CONTE
LPCSTR lpcReader;
DWORD dwStatus, dwReaderSharing;
DWORD dwCurrentState;
+ DWORD dwAtrLen;
int pageSize;
/*
@@ -219,14 +220,19 @@ void EHStatusHandlerThread(PREADER_CONTE
pageSize = SYS_GetPageSize();
+ dwAtrLen = rContext->readerState->cardAtrLength;
rv = IFDStatusICC(rContext, &dwStatus, rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
+ rContext->readerState->cardAtrLength = dwAtrLen;
+
if (dwStatus & SCARD_PRESENT)
{
- rContext->readerState->cardAtrLength = MAX_ATR_SIZE;
+ dwAtrLen = MAX_ATR_SIZE;
rv = IFDPowerICC(rContext, IFD_POWER_UP,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
+ rContext->readerState->cardAtrLength = dwAtrLen;
+
/* the protocol is unset after a power on */
rContext->readerState->cardProtocol = SCARD_PROTOCOL_UNSET;
@@ -292,9 +298,11 @@ void EHStatusHandlerThread(PREADER_CONTE
{
dwStatus = 0;
+ dwAtrLen = rContext->readerState->cardAtrLength;
rv = IFDStatusICC(rContext, &dwStatus,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
+ rContext->readerState->cardAtrLength = dwAtrLen;
if (rv != SCARD_S_SUCCESS)
{
@@ -377,10 +385,11 @@ void EHStatusHandlerThread(PREADER_CONTE
* Power and reset the card
*/
SYS_USleep(PCSCLITE_STATUS_WAIT);
- rContext->readerState->cardAtrLength = MAX_ATR_SIZE;
+ dwAtrLen = MAX_ATR_SIZE;
rv = IFDPowerICC(rContext, IFD_POWER_UP,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
+ rContext->readerState->cardAtrLength = dwAtrLen;
/* the protocol is unset after a power on */
rContext->readerState->cardProtocol = SCARD_PROTOCOL_UNSET;
diff -urNp pcsc-lite-1.4.0.orig/src/eventhandler.h pcsc-lite-1.4.0/src/eventhandler.h
--- pcsc-lite-1.4.0.orig/src/eventhandler.h 2006-09-06 16:03:01.000000000 -0400
+++ pcsc-lite-1.4.0/src/eventhandler.h 2007-04-12 12:12:45.000000000 -0400
@@ -18,6 +18,8 @@
#ifndef __eventhandler_h__
#define __eventhandler_h__
+#include <stdint.h>
+
#ifdef __cplusplus
extern "C"
{
@@ -31,21 +31,21 @@ extern "C"
*/
typedef struct pubReaderStatesList
{
- LONG readerID;
+ int32_t readerID;
char readerName[MAX_READERNAME];
- DWORD readerState;
- LONG readerSharing;
- DWORD dummy;
+ uint32_t readerState;
+ int32_t readerSharing;
+ uint32_t dummy;
+ uint32_t cardAtrLength;
+ uint32_t cardProtocol;
UCHAR cardAtr[MAX_ATR_SIZE];
- DWORD cardAtrLength;
- DWORD cardProtocol;
}
READER_STATE, *PREADER_STATE;
- LONG EHInitializeEventStructures(void);
- LONG EHSpawnEventHandler(PREADER_CONTEXT);
- LONG EHDestroyEventHandler(PREADER_CONTEXT);
+ int32_t EHInitializeEventStructures(void);
+ int32_t EHSpawnEventHandler(PREADER_CONTEXT);
+ int32_t EHDestroyEventHandler(PREADER_CONTEXT);
#ifdef __cplusplus
}
diff -urNp pcsc-lite-1.4.0.orig/src/lassert.h pcsc-lite-1.4.0/src/lassert.h
--- pcsc-lite-1.4.0.orig/src/lassert.h 1969-12-31 19:00:00.000000000 -0500
+++ pcsc-lite-1.4.0/src/lassert.h 2007-04-12 12:12:45.000000000 -0400
@@ -0,0 +1,35 @@
+#ifndef LASSERT_H
+#define LASSERT_H
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#if 0
+#define FAIL exit (1)
+#else
+#define FAIL
+#endif
+
+#define LASSERT(cond) \
+ ({ \
+ if (cond) \
+ ; \
+ else { \
+ fprintf (stderr, "%s:%d: assertion FAILED: " #cond "\n", \
+ __FILE__, __LINE__); \
+ FAIL; \
+ } \
+ })
+
+#define LASSERTF(cond, fmt, a...) \
+ ({ \
+ if (cond) \
+ ; \
+ else { \
+ fprintf (stderr, "%s:%d: assertion FAILED: " #cond ": " fmt, \
+ __FILE__, __LINE__, ## a); \
+ FAIL; \
+ } \
+ })
+
+#endif /* LASSERT_H */
diff -urNp pcsc-lite-1.4.0.orig/src/Makefile.am pcsc-lite-1.4.0/src/Makefile.am
--- pcsc-lite-1.4.0.orig/src/Makefile.am 2007-02-05 08:30:02.000000000 -0500
+++ pcsc-lite-1.4.0/src/Makefile.am 2007-04-12 12:19:38.000000000 -0400
@@ -8,7 +8,7 @@ lib_LTLIBRARIES = libpcsclite.la
if !HAVE_SCF
sbin_PROGRAMS = pcscd
endif
-noinst_PROGRAMS = testpcsc
+noinst_PROGRAMS = testpcsc pcsc-wirecheck pcsc-wirecheck-gen
if HAVE_SCF
PCSC_CLIENT_SRC = winscard_scf.c
@@ -95,6 +95,38 @@ pcscd_LDADD = \
testpcsc_SOURCES = testpcsc.c
testpcsc_LDADD = libpcsclite.la
+pcsc_wirecheck_gen_SOURCES := \
+ pcsc-wirecheck-gen.c
+
+# pcsc_wirecheck_gen_CPPFLAGS := $(LIBPCSCLITE_CFLAGS)
+
+pcsc_wirecheck_SOURCES := \
+ lassert.h \
+ pcsc-wirecheck-dist.c \
+ pcsc-wirecheck-main.c
+
+# pcsc_wirecheck_CFLAGS := $(LIBPCSCLITE_CFLAGS) -DCOMPAT_64BIT_SERVER=1
+
+$(srcdir)/pcsc-wirecheck-dist.c: pcsc-wirecheck-gen
+ @if test -f $@ ; then \
+ echo "touch $@" ; \
+ touch $@ ; \
+ else \
+ echo "rm -f $@" ; \
+ rm -f $@ ; \
+ echo "./pcsc-wirecheck-gen > $@.tmp" ; \
+ ./pcsc-wirecheck-gen > $@.tmp ; \
+ echo "mv $@.tmp $@" ; \
+ mv $@.tmp $@ ; \
+ fi
+
+.PHONY: regen
+
+regen: pcsc-wirecheck-gen
+ rm -f $(srcdir)/pcsc-wirecheck-dist.c
+ ./pcsc-wirecheck-gen > $(srcdir)/pcsc-wirecheck-dist.c.tmp
+ mv $(srcdir)/pcsc-wirecheck-dist.c.tmp $(srcdir)/pcsc-wirecheck-dist.c
+
nobase_include_HEADERS = \
PCSC/debuglog.h \
PCSC/ifdhandler.h \
diff -urNp pcsc-lite-1.4.0.orig/src/Makefile.in pcsc-lite-1.4.0/src/Makefile.in
--- pcsc-lite-1.4.0.orig/src/Makefile.in 2007-02-13 15:20:38.000000000 -0500
+++ pcsc-lite-1.4.0/src/Makefile.in 2007-04-12 12:19:38.000000000 -0400
@@ -42,7 +42,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@HAVE_SCF_FALSE@sbin_PROGRAMS = pcscd$(EXEEXT)
-noinst_PROGRAMS = testpcsc$(EXEEXT)
+noinst_PROGRAMS = testpcsc$(EXEEXT) pcsc-wirecheck$(EXEEXT) \
+ pcsc-wirecheck-gen$(EXEEXT)
subdir = src
DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/libpcsclite.pc.in \
@@ -84,6 +85,13 @@ am_libpcsclite_la_OBJECTS = libpcsclite_
libpcsclite_la_OBJECTS = $(am_libpcsclite_la_OBJECTS)
sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS)
+am_pcsc_wirecheck_OBJECTS = pcsc-wirecheck-dist.$(OBJEXT) \
+ pcsc-wirecheck-main.$(OBJEXT)
+pcsc_wirecheck_OBJECTS = $(am_pcsc_wirecheck_OBJECTS)
+pcsc_wirecheck_LDADD = $(LDADD)
+am_pcsc_wirecheck_gen_OBJECTS = pcsc-wirecheck-gen.$(OBJEXT)
+pcsc_wirecheck_gen_OBJECTS = $(am_pcsc_wirecheck_gen_OBJECTS)
+pcsc_wirecheck_gen_LDADD = $(LDADD)
am_pcscd_OBJECTS = pcscd-atrhandler.$(OBJEXT) \
pcscd-configfile.$(OBJEXT) pcscd-debuglog.$(OBJEXT) \
pcscd-dyn_hpux.$(OBJEXT) pcscd-dyn_macosx.$(OBJEXT) \
@@ -120,10 +128,12 @@ LINK = $(LIBTOOL) --tag=CC --mode=link $
LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
YLWRAP = $(top_srcdir)/ylwrap
-SOURCES = $(libpcsclite_la_SOURCES) $(pcscd_SOURCES) \
- $(testpcsc_SOURCES)
-DIST_SOURCES = $(am__libpcsclite_la_SOURCES_DIST) $(pcscd_SOURCES) \
+SOURCES = $(libpcsclite_la_SOURCES) $(pcsc_wirecheck_SOURCES) \
+ $(pcsc_wirecheck_gen_SOURCES) $(pcscd_SOURCES) \
$(testpcsc_SOURCES)
+DIST_SOURCES = $(am__libpcsclite_la_SOURCES_DIST) \
+ $(pcsc_wirecheck_SOURCES) $(pcsc_wirecheck_gen_SOURCES) \
+ $(pcscd_SOURCES) $(testpcsc_SOURCES)
nodistheaderDATA_INSTALL = $(INSTALL_DATA)
pcDATA_INSTALL = $(INSTALL_DATA)
DATA = $(nodistheader_DATA) $(pc_DATA)
@@ -351,6 +361,16 @@ pcscd_LDADD = \
testpcsc_SOURCES = testpcsc.c
testpcsc_LDADD = libpcsclite.la
+pcsc_wirecheck_gen_SOURCES := \
+ pcsc-wirecheck-gen.c
+
+
+# pcsc_wirecheck_gen_CPPFLAGS := $(LIBPCSCLITE_CFLAGS)
+pcsc_wirecheck_SOURCES := \
+ lassert.h \
+ pcsc-wirecheck-dist.c \
+ pcsc-wirecheck-main.c
+
nobase_include_HEADERS = \
PCSC/debuglog.h \
PCSC/ifdhandler.h \
@@ -463,6 +483,12 @@ clean-sbinPROGRAMS:
echo " rm -f $$p $$f"; \
rm -f $$p $$f ; \
done
+pcsc-wirecheck$(EXEEXT): $(pcsc_wirecheck_OBJECTS) $(pcsc_wirecheck_DEPENDENCIES)
+ @rm -f pcsc-wirecheck$(EXEEXT)
+ $(LINK) $(pcsc_wirecheck_LDFLAGS) $(pcsc_wirecheck_OBJECTS) $(pcsc_wirecheck_LDADD) $(LIBS)
+pcsc-wirecheck-gen$(EXEEXT): $(pcsc_wirecheck_gen_OBJECTS) $(pcsc_wirecheck_gen_DEPENDENCIES)
+ @rm -f pcsc-wirecheck-gen$(EXEEXT)
+ $(LINK) $(pcsc_wirecheck_gen_LDFLAGS) $(pcsc_wirecheck_gen_OBJECTS) $(pcsc_wirecheck_gen_LDADD) $(LIBS)
pcscd$(EXEEXT): $(pcscd_OBJECTS) $(pcscd_DEPENDENCIES)
@rm -f pcscd$(EXEEXT)
$(LINK) $(pcscd_LDFLAGS) $(pcscd_OBJECTS) $(pcscd_LDADD) $(LIBS)
@@ -488,6 +514,9 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpcsclite_la-winscard_clnt.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpcsclite_la-winscard_msg.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpcsclite_la-winscard_scf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcsc-wirecheck-dist.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcsc-wirecheck-gen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcsc-wirecheck-main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcscd-atrhandler.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcscd-configfile.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcscd-debuglog.Po@am__quote@
@@ -1232,6 +1261,28 @@ uninstall-am: uninstall-info-am uninstal
uninstall-pcDATA uninstall-sbinPROGRAMS
+# pcsc_wirecheck_CFLAGS := $(LIBPCSCLITE_CFLAGS) -DCOMPAT_64BIT_SERVER=1
+
+$(srcdir)/pcsc-wirecheck-dist.c: pcsc-wirecheck-gen
+ @if test -f $@ ; then \
+ echo "touch $@" ; \
+ touch $@ ; \
+ else \
+ echo "rm -f $@" ; \
+ rm -f $@ ; \
+ echo "./pcsc-wirecheck-gen > $@.tmp" ; \
+ ./pcsc-wirecheck-gen > $@.tmp ; \
+ echo "mv $@.tmp $@" ; \
+ mv $@.tmp $@ ; \
+ fi
+
+.PHONY: regen
+
+regen: pcsc-wirecheck-gen
+ rm -f $(srcdir)/pcsc-wirecheck-dist.c
+ ./pcsc-wirecheck-gen > $(srcdir)/pcsc-wirecheck-dist.c.tmp
+ mv $(srcdir)/pcsc-wirecheck-dist.c.tmp $(srcdir)/pcsc-wirecheck-dist.c
+
# Hack to be able to use flex -P to enable linking of multiple lexer
# sources into one library, until we find a way to make automake handle
# this automagically. This breaks if lex is not flex!!
diff -urNp pcsc-lite-1.4.0.orig/src/pcscdaemon.c pcsc-lite-1.4.0/src/pcscdaemon.c
--- pcsc-lite-1.4.0.orig/src/pcscdaemon.c 2007-02-05 08:13:56.000000000 -0500
+++ pcsc-lite-1.4.0/src/pcscdaemon.c 2007-04-12 12:12:45.000000000 -0400
@@ -143,7 +143,7 @@ void SVCServiceRunLoop(void)
{
int rsp;
LONG rv;
- DWORD dwClientID; /* Connection ID used to reference the Client */
+ uint32_t dwClientID; /* Connection ID used to reference the Client */
rsp = 0;
rv = 0;
diff -urNp pcsc-lite-1.4.0.orig/src/pcsc-wirecheck-dist.c pcsc-lite-1.4.0/src/pcsc-wirecheck-dist.c
--- pcsc-lite-1.4.0.orig/src/pcsc-wirecheck-dist.c 1969-12-31 19:00:00.000000000 -0500
+++ pcsc-lite-1.4.0/src/pcsc-wirecheck-dist.c 2007-04-12 12:12:45.000000000 -0400
@@ -0,0 +1,460 @@
+#include <sys/types.h>
+#include <time.h>
+#include <stddef.h>
+
+#include "PCSC/pcsclite.h"
+#include "pcscd.h"
+#include "readerfactory.h"
+#include "eventhandler.h"
+#include "winscard_msg.h"
+
+#include "lassert.h"
+
+void pcsc_assert_wire_constants(void)
+{
+
+ /* Constants... */
+
+ LASSERTF(PROTOCOL_VERSION_MAJOR == 3," found %lld\n",
+ (long long)PROTOCOL_VERSION_MAJOR);
+ LASSERTF(PROTOCOL_VERSION_MINOR == 0," found %lld\n",
+ (long long)PROTOCOL_VERSION_MINOR);
+
+ LASSERTF(PCSCLITE_MSG_KEY_LEN == 16," found %lld\n",
+ (long long)PCSCLITE_MSG_KEY_LEN);
+ LASSERTF(PCSCLITE_MAX_MESSAGE_SIZE == 2048," found %lld\n",
+ (long long)PCSCLITE_MAX_MESSAGE_SIZE);
+
+ LASSERTF(MAX_READERNAME == 52," found %lld\n",
+ (long long)MAX_READERNAME);
+ LASSERTF(MAX_ATR_SIZE == 33," found %lld\n",
+ (long long)MAX_ATR_SIZE);
+ LASSERTF(MAX_BUFFER_SIZE == 264," found %lld\n",
+ (long long)MAX_BUFFER_SIZE);
+
+ /* enum pcsc_adm_commands */
+ LASSERTF(CMD_FUNCTION == 241, " found %lld\n",
+ (long long)CMD_FUNCTION);
+ LASSERTF(CMD_FAILED == 242, " found %lld\n",
+ (long long)CMD_FAILED);
+ LASSERTF(CMD_SERVER_DIED == 243, " found %lld\n",
+ (long long)CMD_SERVER_DIED);
+ LASSERTF(CMD_CLIENT_DIED == 244, " found %lld\n",
+ (long long)CMD_CLIENT_DIED);
+ LASSERTF(CMD_READER_EVENT == 245, " found %lld\n",
+ (long long)CMD_READER_EVENT);
+ LASSERTF(CMD_SYN == 246, " found %lld\n",
+ (long long)CMD_SYN);
+ LASSERTF(CMD_ACK == 247, " found %lld\n",
+ (long long)CMD_ACK);
+ LASSERTF(CMD_VERSION == 248, " found %lld\n",
+ (long long)CMD_VERSION);
+
+ /* enum pcsc_msg_commands */
+ LASSERTF(SCARD_ESTABLISH_CONTEXT == 1, " found %lld\n",
+ (long long)SCARD_ESTABLISH_CONTEXT);
+ LASSERTF(SCARD_RELEASE_CONTEXT == 2, " found %lld\n",
+ (long long)SCARD_RELEASE_CONTEXT);
+ LASSERTF(SCARD_LIST_READERS == 3, " found %lld\n",
+ (long long)SCARD_LIST_READERS);
+ LASSERTF(SCARD_CONNECT == 4, " found %lld\n",
+ (long long)SCARD_CONNECT);
+ LASSERTF(SCARD_RECONNECT == 5, " found %lld\n",
+ (long long)SCARD_RECONNECT);
+ LASSERTF(SCARD_DISCONNECT == 6, " found %lld\n",
+ (long long)SCARD_DISCONNECT);
+ LASSERTF(SCARD_BEGIN_TRANSACTION == 7, " found %lld\n",
+ (long long)SCARD_BEGIN_TRANSACTION);
+ LASSERTF(SCARD_END_TRANSACTION == 8, " found %lld\n",
+ (long long)SCARD_END_TRANSACTION);
+ LASSERTF(SCARD_TRANSMIT == 9, " found %lld\n",
+ (long long)SCARD_TRANSMIT);
+ LASSERTF(SCARD_CONTROL == 10, " found %lld\n",
+ (long long)SCARD_CONTROL);
+ LASSERTF(SCARD_STATUS == 11, " found %lld\n",
+ (long long)SCARD_STATUS);
+ LASSERTF(SCARD_GET_STATUS_CHANGE == 12, " found %lld\n",
+ (long long)SCARD_GET_STATUS_CHANGE);
+ LASSERTF(SCARD_CANCEL == 13, " found %lld\n",
+ (long long)SCARD_CANCEL);
+ LASSERTF(SCARD_CANCEL_TRANSACTION == 14, " found %lld\n",
+ (long long)SCARD_CANCEL_TRANSACTION);
+ LASSERTF(SCARD_GET_ATTRIB == 15, " found %lld\n",
+ (long long)SCARD_GET_ATTRIB);
+ LASSERTF(SCARD_SET_ATTRIB == 16, " found %lld\n",
+ (long long)SCARD_SET_ATTRIB);
+ /* Types... */
+
+ /* Checks for struct rxSharedSegment */
+ LASSERTF((int)sizeof(struct rxSharedSegment) == 2088, " found %lld\n",
+ (long long)(int)sizeof(struct rxSharedSegment));
+ LASSERTF((int)offsetof(struct rxSharedSegment, mtype) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct rxSharedSegment, mtype));
+ LASSERTF((int)sizeof(((struct rxSharedSegment *)0)->mtype) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct rxSharedSegment *)0)->mtype));
+ LASSERTF((int)offsetof(struct rxSharedSegment, user_id) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct rxSharedSegment, user_id));
+ LASSERTF((int)sizeof(((struct rxSharedSegment *)0)->user_id) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct rxSharedSegment *)0)->user_id));
+ LASSERTF((int)offsetof(struct rxSharedSegment, group_id) == 8, " found %lld\n",
+ (long long)(int)offsetof(struct rxSharedSegment, group_id));
+ LASSERTF((int)sizeof(((struct rxSharedSegment *)0)->group_id) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct rxSharedSegment *)0)->group_id));
+ LASSERTF((int)offsetof(struct rxSharedSegment, command) == 12, " found %lld\n",
+ (long long)(int)offsetof(struct rxSharedSegment, command));
+ LASSERTF((int)sizeof(((struct rxSharedSegment *)0)->command) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct rxSharedSegment *)0)->command));
+ LASSERTF((int)offsetof(struct rxSharedSegment, date) == 16, " found %lld\n",
+ (long long)(int)offsetof(struct rxSharedSegment, date));
+ LASSERTF((int)sizeof(((struct rxSharedSegment *)0)->date) == 8, " found %lld\n",
+ (long long)(int)sizeof(((struct rxSharedSegment *)0)->date));
+ LASSERTF((int)offsetof(struct rxSharedSegment, key) == 24, " found %lld\n",
+ (long long)(int)offsetof(struct rxSharedSegment, key));
+ LASSERTF((int)sizeof(((struct rxSharedSegment *)0)->key) == 16, " found %lld\n",
+ (long long)(int)sizeof(((struct rxSharedSegment *)0)->key));
+ LASSERTF((int)offsetof(struct rxSharedSegment, data) == 40, " found %lld\n",
+ (long long)(int)offsetof(struct rxSharedSegment, data));
+ LASSERTF((int)sizeof(((struct rxSharedSegment *)0)->data) == 2048, " found %lld\n",
+ (long long)(int)sizeof(((struct rxSharedSegment *)0)->data));
+
+ /* Checks for struct version_struct */
+ LASSERTF((int)sizeof(struct version_struct) == 12, " found %lld\n",
+ (long long)(int)sizeof(struct version_struct));
+ LASSERTF((int)offsetof(struct version_struct, major) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct version_struct, major));
+ LASSERTF((int)sizeof(((struct version_struct *)0)->major) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct version_struct *)0)->major));
+ LASSERTF((int)offsetof(struct version_struct, minor) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct version_struct, minor));
+ LASSERTF((int)sizeof(((struct version_struct *)0)->minor) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct version_struct *)0)->minor));
+ LASSERTF((int)offsetof(struct version_struct, rv) == 8, " found %lld\n",
+ (long long)(int)offsetof(struct version_struct, rv));
+ LASSERTF((int)sizeof(((struct version_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct version_struct *)0)->rv));
+
+ /* Checks for struct client_struct */
+ LASSERTF((int)sizeof(struct client_struct) == 4, " found %lld\n",
+ (long long)(int)sizeof(struct client_struct));
+ LASSERTF((int)offsetof(struct client_struct, hContext) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct client_struct, hContext));
+ LASSERTF((int)sizeof(((struct client_struct *)0)->hContext) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct client_struct *)0)->hContext));
+
+ /* Checks for struct establish_struct */
+ LASSERTF((int)sizeof(struct establish_struct) == 12, " found %lld\n",
+ (long long)(int)sizeof(struct establish_struct));
+ LASSERTF((int)offsetof(struct establish_struct, dwScope) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct establish_struct, dwScope));
+ LASSERTF((int)sizeof(((struct establish_struct *)0)->dwScope) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct establish_struct *)0)->dwScope));
+ LASSERTF((int)offsetof(struct establish_struct, phContext) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct establish_struct, phContext));
+ LASSERTF((int)sizeof(((struct establish_struct *)0)->phContext) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct establish_struct *)0)->phContext));
+ LASSERTF((int)offsetof(struct establish_struct, rv) == 8, " found %lld\n",
+ (long long)(int)offsetof(struct establish_struct, rv));
+ LASSERTF((int)sizeof(((struct establish_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct establish_struct *)0)->rv));
+
+ /* Checks for struct release_struct */
+ LASSERTF((int)sizeof(struct release_struct) == 8, " found %lld\n",
+ (long long)(int)sizeof(struct release_struct));
+ LASSERTF((int)offsetof(struct release_struct, hContext) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct release_struct, hContext));
+ LASSERTF((int)sizeof(((struct release_struct *)0)->hContext) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct release_struct *)0)->hContext));
+ LASSERTF((int)offsetof(struct release_struct, rv) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct release_struct, rv));
+ LASSERTF((int)sizeof(((struct release_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct release_struct *)0)->rv));
+
+ /* Checks for struct connect_struct */
+ LASSERTF((int)sizeof(struct connect_struct) == 76, " found %lld\n",
+ (long long)(int)sizeof(struct connect_struct));
+ LASSERTF((int)offsetof(struct connect_struct, hContext) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct connect_struct, hContext));
+ LASSERTF((int)sizeof(((struct connect_struct *)0)->hContext) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct connect_struct *)0)->hContext));
+ LASSERTF((int)offsetof(struct connect_struct, szReader) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct connect_struct, szReader));
+ LASSERTF((int)sizeof(((struct connect_struct *)0)->szReader) == 52, " found %lld\n",
+ (long long)(int)sizeof(((struct connect_struct *)0)->szReader));
+ LASSERTF((int)offsetof(struct connect_struct, dwShareMode) == 56, " found %lld\n",
+ (long long)(int)offsetof(struct connect_struct, dwShareMode));
+ LASSERTF((int)sizeof(((struct connect_struct *)0)->dwShareMode) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct connect_struct *)0)->dwShareMode));
+ LASSERTF((int)offsetof(struct connect_struct, dwPreferredProtocols) == 60, " found %lld\n",
+ (long long)(int)offsetof(struct connect_struct, dwPreferredProtocols));
+ LASSERTF((int)sizeof(((struct connect_struct *)0)->dwPreferredProtocols) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct connect_struct *)0)->dwPreferredProtocols));
+ LASSERTF((int)offsetof(struct connect_struct, phCard) == 64, " found %lld\n",
+ (long long)(int)offsetof(struct connect_struct, phCard));
+ LASSERTF((int)sizeof(((struct connect_struct *)0)->phCard) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct connect_struct *)0)->phCard));
+ LASSERTF((int)offsetof(struct connect_struct, pdwActiveProtocol) == 68, " found %lld\n",
+ (long long)(int)offsetof(struct connect_struct, pdwActiveProtocol));
+ LASSERTF((int)sizeof(((struct connect_struct *)0)->pdwActiveProtocol) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct connect_struct *)0)->pdwActiveProtocol));
+ LASSERTF((int)offsetof(struct connect_struct, rv) == 72, " found %lld\n",
+ (long long)(int)offsetof(struct connect_struct, rv));
+ LASSERTF((int)sizeof(((struct connect_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct connect_struct *)0)->rv));
+
+ /* Checks for struct reconnect_struct */
+ LASSERTF((int)sizeof(struct reconnect_struct) == 24, " found %lld\n",
+ (long long)(int)sizeof(struct reconnect_struct));
+ LASSERTF((int)offsetof(struct reconnect_struct, hCard) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct reconnect_struct, hCard));
+ LASSERTF((int)sizeof(((struct reconnect_struct *)0)->hCard) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct reconnect_struct *)0)->hCard));
+ LASSERTF((int)offsetof(struct reconnect_struct, dwShareMode) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct reconnect_struct, dwShareMode));
+ LASSERTF((int)sizeof(((struct reconnect_struct *)0)->dwShareMode) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct reconnect_struct *)0)->dwShareMode));
+ LASSERTF((int)offsetof(struct reconnect_struct, dwPreferredProtocols) == 8, " found %lld\n",
+ (long long)(int)offsetof(struct reconnect_struct, dwPreferredProtocols));
+ LASSERTF((int)sizeof(((struct reconnect_struct *)0)->dwPreferredProtocols) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct reconnect_struct *)0)->dwPreferredProtocols));
+ LASSERTF((int)offsetof(struct reconnect_struct, dwInitialization) == 12, " found %lld\n",
+ (long long)(int)offsetof(struct reconnect_struct, dwInitialization));
+ LASSERTF((int)sizeof(((struct reconnect_struct *)0)->dwInitialization) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct reconnect_struct *)0)->dwInitialization));
+ LASSERTF((int)offsetof(struct reconnect_struct, pdwActiveProtocol) == 16, " found %lld\n",
+ (long long)(int)offsetof(struct reconnect_struct, pdwActiveProtocol));
+ LASSERTF((int)sizeof(((struct reconnect_struct *)0)->pdwActiveProtocol) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct reconnect_struct *)0)->pdwActiveProtocol));
+ LASSERTF((int)offsetof(struct reconnect_struct, rv) == 20, " found %lld\n",
+ (long long)(int)offsetof(struct reconnect_struct, rv));
+ LASSERTF((int)sizeof(((struct reconnect_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct reconnect_struct *)0)->rv));
+
+ /* Checks for struct disconnect_struct */
+ LASSERTF((int)sizeof(struct disconnect_struct) == 12, " found %lld\n",
+ (long long)(int)sizeof(struct disconnect_struct));
+ LASSERTF((int)offsetof(struct disconnect_struct, hCard) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct disconnect_struct, hCard));
+ LASSERTF((int)sizeof(((struct disconnect_struct *)0)->hCard) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct disconnect_struct *)0)->hCard));
+ LASSERTF((int)offsetof(struct disconnect_struct, dwDisposition) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct disconnect_struct, dwDisposition));
+ LASSERTF((int)sizeof(((struct disconnect_struct *)0)->dwDisposition) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct disconnect_struct *)0)->dwDisposition));
+ LASSERTF((int)offsetof(struct disconnect_struct, rv) == 8, " found %lld\n",
+ (long long)(int)offsetof(struct disconnect_struct, rv));
+ LASSERTF((int)sizeof(((struct disconnect_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct disconnect_struct *)0)->rv));
+
+ /* Checks for struct begin_struct */
+ LASSERTF((int)sizeof(struct begin_struct) == 8, " found %lld\n",
+ (long long)(int)sizeof(struct begin_struct));
+ LASSERTF((int)offsetof(struct begin_struct, hCard) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct begin_struct, hCard));
+ LASSERTF((int)sizeof(((struct begin_struct *)0)->hCard) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct begin_struct *)0)->hCard));
+ LASSERTF((int)offsetof(struct begin_struct, rv) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct begin_struct, rv));
+ LASSERTF((int)sizeof(((struct begin_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct begin_struct *)0)->rv));
+
+ /* Checks for struct end_struct */
+ LASSERTF((int)sizeof(struct end_struct) == 12, " found %lld\n",
+ (long long)(int)sizeof(struct end_struct));
+ LASSERTF((int)offsetof(struct end_struct, hCard) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct end_struct, hCard));
+ LASSERTF((int)sizeof(((struct end_struct *)0)->hCard) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct end_struct *)0)->hCard));
+ LASSERTF((int)offsetof(struct end_struct, dwDisposition) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct end_struct, dwDisposition));
+ LASSERTF((int)sizeof(((struct end_struct *)0)->dwDisposition) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct end_struct *)0)->dwDisposition));
+ LASSERTF((int)offsetof(struct end_struct, rv) == 8, " found %lld\n",
+ (long long)(int)offsetof(struct end_struct, rv));
+ LASSERTF((int)sizeof(((struct end_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct end_struct *)0)->rv));
+
+ /* Checks for struct cancel_struct */
+ LASSERTF((int)sizeof(struct cancel_struct) == 8, " found %lld\n",
+ (long long)(int)sizeof(struct cancel_struct));
+ LASSERTF((int)offsetof(struct cancel_struct, hCard) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct cancel_struct, hCard));
+ LASSERTF((int)sizeof(((struct cancel_struct *)0)->hCard) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct cancel_struct *)0)->hCard));
+ LASSERTF((int)offsetof(struct cancel_struct, rv) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct cancel_struct, rv));
+ LASSERTF((int)sizeof(((struct cancel_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct cancel_struct *)0)->rv));
+
+ /* Checks for struct status_struct */
+ LASSERTF((int)sizeof(struct status_struct) == 112, " found %lld\n",
+ (long long)(int)sizeof(struct status_struct));
+ LASSERTF((int)offsetof(struct status_struct, hCard) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct status_struct, hCard));
+ LASSERTF((int)sizeof(((struct status_struct *)0)->hCard) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct status_struct *)0)->hCard));
+ LASSERTF((int)offsetof(struct status_struct, mszReaderNames) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct status_struct, mszReaderNames));
+ LASSERTF((int)sizeof(((struct status_struct *)0)->mszReaderNames) == 52, " found %lld\n",
+ (long long)(int)sizeof(((struct status_struct *)0)->mszReaderNames));
+ LASSERTF((int)offsetof(struct status_struct, pcchReaderLen) == 56, " found %lld\n",
+ (long long)(int)offsetof(struct status_struct, pcchReaderLen));
+ LASSERTF((int)sizeof(((struct status_struct *)0)->pcchReaderLen) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct status_struct *)0)->pcchReaderLen));
+ LASSERTF((int)offsetof(struct status_struct, pdwState) == 60, " found %lld\n",
+ (long long)(int)offsetof(struct status_struct, pdwState));
+ LASSERTF((int)sizeof(((struct status_struct *)0)->pdwState) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct status_struct *)0)->pdwState));
+ LASSERTF((int)offsetof(struct status_struct, pdwProtocol) == 64, " found %lld\n",
+ (long long)(int)offsetof(struct status_struct, pdwProtocol));
+ LASSERTF((int)sizeof(((struct status_struct *)0)->pdwProtocol) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct status_struct *)0)->pdwProtocol));
+ LASSERTF((int)offsetof(struct status_struct, pbAtr) == 76, " found %lld\n",
+ (long long)(int)offsetof(struct status_struct, pbAtr));
+ LASSERTF((int)sizeof(((struct status_struct *)0)->pbAtr) == 33, " found %lld\n",
+ (long long)(int)sizeof(((struct status_struct *)0)->pbAtr));
+ LASSERTF((int)offsetof(struct status_struct, pcbAtrLen) == 68, " found %lld\n",
+ (long long)(int)offsetof(struct status_struct, pcbAtrLen));
+ LASSERTF((int)sizeof(((struct status_struct *)0)->pcbAtrLen) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct status_struct *)0)->pcbAtrLen));
+ LASSERTF((int)offsetof(struct status_struct, rv) == 72, " found %lld\n",
+ (long long)(int)offsetof(struct status_struct, rv));
+ LASSERTF((int)sizeof(((struct status_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct status_struct *)0)->rv));
+
+ /* Checks for struct transmit_struct */
+ LASSERTF((int)sizeof(struct transmit_struct) == 560, " found %lld\n",
+ (long long)(int)sizeof(struct transmit_struct));
+ LASSERTF((int)offsetof(struct transmit_struct, hCard) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct transmit_struct, hCard));
+ LASSERTF((int)sizeof(((struct transmit_struct *)0)->hCard) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct transmit_struct *)0)->hCard));
+ LASSERTF((int)offsetof(struct transmit_struct, pioSendPciProtocol) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct transmit_struct, pioSendPciProtocol));
+ LASSERTF((int)sizeof(((struct transmit_struct *)0)->pioSendPciProtocol) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct transmit_struct *)0)->pioSendPciProtocol));
+ LASSERTF((int)offsetof(struct transmit_struct, pioSendPciLength) == 8, " found %lld\n",
+ (long long)(int)offsetof(struct transmit_struct, pioSendPciLength));
+ LASSERTF((int)sizeof(((struct transmit_struct *)0)->pioSendPciLength) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct transmit_struct *)0)->pioSendPciLength));
+ LASSERTF((int)offsetof(struct transmit_struct, pbSendBuffer) == 12, " found %lld\n",
+ (long long)(int)offsetof(struct transmit_struct, pbSendBuffer));
+ LASSERTF((int)sizeof(((struct transmit_struct *)0)->pbSendBuffer) == 264, " found %lld\n",
+ (long long)(int)sizeof(((struct transmit_struct *)0)->pbSendBuffer));
+ LASSERTF((int)offsetof(struct transmit_struct, cbSendLength) == 276, " found %lld\n",
+ (long long)(int)offsetof(struct transmit_struct, cbSendLength));
+ LASSERTF((int)sizeof(((struct transmit_struct *)0)->cbSendLength) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct transmit_struct *)0)->cbSendLength));
+ LASSERTF((int)offsetof(struct transmit_struct, pioRecvPciProtocol) == 280, " found %lld\n",
+ (long long)(int)offsetof(struct transmit_struct, pioRecvPciProtocol));
+ LASSERTF((int)sizeof(((struct transmit_struct *)0)->pioRecvPciProtocol) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct transmit_struct *)0)->pioRecvPciProtocol));
+ LASSERTF((int)offsetof(struct transmit_struct, pioRecvPciLength) == 284, " found %lld\n",
+ (long long)(int)offsetof(struct transmit_struct, pioRecvPciLength));
+ LASSERTF((int)sizeof(((struct transmit_struct *)0)->pioRecvPciLength) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct transmit_struct *)0)->pioRecvPciLength));
+ LASSERTF((int)offsetof(struct transmit_struct, pbRecvBuffer) == 288, " found %lld\n",
+ (long long)(int)offsetof(struct transmit_struct, pbRecvBuffer));
+ LASSERTF((int)sizeof(((struct transmit_struct *)0)->pbRecvBuffer) == 264, " found %lld\n",
+ (long long)(int)sizeof(((struct transmit_struct *)0)->pbRecvBuffer));
+ LASSERTF((int)offsetof(struct transmit_struct, pcbRecvLength) == 552, " found %lld\n",
+ (long long)(int)offsetof(struct transmit_struct, pcbRecvLength));
+ LASSERTF((int)sizeof(((struct transmit_struct *)0)->pcbRecvLength) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct transmit_struct *)0)->pcbRecvLength));
+ LASSERTF((int)offsetof(struct transmit_struct, rv) == 556, " found %lld\n",
+ (long long)(int)offsetof(struct transmit_struct, rv));
+ LASSERTF((int)sizeof(((struct transmit_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct transmit_struct *)0)->rv));
+
+ /* Checks for struct control_struct */
+ LASSERTF((int)sizeof(struct control_struct) == 552, " found %lld\n",
+ (long long)(int)sizeof(struct control_struct));
+ LASSERTF((int)offsetof(struct control_struct, hCard) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct control_struct, hCard));
+ LASSERTF((int)sizeof(((struct control_struct *)0)->hCard) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct control_struct *)0)->hCard));
+ LASSERTF((int)offsetof(struct control_struct, dwControlCode) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct control_struct, dwControlCode));
+ LASSERTF((int)sizeof(((struct control_struct *)0)->dwControlCode) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct control_struct *)0)->dwControlCode));
+ LASSERTF((int)offsetof(struct control_struct, pbSendBuffer) == 8, " found %lld\n",
+ (long long)(int)offsetof(struct control_struct, pbSendBuffer));
+ LASSERTF((int)sizeof(((struct control_struct *)0)->pbSendBuffer) == 264, " found %lld\n",
+ (long long)(int)sizeof(((struct control_struct *)0)->pbSendBuffer));
+ LASSERTF((int)offsetof(struct control_struct, cbSendLength) == 272, " found %lld\n",
+ (long long)(int)offsetof(struct control_struct, cbSendLength));
+ LASSERTF((int)sizeof(((struct control_struct *)0)->cbSendLength) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct control_struct *)0)->cbSendLength));
+ LASSERTF((int)offsetof(struct control_struct, pbRecvBuffer) == 276, " found %lld\n",
+ (long long)(int)offsetof(struct control_struct, pbRecvBuffer));
+ LASSERTF((int)sizeof(((struct control_struct *)0)->pbRecvBuffer) == 264, " found %lld\n",
+ (long long)(int)sizeof(((struct control_struct *)0)->pbRecvBuffer));
+ LASSERTF((int)offsetof(struct control_struct, cbRecvLength) == 540, " found %lld\n",
+ (long long)(int)offsetof(struct control_struct, cbRecvLength));
+ LASSERTF((int)sizeof(((struct control_struct *)0)->cbRecvLength) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct control_struct *)0)->cbRecvLength));
+ LASSERTF((int)offsetof(struct control_struct, dwBytesReturned) == 544, " found %lld\n",
+ (long long)(int)offsetof(struct control_struct, dwBytesReturned));
+ LASSERTF((int)sizeof(((struct control_struct *)0)->dwBytesReturned) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct control_struct *)0)->dwBytesReturned));
+ LASSERTF((int)offsetof(struct control_struct, rv) == 548, " found %lld\n",
+ (long long)(int)offsetof(struct control_struct, rv));
+ LASSERTF((int)sizeof(((struct control_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct control_struct *)0)->rv));
+
+ /* Checks for struct getset_struct */
+ LASSERTF((int)sizeof(struct getset_struct) == 280, " found %lld\n",
+ (long long)(int)sizeof(struct getset_struct));
+ LASSERTF((int)offsetof(struct getset_struct, hCard) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct getset_struct, hCard));
+ LASSERTF((int)sizeof(((struct getset_struct *)0)->hCard) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct getset_struct *)0)->hCard));
+ LASSERTF((int)offsetof(struct getset_struct, dwAttrId) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct getset_struct, dwAttrId));
+ LASSERTF((int)sizeof(((struct getset_struct *)0)->dwAttrId) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct getset_struct *)0)->dwAttrId));
+ LASSERTF((int)offsetof(struct getset_struct, cbAttrLen) == 272, " found %lld\n",
+ (long long)(int)offsetof(struct getset_struct, cbAttrLen));
+ LASSERTF((int)sizeof(((struct getset_struct *)0)->cbAttrLen) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct getset_struct *)0)->cbAttrLen));
+ LASSERTF((int)offsetof(struct getset_struct, rv) == 276, " found %lld\n",
+ (long long)(int)offsetof(struct getset_struct, rv));
+ LASSERTF((int)sizeof(((struct getset_struct *)0)->rv) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct getset_struct *)0)->rv));
+
+ /* Checks for struct pubReaderStatesList */
+ LASSERTF((int)sizeof(struct pubReaderStatesList) == 112, " found %lld\n",
+ (long long)(int)sizeof(struct pubReaderStatesList));
+ LASSERTF((int)offsetof(struct pubReaderStatesList, readerID) == 0, " found %lld\n",
+ (long long)(int)offsetof(struct pubReaderStatesList, readerID));
+ LASSERTF((int)sizeof(((struct pubReaderStatesList *)0)->readerID) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct pubReaderStatesList *)0)->readerID));
+ LASSERTF((int)offsetof(struct pubReaderStatesList, readerName) == 4, " found %lld\n",
+ (long long)(int)offsetof(struct pubReaderStatesList, readerName));
+ LASSERTF((int)sizeof(((struct pubReaderStatesList *)0)->readerName) == 52, " found %lld\n",
+ (long long)(int)sizeof(((struct pubReaderStatesList *)0)->readerName));
+ LASSERTF((int)offsetof(struct pubReaderStatesList, readerState) == 56, " found %lld\n",
+ (long long)(int)offsetof(struct pubReaderStatesList, readerState));
+ LASSERTF((int)sizeof(((struct pubReaderStatesList *)0)->readerState) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct pubReaderStatesList *)0)->readerState));
+ LASSERTF((int)offsetof(struct pubReaderStatesList, readerSharing) == 60, " found %lld\n",
+ (long long)(int)offsetof(struct pubReaderStatesList, readerSharing));
+ LASSERTF((int)sizeof(((struct pubReaderStatesList *)0)->readerSharing) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct pubReaderStatesList *)0)->readerSharing));
+ LASSERTF((int)offsetof(struct pubReaderStatesList, dummy) == 64, " found %lld\n",
+ (long long)(int)offsetof(struct pubReaderStatesList, dummy));
+ LASSERTF((int)sizeof(((struct pubReaderStatesList *)0)->dummy) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct pubReaderStatesList *)0)->dummy));
+ LASSERTF((int)offsetof(struct pubReaderStatesList, cardAtr) == 76, " found %lld\n",
+ (long long)(int)offsetof(struct pubReaderStatesList, cardAtr));
+ LASSERTF((int)sizeof(((struct pubReaderStatesList *)0)->cardAtr) == 33, " found %lld\n",
+ (long long)(int)sizeof(((struct pubReaderStatesList *)0)->cardAtr));
+ LASSERTF((int)offsetof(struct pubReaderStatesList, cardAtrLength) == 68, " found %lld\n",
+ (long long)(int)offsetof(struct pubReaderStatesList, cardAtrLength));
+ LASSERTF((int)sizeof(((struct pubReaderStatesList *)0)->cardAtrLength) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct pubReaderStatesList *)0)->cardAtrLength));
+ LASSERTF((int)offsetof(struct pubReaderStatesList, cardProtocol) == 72, " found %lld\n",
+ (long long)(int)offsetof(struct pubReaderStatesList, cardProtocol));
+ LASSERTF((int)sizeof(((struct pubReaderStatesList *)0)->cardProtocol) == 4, " found %lld\n",
+ (long long)(int)sizeof(((struct pubReaderStatesList *)0)->cardProtocol));
+
+}
diff -urNp pcsc-lite-1.4.0.orig/src/pcsc-wirecheck-gen.c pcsc-lite-1.4.0/src/pcsc-wirecheck-gen.c
--- pcsc-lite-1.4.0.orig/src/pcsc-wirecheck-gen.c 1969-12-31 19:00:00.000000000 -0500
+++ pcsc-lite-1.4.0/src/pcsc-wirecheck-gen.c 2007-04-12 12:12:45.000000000 -0400
@@ -0,0 +1,279 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <stddef.h>
+
+#include "PCSC/pcsclite.h"
+#include "pcscd.h"
+#include "winscard_msg.h"
+#include "readerfactory.h"
+#include "eventhandler.h"
+
+#define BLANK_LINE() \
+do { \
+ printf("\n"); \
+} while(0)
+
+#define COMMENT(c) \
+do { \
+ printf(" /* "c" */\n"); \
+} while(0)
+
+#define STRINGIFY(a) #a
+
+
+#define CHECK_CDEFINE(a) \
+ printf(" CLASSERT("#a" == "STRINGIFY(a) ");\n")
+
+#define CHECK_CVALUE(a) \
+ printf(" CLASSERT("#a" == %lld);\n", (long long)a)
+
+#define CHECK_DEFINE(a) \
+do { \
+ printf(" LASSERTF("#a" == "STRINGIFY(a) \
+ ",\" found %%lld\\n\",\n " \
+ "(long long)"#a");\n"); \
+} while(0)
+
+#define CHECK_VALUE(a) \
+do { \
+ printf(" LASSERTF("#a \
+ " == %lld, \" found %%lld\\n\",\n "\
+ "(long long)"#a");\n", (long long)a); \
+} while(0)
+
+#define CHECK_VALUE_64(a) \
+do { \
+ printf(" LASSERTF("#a \
+ " == %lldULL, \" found %%lld\\n\",\n "\
+ "(long long)"#a");\n", (long long)a); \
+} while(0)
+
+#define CHECK_MEMBER_OFFSET(s,m) \
+do { \
+ CHECK_VALUE((int)offsetof(struct s, m)); \
+} while(0)
+
+#define CHECK_MEMBER_SIZEOF(s,m) \
+do { \
+ CHECK_VALUE((int)sizeof(((struct s *)0)->m)); \
+} while(0)
+
+#define CHECK_MEMBER(s,m) \
+do { \
+ CHECK_MEMBER_OFFSET(s, m); \
+ CHECK_MEMBER_SIZEOF(s, m); \
+} while(0)
+
+#define CHECK_STRUCT(s) \
+do { \
+ COMMENT("Checks for struct "#s); \
+ CHECK_VALUE((int)sizeof(struct s)); \
+} while(0)
+
+static void
+check_constants (void)
+{
+ COMMENT ("Constants...");
+
+ BLANK_LINE ();
+ CHECK_DEFINE (PROTOCOL_VERSION_MAJOR);
+ CHECK_DEFINE (PROTOCOL_VERSION_MINOR);
+
+ BLANK_LINE ();
+ CHECK_DEFINE (PCSCLITE_MSG_KEY_LEN);
+ CHECK_DEFINE (PCSCLITE_MAX_MESSAGE_SIZE);
+
+ BLANK_LINE ();
+ CHECK_DEFINE (MAX_READERNAME);
+ CHECK_DEFINE (MAX_ATR_SIZE);
+ CHECK_DEFINE (MAX_BUFFER_SIZE);
+
+ BLANK_LINE ();
+ COMMENT ("enum pcsc_adm_commands");
+ CHECK_VALUE (CMD_FUNCTION);
+ CHECK_VALUE (CMD_FAILED);
+ CHECK_VALUE (CMD_SERVER_DIED);
+ CHECK_VALUE (CMD_CLIENT_DIED);
+ CHECK_VALUE (CMD_READER_EVENT);
+ CHECK_VALUE (CMD_SYN);
+ CHECK_VALUE (CMD_ACK);
+ CHECK_VALUE (CMD_VERSION);
+
+ BLANK_LINE ();
+ COMMENT ("enum pcsc_msg_commands");
+ CHECK_VALUE (SCARD_ESTABLISH_CONTEXT);
+ CHECK_VALUE (SCARD_RELEASE_CONTEXT);
+ CHECK_VALUE (SCARD_LIST_READERS);
+ CHECK_VALUE (SCARD_CONNECT);
+ CHECK_VALUE (SCARD_RECONNECT);
+ CHECK_VALUE (SCARD_DISCONNECT);
+ CHECK_VALUE (SCARD_BEGIN_TRANSACTION);
+ CHECK_VALUE (SCARD_END_TRANSACTION);
+ CHECK_VALUE (SCARD_TRANSMIT);
+ CHECK_VALUE (SCARD_CONTROL);
+ CHECK_VALUE (SCARD_STATUS);
+ CHECK_VALUE (SCARD_GET_STATUS_CHANGE);
+ CHECK_VALUE (SCARD_CANCEL);
+ CHECK_VALUE (SCARD_CANCEL_TRANSACTION);
+ CHECK_VALUE (SCARD_GET_ATTRIB);
+ CHECK_VALUE (SCARD_SET_ATTRIB);
+}
+
+static void
+check_types (void)
+{
+ COMMENT ("Types...");
+
+ BLANK_LINE ();
+ CHECK_STRUCT (rxSharedSegment);
+ CHECK_MEMBER (rxSharedSegment, mtype);
+ CHECK_MEMBER (rxSharedSegment, user_id);
+ CHECK_MEMBER (rxSharedSegment, group_id);
+ CHECK_MEMBER (rxSharedSegment, command);
+ CHECK_MEMBER (rxSharedSegment, date);
+ CHECK_MEMBER (rxSharedSegment, key);
+ CHECK_MEMBER (rxSharedSegment, data);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (version_struct);
+ CHECK_MEMBER (version_struct, major);
+ CHECK_MEMBER (version_struct, minor);
+ CHECK_MEMBER (version_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (client_struct);
+ CHECK_MEMBER (client_struct, hContext);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (establish_struct);
+ CHECK_MEMBER (establish_struct, dwScope);
+ CHECK_MEMBER (establish_struct, phContext);
+ CHECK_MEMBER (establish_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (release_struct);
+ CHECK_MEMBER (release_struct, hContext);
+ CHECK_MEMBER (release_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (connect_struct);
+ CHECK_MEMBER (connect_struct, hContext);
+ CHECK_MEMBER (connect_struct, szReader);
+ CHECK_MEMBER (connect_struct, dwShareMode);
+ CHECK_MEMBER (connect_struct, dwPreferredProtocols);
+ CHECK_MEMBER (connect_struct, phCard);
+ CHECK_MEMBER (connect_struct, pdwActiveProtocol);
+ CHECK_MEMBER (connect_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (reconnect_struct);
+ CHECK_MEMBER (reconnect_struct, hCard);
+ CHECK_MEMBER (reconnect_struct, dwShareMode);
+ CHECK_MEMBER (reconnect_struct, dwPreferredProtocols);
+ CHECK_MEMBER (reconnect_struct, dwInitialization);
+ CHECK_MEMBER (reconnect_struct, pdwActiveProtocol);
+ CHECK_MEMBER (reconnect_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (disconnect_struct);
+ CHECK_MEMBER (disconnect_struct, hCard);
+ CHECK_MEMBER (disconnect_struct, dwDisposition);
+ CHECK_MEMBER (disconnect_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (begin_struct);
+ CHECK_MEMBER (begin_struct, hCard);
+ CHECK_MEMBER (begin_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (end_struct);
+ CHECK_MEMBER (end_struct, hCard);
+ CHECK_MEMBER (end_struct, dwDisposition);
+ CHECK_MEMBER (end_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (cancel_struct);
+ CHECK_MEMBER (cancel_struct, hCard);
+ CHECK_MEMBER (cancel_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (status_struct);
+ CHECK_MEMBER (status_struct, hCard);
+ CHECK_MEMBER (status_struct, mszReaderNames);
+ CHECK_MEMBER (status_struct, pcchReaderLen);
+ CHECK_MEMBER (status_struct, pdwState);
+ CHECK_MEMBER (status_struct, pdwProtocol);
+ CHECK_MEMBER (status_struct, pbAtr);
+ CHECK_MEMBER (status_struct, pcbAtrLen);
+ CHECK_MEMBER (status_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (transmit_struct);
+ CHECK_MEMBER (transmit_struct, hCard);
+ CHECK_MEMBER (transmit_struct, pioSendPciProtocol);
+ CHECK_MEMBER (transmit_struct, pioSendPciLength);
+ CHECK_MEMBER (transmit_struct, pbSendBuffer);
+ CHECK_MEMBER (transmit_struct, cbSendLength);
+ CHECK_MEMBER (transmit_struct, pioRecvPciProtocol);
+ CHECK_MEMBER (transmit_struct, pioRecvPciLength);
+ CHECK_MEMBER (transmit_struct, pbRecvBuffer);
+ CHECK_MEMBER (transmit_struct, pcbRecvLength);
+ CHECK_MEMBER (transmit_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (control_struct);
+ CHECK_MEMBER (control_struct, hCard);
+ CHECK_MEMBER (control_struct, dwControlCode);
+ CHECK_MEMBER (control_struct, pbSendBuffer);
+ CHECK_MEMBER (control_struct, cbSendLength);
+ CHECK_MEMBER (control_struct, pbRecvBuffer);
+ CHECK_MEMBER (control_struct, cbRecvLength);
+ CHECK_MEMBER (control_struct, dwBytesReturned);
+ CHECK_MEMBER (control_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (getset_struct);
+ CHECK_MEMBER (getset_struct, hCard);
+ CHECK_MEMBER (getset_struct, dwAttrId);
+ CHECK_MEMBER (getset_struct, cbAttrLen);
+ CHECK_MEMBER (getset_struct, rv);
+
+ BLANK_LINE ();
+ CHECK_STRUCT (pubReaderStatesList);
+ CHECK_MEMBER (pubReaderStatesList, readerID);
+ CHECK_MEMBER (pubReaderStatesList, readerName);
+ CHECK_MEMBER (pubReaderStatesList, readerState);
+ CHECK_MEMBER (pubReaderStatesList, readerSharing);
+ CHECK_MEMBER (pubReaderStatesList, dummy);
+ CHECK_MEMBER (pubReaderStatesList, cardAtr);
+ CHECK_MEMBER (pubReaderStatesList, cardAtrLength);
+ CHECK_MEMBER (pubReaderStatesList, cardProtocol);
+}
+
+int
+main(int argc, char **argv)
+{
+ printf ("#include <sys/types.h>\n"
+ "#include <time.h>\n"
+ "#include <stddef.h>\n\n"
+ "#include \"PCSC/pcsclite.h\"\n"
+ "#include \"pcscd.h\"\n"
+ "#include \"readerfactory.h\"\n"
+ "#include \"eventhandler.h\"\n"
+ "#include \"winscard_msg.h\"\n\n"
+ "#include \"lassert.h\"\n\n"
+ "void pcsc_assert_wire_constants(void)\n"
+ "{\n");
+
+ BLANK_LINE ();
+
+ check_constants ();
+ check_types ();
+
+ BLANK_LINE ();
+
+ printf ("}\n");
+
+ return 0;
+}
diff -urNp pcsc-lite-1.4.0.orig/src/pcsc-wirecheck-main.c pcsc-lite-1.4.0/src/pcsc-wirecheck-main.c
--- pcsc-lite-1.4.0.orig/src/pcsc-wirecheck-main.c 1969-12-31 19:00:00.000000000 -0500
+++ pcsc-lite-1.4.0/src/pcsc-wirecheck-main.c 2007-04-12 12:12:45.000000000 -0400
@@ -0,0 +1,8 @@
+void pcsc_assert_wire_constants(void);
+
+int
+main (int argc, char **argv)
+{
+ pcsc_assert_wire_constants ();
+ return 0;
+}
diff -urNp pcsc-lite-1.4.0.orig/src/readerfactory.c pcsc-lite-1.4.0/src/readerfactory.c
--- pcsc-lite-1.4.0.orig/src/readerfactory.c 2007-02-05 08:13:56.000000000 -0500
+++ pcsc-lite-1.4.0/src/readerfactory.c 2007-04-12 12:12:45.000000000 -0400
@@ -48,6 +48,8 @@ static DWORD dwNumReadersContexts = 0;
static char *ConfigFile = NULL;
static int ConfigFileCRC = 0;
+#define IDENTITY_SHIFT 16
+
LONG RFAllocateReaderSpace(void)
{
int i; /* Counter */
@@ -173,7 +175,7 @@ LONG RFAddReader(LPSTR lpcReader, DWORD
(sReadersContexts[dwContext])->pdwFeeds = NULL;
(sReadersContexts[dwContext])->pdwMutex = NULL;
(sReadersContexts[dwContext])->dwIdentity =
- (dwContext + 1) << (sizeof(DWORD) / 2) * 8;
+ (dwContext + 1) << IDENTITY_SHIFT;
(sReadersContexts[dwContext])->readerState = NULL;
for (i = 0; i < PCSCLITE_MAX_READER_CONTEXT_CHANNELS; i++)
@@ -388,7 +390,7 @@ LONG RFAddReader(LPSTR lpcReader, DWORD
(sReadersContexts[dwContextB])->dwLockId = 0;
(sReadersContexts[dwContextB])->readerState = NULL;
(sReadersContexts[dwContextB])->dwIdentity =
- (dwContextB + 1) << (sizeof(DWORD) / 2) * 8;
+ (dwContextB + 1) << IDENTITY_SHIFT;
for (i = 0; i < PCSCLITE_MAX_READER_CONTEXT_CHANNELS; i++)
(sReadersContexts[dwContextB])->psHandles[i].hCard = 0;
@@ -800,8 +802,8 @@ LONG RFReaderInfoById(DWORD dwIdentity,
/*
* Strip off the lower nibble and get the identity
*/
- dwIdentity = dwIdentity >> (sizeof(DWORD) / 2) * 8;
- dwIdentity = dwIdentity << (sizeof(DWORD) / 2) * 8;
+ dwIdentity = dwIdentity >> IDENTITY_SHIFT;
+ dwIdentity = dwIdentity << IDENTITY_SHIFT;
for (i = 0; i < PCSCLITE_MAX_READERS_CONTEXTS; i++)
{
diff -urNp pcsc-lite-1.4.0.orig/src/winscard.c pcsc-lite-1.4.0/src/winscard.c
--- pcsc-lite-1.4.0.orig/src/winscard.c 2007-02-05 08:55:01.000000000 -0500
+++ pcsc-lite-1.4.0/src/winscard.c 2007-04-12 12:12:45.000000000 -0400
@@ -508,6 +508,7 @@ LONG SCardReconnect(SCARDHANDLE hCard, D
LONG rv;
PREADER_CONTEXT rContext = NULL;
int do_sleep = 1;
+ DWORD dwAtrLen;
Log1(PCSC_LOG_DEBUG, "Attempting reconnect to token.");
@@ -568,19 +569,21 @@ LONG SCardReconnect(SCARDHANDLE hCard, D
/*
* Currently pcsc-lite keeps the card powered constantly
*/
+ dwAtrLen = rContext->readerState->cardAtrLength;
if (SCARD_RESET_CARD == dwInitialization)
rv = IFDPowerICC(rContext, IFD_RESET,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
else
{
rv = IFDPowerICC(rContext, IFD_POWER_DOWN,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
rv = IFDPowerICC(rContext, IFD_POWER_UP,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
}
+ rContext->readerState->cardAtrLength = dwAtrLen;
/* the protocol is unset after a power on */
rContext->readerState->cardProtocol = SCARD_PROTOCOL_UNSET;
@@ -800,6 +803,7 @@ LONG SCardDisconnect(SCARDHANDLE hCard,
{
LONG rv;
PREADER_CONTEXT rContext = NULL;
+ DWORD dwAtrLen;
if (hCard == 0)
return SCARD_E_INVALID_HANDLE;
@@ -844,20 +848,21 @@ LONG SCardDisconnect(SCARDHANDLE hCard,
/*
* Currently pcsc-lite keeps the card powered constantly
*/
+ dwAtrLen = rContext->readerState->cardAtrLength;
if (SCARD_RESET_CARD == dwDisposition)
rv = IFDPowerICC(rContext, IFD_RESET,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
else
{
rv = IFDPowerICC(rContext, IFD_POWER_DOWN,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
rv = IFDPowerICC(rContext, IFD_POWER_UP,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
}
-
+ rContext->readerState->cardAtrLength = dwAtrLen;
/* the protocol is unset after a power on */
rContext->readerState->cardProtocol = SCARD_PROTOCOL_UNSET;
@@ -1020,6 +1025,7 @@ LONG SCardEndTransaction(SCARDHANDLE hCa
{
LONG rv;
PREADER_CONTEXT rContext = NULL;
+ DWORD dwAtrLen;
/*
* Ignoring dwDisposition for now
@@ -1057,19 +1063,21 @@ LONG SCardEndTransaction(SCARDHANDLE hCa
/*
* Currently pcsc-lite keeps the card always powered
*/
+ dwAtrLen = rContext->readerState->cardAtrLength;
if (SCARD_RESET_CARD == dwDisposition)
rv = IFDPowerICC(rContext, IFD_RESET,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
else
{
rv = IFDPowerICC(rContext, IFD_POWER_DOWN,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
rv = IFDPowerICC(rContext, IFD_POWER_UP,
rContext->readerState->cardAtr,
- &rContext->readerState->cardAtrLength);
+ &dwAtrLen);
}
+ rContext->readerState->cardAtrLength = dwAtrLen;
/* the protocol is unset after a power on */
rContext->readerState->cardProtocol = SCARD_PROTOCOL_UNSET;
diff -urNp pcsc-lite-1.4.0.orig/src/winscard_clnt.c pcsc-lite-1.4.0/src/winscard_clnt.c
--- pcsc-lite-1.4.0.orig/src/winscard_clnt.c 2007-02-05 11:48:13.000000000 -0500
+++ pcsc-lite-1.4.0/src/winscard_clnt.c 2007-04-12 12:12:45.000000000 -0400
@@ -287,7 +287,7 @@ static LONG SCardEstablishContextTH(DWOR
int i;
establish_struct scEstablishStruct;
sharedSegmentMsg msgStruct;
- DWORD dwClientID = 0;
+ uint32_t dwClientID = 0;
if (phContext == NULL)
return SCARD_E_INVALID_PARAMETER;
@@ -2763,20 +2763,20 @@ LONG SCardTransmit(SCARDHANDLE hCard, LP
scTransmitStructExtended->size = sizeof(*scTransmitStructExtended)
- (sizeof(transmit_struct_extended) - offsetof(transmit_struct_extended, data))
+ cbSendLength;
- memcpy(&scTransmitStructExtended->pioSendPci, pioSendPci,
- sizeof(SCARD_IO_REQUEST));
+ scTransmitStructExtended->pioSendPciProtocol = pioSendPci->dwProtocol;
+ scTransmitStructExtended->pioSendPciLength = pioSendPci->cbPciLength;
memcpy(scTransmitStructExtended->data, pbSendBuffer, cbSendLength);
scTransmitStructExtended->rv = SCARD_S_SUCCESS;
if (pioRecvPci)
{
- memcpy(&scTransmitStructExtended->pioRecvPci, pioRecvPci,
- sizeof(SCARD_IO_REQUEST));
+ scTransmitStructExtended->pioRecvPciProtocol = pioRecvPci->dwProtocol;
+ scTransmitStructExtended->pioRecvPciLength = pioRecvPci->cbPciLength;
}
else
{
- scTransmitStructExtended->pioRecvPci.dwProtocol = SCARD_PROTOCOL_ANY;
- scTransmitStructExtended->pioRecvPci.cbPciLength = sizeof(SCARD_IO_REQUEST);
+ scTransmitStructExtended->pioRecvPciProtocol = SCARD_PROTOCOL_ANY;
+ scTransmitStructExtended->pioRecvPciLength = sizeof(SCARD_IO_REQUEST);
}
rv = WrapSHMWrite(SCARD_TRANSMIT_EXTENDED,
@@ -2725,9 +2725,10 @@ LONG SCardTransmit(SCARDHANDLE hCard, LP
memset(scTransmitStructExtended -> data, 0x00,
scTransmitStructExtended -> pcbRecvLength);
- if (pioRecvPci)
- memcpy(pioRecvPci, &scTransmitStructExtended -> pioRecvPci,
- sizeof(SCARD_IO_REQUEST));
+ if (pioRecvPci) {
+ pioRecvPci->dwProtocol = scTransmitStructExtended->pioRecvPciProtocol;
+ pioRecvPci->cbPciLength = scTransmitStructExtended->pioRecvPciLength;
+ }
}
*pcbRecvLength = scTransmitStructExtended -> pcbRecvLength;
@@ -2848,15 +2848,15 @@ LONG SCardTransmit(SCARDHANDLE hCard, LP
scTransmitStruct.hCard = hCard;
scTransmitStruct.cbSendLength = cbSendLength;
scTransmitStruct.pcbRecvLength = *pcbRecvLength;
- memcpy(&scTransmitStruct.pioSendPci, pioSendPci,
- sizeof(SCARD_IO_REQUEST));
+ scTransmitStruct.pioSendPciProtocol = pioSendPci->dwProtocol;
+ scTransmitStruct.pioSendPciLength = pioSendPci->cbPciLength;
memcpy(scTransmitStruct.pbSendBuffer, pbSendBuffer, cbSendLength);
memset(scTransmitStruct.pbSendBuffer+cbSendLength, 0, sizeof(scTransmitStruct.pbSendBuffer)-cbSendLength);
memset(scTransmitStruct.pbRecvBuffer, 0, sizeof(scTransmitStruct.pbRecvBuffer));
scTransmitStruct.rv = SCARD_S_SUCCESS;
- scTransmitStruct.pioRecvPci.dwProtocol = SCARD_PROTOCOL_ANY;
- scTransmitStruct.pioRecvPci.cbPciLength = sizeof(scTransmitStruct.pioRecvPci);
+ scTransmitStruct.pioRecvPciProtocol = SCARD_PROTOCOL_ANY;
+ scTransmitStruct.pioRecvPciLength = sizeof(SCARD_IO_REQUEST);
rv = WrapSHMWrite(SCARD_TRANSMIT,
psContextMap[dwContextIndex].dwClientID, sizeof(scTransmitStruct),
@@ -2794,9 +2795,10 @@ LONG SCardTransmit(SCARDHANDLE hCard, LP
memset(scTransmitStruct.pbRecvBuffer, 0x00,
scTransmitStruct.pcbRecvLength);
- if (pioRecvPci)
- memcpy(pioRecvPci, &scTransmitStruct.pioRecvPci,
- sizeof(SCARD_IO_REQUEST));
+ if (pioRecvPci) {
+ pioRecvPci->dwProtocol = scTransmitStruct.pioRecvPciProtocol;
+ pioRecvPci->cbPciLength = scTransmitStruct.pioRecvPciLength;
+ }
}
*pcbRecvLength = scTransmitStruct.pcbRecvLength;
diff -urNp pcsc-lite-1.4.0.orig/src/winscard_msg.c pcsc-lite-1.4.0/src/winscard_msg.c
--- pcsc-lite-1.4.0.orig/src/winscard_msg.c 2007-02-05 08:13:56.000000000 -0500
+++ pcsc-lite-1.4.0/src/winscard_msg.c 2007-04-12 12:12:45.000000000 -0400
@@ -53,7 +53,7 @@
*
* @return Same error codes as SHMMessageReceive().
*/
-INTERNAL int SHMClientRead(psharedSegmentMsg msgStruct, DWORD dwClientID, int blockamount)
+INTERNAL int32_t SHMClientRead(psharedSegmentMsg msgStruct, uint32_t dwClientID, int32_t blockamount)
{
return SHMMessageReceive(msgStruct, sizeof(*msgStruct), dwClientID, blockamount);
}
@@ -71,7 +71,7 @@ INTERNAL int SHMClientRead(psharedSegmen
* @retval -1 The socket can not open a connection.
* @retval -1 Can not set the socket to non-blocking.
*/
-INTERNAL int SHMClientSetupSession(PDWORD pdwClientID)
+INTERNAL int SHMClientSetupSession(uint32_t *pdwClientID)
{
struct sockaddr_un svc_addr;
int one;
@@ -118,7 +118,7 @@ INTERNAL int SHMClientSetupSession(PDWOR
*
* @retval 0 Success.
*/
-INTERNAL int SHMClientCloseSession(DWORD dwClientID)
+INTERNAL int SHMClientCloseSession(uint32_t dwClientID)
{
SYS_CloseFile(dwClientID);
return 0;
@@ -139,8 +139,8 @@ INTERNAL int SHMClientCloseSession(DWORD
* @retval -1 Socket is closed.
* @retval -1 A signal was received.
*/
-INTERNAL int SHMMessageSend(void *buffer_void, size_t buffer_size,
- int filedes, int blockAmount)
+INTERNAL int SHMMessageSend(void *buffer_void, uint64_t buffer_size,
+ int32_t filedes, int32_t blockAmount)
{
char *buffer = buffer_void;
@@ -264,8 +264,8 @@ INTERNAL int SHMMessageSend(void *buffer
* @retval -1 Socket is closed.
* @retval -1 A signal was received.
*/
-INTERNAL int SHMMessageReceive(void *buffer_void, size_t buffer_size,
- int filedes, int blockAmount)
+INTERNAL int SHMMessageReceive(void *buffer_void, uint64_t buffer_size,
+ int32_t filedes, int32_t blockAmount)
{
char *buffer = buffer_void;
@@ -389,8 +389,8 @@ INTERNAL int SHMMessageReceive(void *buf
*
* @return Same error codes as SHMMessageSend().
*/
-INTERNAL int WrapSHMWrite(unsigned int command, DWORD dwClientID,
- unsigned int size, unsigned int blockAmount, void *data_void)
+INTERNAL int32_t WrapSHMWrite(uint32_t command, uint32_t dwClientID,
+ uint64_t size, uint32_t blockAmount, void *data_void)
{
char *data = data_void;
@@ -426,7 +426,6 @@ INTERNAL int32_t WrapSHMWrite(uint32_t c
msgStruct.user_id = SYS_GetUID();
msgStruct.group_id = SYS_GetGID();
msgStruct.command = command;
- msgStruct.dummy = 0;
msgStruct.date = time(NULL);
memset(msgStruct.key, 0, sizeof(msgStruct.key));
if ((SCARD_TRANSMIT_EXTENDED == command)
diff -urNp pcsc-lite-1.4.0.orig/src/winscard_msg.h pcsc-lite-1.4.0/src/winscard_msg.h
--- pcsc-lite-1.4.0.orig/src/winscard_msg.h 2007-01-06 15:26:57.000000000 -0500
+++ pcsc-lite-1.4.0/src/winscard_msg.h 2007-04-12 12:12:45.000000000 -0400
@@ -18,10 +18,12 @@
#ifndef __winscard_msg_h__
#define __winscard_msg_h__
+#include <stdint.h>
+
/** Major version of the current message protocol */
-#define PROTOCOL_VERSION_MAJOR 2
+#define PROTOCOL_VERSION_MAJOR 3
/** Minor version of the current message protocol */
-#define PROTOCOL_VERSION_MINOR 2
+#define PROTOCOL_VERSION_MINOR 0
#ifdef __cplusplus
extern "C"
@@ -41,13 +43,12 @@ extern "C"
*/
typedef struct rxSharedSegment
{
- unsigned int mtype; /** one of the \c pcsc_adm_commands */
- unsigned int user_id;
- unsigned int group_id;
- unsigned int command; /** one of the \c pcsc_msg_commands */
- unsigned int dummy; /* was request_id in pcsc-lite <= 1.2.0 */
- time_t date;
- unsigned char key[PCSCLITE_MSG_KEY_LEN];
+ uint32_t mtype; /** one of the \c pcsc_adm_commands */
+ uint32_t user_id;
+ uint32_t group_id;
+ uint32_t command; /** one of the \c pcsc_msg_commands */
+ uint64_t date;
+ unsigned char key[PCSCLITE_MSG_KEY_LEN]; /* 16 bytes */
unsigned char data[PCSCLITE_MAX_MESSAGE_SIZE];
}
sharedSegmentMsg, *psharedSegmentMsg;
@@ -97,15 +98,15 @@ extern "C"
*/
struct version_struct
{
- int major;
- int minor;
- LONG rv;
+ int32_t major;
+ int32_t minor;
+ int32_t rv;
};
typedef struct version_struct version_struct;
struct client_struct
{
- SCARDCONTEXT hContext;
+ uint32_t hContext;
};
typedef struct client_struct client_struct;
@@ -116,9 +117,9 @@ extern "C"
*/
struct establish_struct
{
- DWORD dwScope;
- SCARDCONTEXT phContext;
- LONG rv;
+ uint32_t dwScope;
+ uint32_t phContext;
+ int32_t rv;
};
typedef struct establish_struct establish_struct;
@@ -129,8 +130,8 @@ extern "C"
*/
struct release_struct
{
- SCARDCONTEXT hContext;
- LONG rv;
+ uint32_t hContext;
+ int32_t rv;
};
typedef struct release_struct release_struct;
@@ -141,13 +142,13 @@ extern "C"
*/
struct connect_struct
{
- SCARDCONTEXT hContext;
- char szReader[MAX_READERNAME];
- DWORD dwShareMode;
- DWORD dwPreferredProtocols;
- SCARDHANDLE phCard;
- DWORD pdwActiveProtocol;
- LONG rv;
+ uint32_t hContext;
+ char szReader[MAX_READERNAME];
+ uint32_t dwShareMode;
+ uint32_t dwPreferredProtocols;
+ int32_t phCard;
+ uint32_t pdwActiveProtocol;
+ int32_t rv;
};
typedef struct connect_struct connect_struct;
@@ -158,12 +159,12 @@ extern "C"
*/
struct reconnect_struct
{
- SCARDHANDLE hCard;
- DWORD dwShareMode;
- DWORD dwPreferredProtocols;
- DWORD dwInitialization;
- DWORD pdwActiveProtocol;
- LONG rv;
+ int32_t hCard;
+ uint32_t dwShareMode;
+ uint32_t dwPreferredProtocols;
+ uint32_t dwInitialization;
+ uint32_t pdwActiveProtocol;
+ int32_t rv;
};
typedef struct reconnect_struct reconnect_struct;
@@ -174,9 +175,9 @@ extern "C"
*/
struct disconnect_struct
{
- SCARDHANDLE hCard;
- DWORD dwDisposition;
- LONG rv;
+ int32_t hCard;
+ uint32_t dwDisposition;
+ int32_t rv;
};
typedef struct disconnect_struct disconnect_struct;
@@ -187,8 +188,8 @@ extern "C"
*/
struct begin_struct
{
- SCARDHANDLE hCard;
- LONG rv;
+ int32_t hCard;
+ int32_t rv;
};
typedef struct begin_struct begin_struct;
@@ -199,9 +200,9 @@ extern "C"
*/
struct end_struct
{
- SCARDHANDLE hCard;
- DWORD dwDisposition;
- LONG rv;
+ int32_t hCard;
+ uint32_t dwDisposition;
+ int32_t rv;
};
typedef struct end_struct end_struct;
@@ -212,8 +213,8 @@ extern "C"
*/
struct cancel_struct
{
- SCARDHANDLE hCard;
- LONG rv;
+ int32_t hCard;
+ int32_t rv;
};
typedef struct cancel_struct cancel_struct;
@@ -224,14 +225,14 @@ extern "C"
*/
struct status_struct
{
- SCARDHANDLE hCard;
+ int32_t hCard;
char mszReaderNames[MAX_READERNAME];
- DWORD pcchReaderLen;
- DWORD pdwState;
- DWORD pdwProtocol;
- UCHAR pbAtr[MAX_ATR_SIZE];
- DWORD pcbAtrLen;
- LONG rv;
+ uint32_t pcchReaderLen;
+ uint32_t pdwState;
+ uint32_t pdwProtocol;
+ uint32_t pcbAtrLen;
+ int32_t rv;
+ uint8_t pbAtr[MAX_ATR_SIZE];
};
typedef struct status_struct status_struct;
@@ -242,14 +243,16 @@ extern "C"
*/
struct transmit_struct
{
- SCARDHANDLE hCard;
- SCARD_IO_REQUEST pioSendPci;
- UCHAR pbSendBuffer[MAX_BUFFER_SIZE];
- DWORD cbSendLength;
- SCARD_IO_REQUEST pioRecvPci;
- BYTE pbRecvBuffer[MAX_BUFFER_SIZE];
- DWORD pcbRecvLength;
- LONG rv;
+ int32_t hCard;
+ uint32_t pioSendPciProtocol;
+ uint32_t pioSendPciLength;
+ uint8_t pbSendBuffer[MAX_BUFFER_SIZE];
+ uint32_t cbSendLength;
+ uint32_t pioRecvPciProtocol;
+ uint32_t pioRecvPciLength;
+ uint8_t pbRecvBuffer[MAX_BUFFER_SIZE];
+ uint32_t pcbRecvLength;
+ int32_t rv;
};
typedef struct transmit_struct transmit_struct;
@@ -260,14 +263,16 @@ extern "C"
*/
struct transmit_struct_extended
{
- SCARDHANDLE hCard;
- SCARD_IO_REQUEST pioSendPci;
- DWORD cbSendLength;
- SCARD_IO_REQUEST pioRecvPci;
- DWORD pcbRecvLength;
- LONG rv;
- size_t size;
- BYTE data[1];
+ int32_t hCard;
+ uint32_t pioSendPciProtocol;
+ uint32_t pioSendPciLength;
+ uint32_t cbSendLength;
+ uint32_t pioRecvPciProtocol;
+ uint32_t pioRecvPciLength;
+ uint32_t pcbRecvLength;
+ int32_t rv;
+ uint64_t size;
+ uint8_t data[1];
};
typedef struct transmit_struct_extended transmit_struct_extended;
@@ -278,14 +283,14 @@ extern "C"
*/
struct control_struct
{
- SCARDHANDLE hCard;
- DWORD dwControlCode;
- UCHAR pbSendBuffer[MAX_BUFFER_SIZE];
- DWORD cbSendLength;
- UCHAR pbRecvBuffer[MAX_BUFFER_SIZE];
- DWORD cbRecvLength;
- DWORD dwBytesReturned;
- LONG rv;
+ int32_t hCard;
+ uint32_t dwControlCode;
+ uint8_t pbSendBuffer[MAX_BUFFER_SIZE];
+ uint32_t cbSendLength;
+ uint8_t pbRecvBuffer[MAX_BUFFER_SIZE];
+ uint32_t cbRecvLength;
+ uint32_t dwBytesReturned;
+ int32_t rv;
};
typedef struct control_struct control_struct;
@@ -296,14 +301,14 @@ extern "C"
*/
struct control_struct_extended
{
- SCARDHANDLE hCard;
- DWORD dwControlCode;
- DWORD cbSendLength;
- DWORD cbRecvLength;
- DWORD pdwBytesReturned;
- LONG rv;
- size_t size;
- BYTE data[1];
+ int32_t hCard;
+ uint32_t dwControlCode;
+ uint32_t cbSendLength;
+ uint32_t cbRecvLength;
+ uint32_t pdwBytesReturned;
+ int32_t rv;
+ uint64_t size;
+ uint8_t data[1];
};
typedef struct control_struct_extended control_struct_extended;
@@ -314,11 +319,11 @@ extern "C"
*/
struct getset_struct
{
- SCARDHANDLE hCard;
- DWORD dwAttrId;
- UCHAR pbAttr[MAX_BUFFER_SIZE];
- DWORD cbAttrLen;
- LONG rv;
+ int32_t hCard;
+ uint32_t dwAttrId;
+ uint8_t pbAttr[MAX_BUFFER_SIZE];
+ uint32_t cbAttrLen;
+ int32_t rv;
};
typedef struct getset_struct getset_struct;
@@ -326,19 +331,19 @@ extern "C"
* Now some function definitions
*/
- int SHMClientRead(psharedSegmentMsg, DWORD, int);
- int SHMClientSetupSession(PDWORD);
- int SHMClientCloseSession(DWORD);
- int SHMInitializeCommonSegment(void);
- int SHMProcessEventsContext(PDWORD, psharedSegmentMsg, int);
- int SHMProcessEventsServer(PDWORD, int);
- int SHMMessageSend(void *buffer, size_t buffer_size, int filedes,
- int blockAmount);
- int SHMMessageReceive(void *buffer, size_t buffer_size,
- int filedes, int blockAmount);
- int WrapSHMWrite(unsigned int command, DWORD dwClientID, unsigned int size,
- unsigned int blockAmount, void *data);
- void SHMCleanupSharedSegment(int, const char *);
+ int32_t SHMClientRead(psharedSegmentMsg, uint32_t, int32_t);
+ int32_t SHMClientSetupSession(uint32_t *);
+ int32_t SHMClientCloseSession(uint32_t);
+ int32_t SHMInitializeCommonSegment(void);
+ int32_t SHMProcessEventsContext(uint32_t *, psharedSegmentMsg, int32_t);
+ int32_t SHMProcessEventsServer(uint32_t *, int32_t);
+ int32_t SHMMessageSend(void *buffer, uint64_t buffer_size, int32_t filedes,
+ int32_t blockAmount);
+ int32_t SHMMessageReceive(void *buffer, uint64_t buffer_size,
+ int32_t filedes, int32_t blockAmount);
+ int32_t WrapSHMWrite(uint32_t command, uint32_t dwClientID, uint64_t size,
+ uint32_t blockAmount, void *data);
+ void SHMCleanupSharedSegment(int32_t, const char *);
#ifdef __cplusplus
}
diff -urNp pcsc-lite-1.4.0.orig/src/winscard_msg_srv.c pcsc-lite-1.4.0/src/winscard_msg_srv.c
--- pcsc-lite-1.4.0.orig/src/winscard_msg_srv.c 2007-02-05 08:13:56.000000000 -0500
+++ pcsc-lite-1.4.0/src/winscard_msg_srv.c 2007-04-12 12:12:45.000000000 -0400
@@ -61,7 +61,7 @@ extern char ReCheckSerialReaders;
* @retval -1 Can not establish the connection.
* @retval -1 Can not set the connection to non-blocking mode.
*/
-static int SHMProcessCommonChannelRequest(PDWORD pdwClientID)
+static int SHMProcessCommonChannelRequest(uint32_t *pdwClientID)
{
socklen_t clnt_len;
int new_sock;
@@ -168,7 +168,7 @@ INTERNAL int SHMInitializeCommonSegment(
#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
#define DO_TIMEOUT
#endif
-INTERNAL int SHMProcessEventsServer(PDWORD pdwClientID, int blocktime)
+INTERNAL int32_t SHMProcessEventsServer(uint32_t *pdwClientID, int32_t blocktime)
{
fd_set read_fd;
int selret;
@@ -236,7 +236,7 @@ INTERNAL int SHMProcessEventsServer(PDWO
*
* Called by \c ContextThread().
*/
-INTERNAL int SHMProcessEventsContext(PDWORD pdwClientID, psharedSegmentMsg msgStruct, int blocktime)
+INTERNAL int32_t SHMProcessEventsContext(uint32_t *pdwClientID, psharedSegmentMsg msgStruct, int32_t blocktime)
{
fd_set read_fd;
int selret, rv;
diff -urNp pcsc-lite-1.4.0.orig/src/winscard_svc.c pcsc-lite-1.4.0/src/winscard_svc.c
--- pcsc-lite-1.4.0.orig/src/winscard_svc.c 2007-02-05 08:13:56.000000000 -0500
+++ pcsc-lite-1.4.0/src/winscard_svc.c 2007-04-12 12:12:45.000000000 -0400
@@ -40,9 +40,9 @@
*/
static struct _psContext
{
- SCARDCONTEXT hContext;
- SCARDHANDLE hCard[PCSCLITE_MAX_APPLICATION_CONTEXT_CHANNELS];
- DWORD dwClientID; /* Connection ID used to reference the Client. */
+ uint32_t hContext;
+ uint32_t hCard[PCSCLITE_MAX_APPLICATION_CONTEXT_CHANNELS];
+ uint32_t dwClientID; /* Connection ID used to reference the Client. */
PCSCLITE_THREAD_T pthThread; /* Event polling thread's ID */
sharedSegmentMsg msgStruct; /* Msg sent by the Client */
int protocol_major, protocol_minor; /* Protocol number agreed between client and server*/
@@ -74,7 +74,7 @@ LONG ContextsInitialize(void)
* @retval SCARD_F_INTERNAL_ERROR Exceded the maximum number of simultaneous Application Contexts.
* @retval SCARD_E_NO_MEMORY Error creating the Context Thread.
*/
-LONG CreateContextThread(PDWORD pdwClientID)
+LONG CreateContextThread(uint32_t *pdwClientID)
{
int i;
@@ -261,6 +261,21 @@ LONG MSGFunctionDemarshall(psharedSegmen
control_struct *ctStr;
getset_struct *gsStr;
+ SCARDCONTEXT hContext;
+ SCARDHANDLE hCard;
+ DWORD dwActiveProtocol;
+
+ DWORD cchReaderLen;
+ DWORD dwState;
+ DWORD dwProtocol;
+ DWORD cbAtrLen;
+ DWORD cbRecvLength;
+ DWORD dwBytesReturned;
+ DWORD cbAttrLen;
+
+ SCARD_IO_REQUEST ioSendPci;
+ SCARD_IO_REQUEST ioRecvPci;
+
/*
* Zero out everything
*/
@@ -270,8 +285,10 @@ LONG MSGFunctionDemarshall(psharedSegmen
case SCARD_ESTABLISH_CONTEXT:
esStr = ((establish_struct *) msgStruct->data);
- esStr->rv = SCardEstablishContext(esStr->dwScope, 0, 0,
- &esStr->phContext);
+
+ hContext = esStr->phContext;
+ esStr->rv = SCardEstablishContext(esStr->dwScope, 0, 0, &hContext);
+ esStr->phContext = hContext;
if (esStr->rv == SCARD_S_SUCCESS)
esStr->rv =
@@ -290,9 +307,16 @@ LONG MSGFunctionDemarshall(psharedSegmen
case SCARD_CONNECT:
coStr = ((connect_struct *) msgStruct->data);
+
+ hCard = coStr->phCard;
+ dwActiveProtocol = coStr->pdwActiveProtocol;
+
coStr->rv = SCardConnect(coStr->hContext, coStr->szReader,
coStr->dwShareMode, coStr->dwPreferredProtocols,
- &coStr->phCard, &coStr->pdwActiveProtocol);
+ &hCard, &dwActiveProtocol);
+
+ coStr->phCard = hCard;
+ coStr->pdwActiveProtocol = dwActiveProtocol;
if (coStr->rv == SCARD_S_SUCCESS)
coStr->rv =
@@ -307,7 +331,8 @@ LONG MSGFunctionDemarshall(psharedSegmen
rcStr->rv = SCardReconnect(rcStr->hCard, rcStr->dwShareMode,
rcStr->dwPreferredProtocols,
- rcStr->dwInitialization, &rcStr->pdwActiveProtocol);
+ rcStr->dwInitialization, &dwActiveProtocol);
+ rcStr->pdwActiveProtocol = dwActiveProtocol;
break;
case SCARD_DISCONNECT:
@@ -347,37 +372,74 @@ LONG MSGFunctionDemarshall(psharedSegmen
stStr = ((status_struct *) msgStruct->data);
rv = MSGCheckHandleAssociation(stStr->hCard, dwContextIndex);
if (rv != 0) return rv;
+
+ cchReaderLen = stStr->pcchReaderLen;
+ dwState = stStr->pdwState;
+ dwProtocol = stStr->pdwProtocol;
+ cbAtrLen = stStr->pcbAtrLen;
+
stStr->rv = SCardStatus(stStr->hCard, stStr->mszReaderNames,
- &stStr->pcchReaderLen, &stStr->pdwState,
- &stStr->pdwProtocol, stStr->pbAtr, &stStr->pcbAtrLen);
+ &cchReaderLen, &dwState,
+ &dwProtocol, stStr->pbAtr, &cbAtrLen);
+
+ stStr->pcchReaderLen = cchReaderLen;
+ stStr->pdwState = dwState;
+ stStr->pdwProtocol = dwProtocol;
+ stStr->pcbAtrLen = cbAtrLen;
break;
case SCARD_TRANSMIT:
trStr = ((transmit_struct *) msgStruct->data);
rv = MSGCheckHandleAssociation(trStr->hCard, dwContextIndex);
if (rv != 0) return rv;
- trStr->rv = SCardTransmit(trStr->hCard, &trStr->pioSendPci,
+
+ ioSendPci.dwProtocol = trStr->pioSendPciProtocol;
+ ioSendPci.cbPciLength = trStr->pioSendPciLength;
+ ioRecvPci.dwProtocol = trStr->pioRecvPciProtocol;
+ ioRecvPci.cbPciLength = trStr->pioRecvPciLength;
+ cbRecvLength = trStr->pcbRecvLength;
+
+ trStr->rv = SCardTransmit(trStr->hCard, &ioSendPci,
trStr->pbSendBuffer, trStr->cbSendLength,
- &trStr->pioRecvPci, trStr->pbRecvBuffer,
- &trStr->pcbRecvLength);
+ &ioRecvPci, trStr->pbRecvBuffer,
+ &cbRecvLength);
+
+ trStr->pioSendPciProtocol = ioSendPci.dwProtocol;
+ trStr->pioSendPciLength = ioSendPci.cbPciLength;
+ trStr->pioRecvPciProtocol = ioRecvPci.dwProtocol;
+ trStr->pioRecvPciLength = ioRecvPci.cbPciLength;
+ trStr->pcbRecvLength = cbRecvLength;
+
break;
case SCARD_CONTROL:
ctStr = ((control_struct *) msgStruct->data);
rv = MSGCheckHandleAssociation(ctStr->hCard, dwContextIndex);
if (rv != 0) return rv;
+
+ dwBytesReturned = ctStr->dwBytesReturned;
+
ctStr->rv = SCardControl(ctStr->hCard, ctStr->dwControlCode,
ctStr->pbSendBuffer, ctStr->cbSendLength,
ctStr->pbRecvBuffer, ctStr->cbRecvLength,
- &ctStr->dwBytesReturned);
+ &dwBytesReturned);
+
+ ctStr->dwBytesReturned = dwBytesReturned;
+
break;
case SCARD_GET_ATTRIB:
gsStr = ((getset_struct *) msgStruct->data);
rv = MSGCheckHandleAssociation(gsStr->hCard, dwContextIndex);
if (rv != 0) return rv;
+
+ cbAttrLen = gsStr->cbAttrLen;
+
gsStr->rv = SCardGetAttrib(gsStr->hCard, gsStr->dwAttrId,
- gsStr->pbAttr, &gsStr->cbAttrLen);
+ gsStr->pbAttr, &cbAttrLen);
+
+ gsStr->cbAttrLen = cbAttrLen;
+
break;
case SCARD_SET_ATTRIB:
@@ -417,10 +479,22 @@ LONG MSGFunctionDemarshall(psharedSegmen
else
memcpy(pbSendBuffer, treStr->data, treStr->cbSendLength);
- treStr->rv = SCardTransmit(treStr->hCard, &treStr->pioSendPci,
+ ioSendPci.dwProtocol = treStr->pioSendPciProtocol;
+ ioSendPci.cbPciLength = treStr->pioSendPciLength;
+ ioRecvPci.dwProtocol = treStr->pioRecvPciProtocol;
+ ioRecvPci.cbPciLength = treStr->pioRecvPciLength;
+ cbRecvLength = treStr->pcbRecvLength;
+
+ treStr->rv = SCardTransmit(treStr->hCard, &ioSendPci,
pbSendBuffer, treStr->cbSendLength,
- &treStr->pioRecvPci, pbRecvBuffer,
- &treStr->pcbRecvLength);
+ &ioRecvPci, pbRecvBuffer,
+ &cbRecvLength);
+
+ treStr->pioSendPciProtocol = ioSendPci.dwProtocol;
+ treStr->pioSendPciLength = ioSendPci.cbPciLength;
+ treStr->pioRecvPciProtocol = ioRecvPci.dwProtocol;
+ treStr->pioRecvPciLength = ioRecvPci.cbPciLength;
+ treStr->pcbRecvLength = cbRecvLength;
treStr->size = sizeof(*treStr) + treStr->pcbRecvLength;
if (treStr->size > PCSCLITE_MAX_MESSAGE_SIZE)
@@ -486,10 +560,14 @@ LONG MSGFunctionDemarshall(psharedSegmen
else
memcpy(pbSendBuffer, cteStr->data, cteStr->cbSendLength);
+ dwBytesReturned = cteStr->pdwBytesReturned;
+
cteStr->rv = SCardControl(cteStr->hCard, cteStr->dwControlCode,
pbSendBuffer, cteStr->cbSendLength,
pbRecvBuffer, cteStr->cbRecvLength,
- &cteStr->pdwBytesReturned);
+ &dwBytesReturned);
+
+ cteStr->pdwBytesReturned = dwBytesReturned;
cteStr->size = sizeof(*cteStr) + cteStr->pdwBytesReturned;
if (cteStr->size > PCSCLITE_MAX_MESSAGE_SIZE)
diff -urNp pcsc-lite-1.4.0.orig/src/winscard_svc.h pcsc-lite-1.4.0/src/winscard_svc.h
--- pcsc-lite-1.4.0.orig/src/winscard_svc.h 2006-09-06 15:49:51.000000000 -0400
+++ pcsc-lite-1.4.0/src/winscard_svc.h 2007-04-12 12:12:45.000000000 -0400
@@ -22,7 +22,7 @@ extern "C"
{
#endif
LONG ContextsInitialize(void);
- LONG CreateContextThread(PDWORD);
+ LONG CreateContextThread(uint32_t *);
#ifdef __cplusplus
}
#endif