Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:jberkman
pcsc-lite
pcsc-lite-1.4.3-64bit-compat2.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor