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
openSUSE Build Service is sponsored by