Hi, attached is the clean 64 bit patch. It makes libOCFPCSC1 compile on Debian 64, and should be clean on 32 bit systems as well.

It is made with 'svn diff' against the latest svn source.

To use, trivial changes have to be made to opencard java files, start with OCFPCSC1.java

Cheers,
Tomas

PS: There are additional problems such as that a few methods, for example SCardReconnect is commented out so it always returns failure. But that's another story and will be later. At least the currently working code works on 64 bit with this patch.

Ludovic Rousseau wrote:
On 14/09/05, Tomas Gustavsson <[EMAIL PROTECTED]> wrote:

Hi, here is a patch for libOCFPCSC1 that works in 64-bit Linux, tested
on Debian-64.


Your patch contains a lot more than just support of 64-bits.

For example, why have you changed readerState from a pointer to an array?

Please submit independent and documented patches for all the
modifications you want to see applied. I know it is more work for you
but otherwise it is much more work for me.

I see in your patch that "lars" was using CVS to commit patches in
2004-2005 (last lines of OCFPCSC1.cpp). Where did you get your version
from?

Regards,


Index: OCFPCSC1.cpp
===================================================================
--- OCFPCSC1.cpp        (revision 1656)
+++ OCFPCSC1.cpp        (arbetskopia)
@@ -71,7 +71,7 @@
  * Method:    SCardEstablishContext
  * Signature: (I)I
  */
-JNIEXPORT jint JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardEstablishContext
+JNIEXPORT jlong JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardEstablishContext
   (JNIEnv *env, jobject obj, jint scope) {
 
   CONTEXT_INFO cInfo;
@@ -92,7 +92,7 @@
    */
   addContext(cInfo);
 
-  return (jint)cInfo.context;
+  return cInfo.context;
 }
 
 
@@ -102,11 +102,11 @@
  * Signature: (I)V
  */
 JNIEXPORT void JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardReleaseContext
-  (JNIEnv *env, jobject obj, jint context) {
+  (JNIEnv *env, jobject obj, jlong context) {
 
   long returnCode;
 
-  if (isContextAvailable((long)context) < 0) {
+  if (isContextAvailable(context) < 0) {
          throwPcscException(env, obj, "SCardReleaseContext", "tried to release 
a non-existing context",0);
        return;
   }
@@ -114,7 +114,7 @@
   /* delete the context from the internal table */
   removeContext(context);
 
-  returnCode = SCardReleaseContext((SCARDCONTEXT)context);
+  returnCode = SCardReleaseContext(context);
   if (returnCode != SCARD_S_SUCCESS) {
        throwPcscException(env, obj, "SCardReleaseContext", "PC/SC Error 
SCardReleaseContext", returnCode);
          return;
@@ -128,25 +128,25 @@
  * Method:    SCardConnect
  * Signature: (ILjava/lang/String;IILjava/lang/Integer;)I
  */
-JNIEXPORT jint JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardConnect
-  (JNIEnv *env, jobject obj, jint context, jstring jReader,
+JNIEXPORT jlong JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardConnect
+  (JNIEnv *env, jobject obj, jlong context, jstring jReader,
    jint jShareMode, jint jPreferredProtocol, jobject jActiveProtocol) {
 
   const char   *readerUTF;
   long        cardHandle;
   DWORD        activeProtocol;
-  int                 cPos;
+  int         cPos;
   long        returnCode;
   CONTEXT_INFO cInfo;
 
   /* check if context exists */
-  if (cPos = isContextAvailable((long)context) < 0) {
+  if ((cPos = isContextAvailable(context)) < 0) {
     throwPcscException(env, obj, "SCardConnect", "PC/SC Wrapper Error: context 
not in table", 0);
     return 0;
   }
 
   // get contextInformationRecord
-  cInfo = getContextInfoViaContext((SCARDCONTEXT)context);
+  cInfo = getContextInfoViaContext(context);
   if (cInfo.context == 0) {
     throwPcscException(env, obj, "SCardConnect", "PC/SC Wrapper Error: 
couldn't get context information record", 0);
     return 0;
@@ -156,12 +156,12 @@
   readerUTF = env->GetStringUTFChars(jReader, NULL);
 
   /* get a connection to the card */
-  returnCode = SCardConnect(  (SCARDCONTEXT)context,
-                                               readerUTF,
-                                                     (DWORD)jShareMode,
-                                                     (DWORD)jPreferredProtocol,
-                                                     
(LPSCARDHANDLE)&cardHandle,
-                                                     (DWORD *)&activeProtocol);
+  returnCode = SCardConnect(context,
+                            readerUTF,
+                           (DWORD)jShareMode,
+                           (DWORD)jPreferredProtocol,
+                           (LPSCARDHANDLE)&cardHandle,
+                           (DWORD *)&activeProtocol);
 
   /* release the readers friendly name */
   env->ReleaseStringUTFChars(jReader, readerUTF);
@@ -191,7 +191,7 @@
  * Signature: (IIIILjava/lang/Integer;)V
  */
 JNIEXPORT void JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardReconnect
-  (JNIEnv *env, jobject obj, jint card, jint shareMode,
+  (JNIEnv *env, jobject obj, jlong card, jint shareMode,
    jint preferredProtocols, jint initialization, jobject jActiveProtocoll) {
 
   long         returnCode;
@@ -199,7 +199,7 @@
   CONTEXT_INFO  cInfo;
 
   // get the existing context informations
-  cInfo = getContextInfoViaCardHandle((SCARDHANDLE)card);
+  cInfo = getContextInfoViaCardHandle(card);
   if (cInfo.context == 0) {
     throwPcscException(env, obj, "SCardReconnect", "PC/SC Wrapper Error: 
couldn't get context information record", 0);
     return;
@@ -237,19 +237,19 @@
  * Signature: (II)V
  */
 JNIEXPORT void JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardDisconnect
-  (JNIEnv *env, jobject obj, jint card, jint disposition) {
+  (JNIEnv *env, jobject obj, jlong card, jint disposition) {
 
   long          returnCode;
   CONTEXT_INFO  cInfo;
 
   // get the contextInfo from the table
-  cInfo = getContextInfoViaCardHandle((SCARDHANDLE)card);
+  cInfo = getContextInfoViaCardHandle(card);
   if (cInfo.context == 0) {
     throwPcscException(env, obj, "SCardDisconnect", "PC/SC Wrapper Error: 
couldn't get context information record", 0);
     return;
   }
 
-  returnCode = SCardDisconnect((SCARDHANDLE)card, (DWORD)disposition);
+  returnCode = SCardDisconnect(card, (DWORD)disposition);
   if ((returnCode != SCARD_S_SUCCESS) && (returnCode != SCARD_W_REMOVED_CARD)) 
{
     throwPcscException(env, obj, "SCardDisconnect", "PC/SC Error 
SCardDisconnect", returnCode);
     return;
@@ -274,7 +274,7 @@
  * Signature: (II[Lcom/ibm/opencard/terminal/pcsc10/PcscReaderState;)V
  */
 JNIEXPORT void JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardGetStatusChange
-  (JNIEnv *env, jobject obj, jint context, jint timeout, jobjectArray 
jReaderState) {
+  (JNIEnv *env, jobject obj, jlong context, jint timeout, jobjectArray 
jReaderState) {
 
   SCARD_READERSTATE   *readerState;
   int         numReaderState;
@@ -343,7 +343,7 @@
 
   /* set the response timeout to 1000ms */
 
-  returnCode =  SCardGetStatusChange((SCARDCONTEXT)context, 1000, readerState, 
numReaderState);
+  returnCode =  SCardGetStatusChange(context, 1000, readerState, 
numReaderState);
   if (returnCode != SCARD_S_SUCCESS) {
     free(readerState);
     throwPcscException(env, obj, "SCardGetStatusChange", "error executing 
SCardGetStatusChange", returnCode);
@@ -419,7 +419,7 @@
  * Signature: (II)[B
  */
 JNIEXPORT jbyteArray JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardGetAttrib
-  (JNIEnv *env, jobject obj, jint card, jint attrId) {
+  (JNIEnv *env, jobject obj, jlong card, jint attrId) {
 
   long returnCode;
   DWORD       lenAttr;
@@ -465,7 +465,7 @@
  * Signature: (II[B)[B
  */
 JNIEXPORT jbyteArray JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardControl
-  (JNIEnv *env, jobject obj, jint jCardHandle, jint jControlCode, jbyteArray 
jInBuffer) {
+  (JNIEnv *env, jobject obj, jlong jCardHandle, jint jControlCode, jbyteArray 
jInBuffer) {
 
   LONG    returnCode;
   DWORD   lenInBuffer;
@@ -584,7 +584,7 @@
   int ii;
   int jj;
   int numNames;
-  for (ii=0, numNames=0; ii<lenReaderList; ) {
+  for (ii=0, numNames=0; ii<(signed)lenReaderList; ) {
     numNames++;
     ii += strlen(&readerList[ii])+1;
     if (strlen(&readerList[ii]) == 0) 
@@ -641,7 +641,7 @@
  * Signature: (I[B)[B
  */
 JNIEXPORT jbyteArray JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardTransmit
-  (JNIEnv *env, jobject obj, jint jCard, jbyteArray jSendBuf) {
+  (JNIEnv *env, jobject obj, jlong jCard, jbyteArray jSendBuf) {
 
   SCARD_IO_REQUEST    sendPci;
   SCARD_IO_REQUEST    recvPci;
@@ -658,7 +658,7 @@
   CONTEXT_INFO        cInfo;
 
   // get the contextInfo from the table (checks the active protocol of the 
card connection)
-  cInfo = getContextInfoViaCardHandle((SCARDHANDLE)jCard);
+  cInfo = getContextInfoViaCardHandle(jCard);
   if (cInfo.context == 0) {
     throwPcscException(env, obj, "SCardTransmit", "PC/SC Wrapper Error: 
couldn't get context information record", 0);
     return NULL;
@@ -705,9 +705,9 @@
   lenRecvBuf = sizeof(tmpRecvBuf);
 
   /* transmit the data */
-  returnCode = SCardTransmit((SCARDHANDLE)jCard,
-                                              
(LPSCARD_IO_REQUEST)&sendPci,(LPCBYTE)ptrSendBuf, lenSendBuf,
-                                          
(LPSCARD_IO_REQUEST)&recvPci,(LPBYTE)tmpRecvBuf,&lenRecvBuf);
+  returnCode = SCardTransmit(jCard,
+                            (LPSCARD_IO_REQUEST)&sendPci,(LPCBYTE)ptrSendBuf, 
lenSendBuf,
+                             
(LPSCARD_IO_REQUEST)&recvPci,(LPBYTE)tmpRecvBuf,&lenRecvBuf);
 
   if (returnCode != SCARD_S_SUCCESS) {
     throwPcscException(env, obj, "SCardTransmit", "error occurred with 
SCardTransmit", returnCode);
Index: OCFPCSC1.h
===================================================================
--- OCFPCSC1.h  (revision 1656)
+++ OCFPCSC1.h  (arbetskopia)
@@ -28,7 +28,7 @@
  * Method:    SCardEstablishContext
  * Signature: (I)I
  */
-JNIEXPORT jint JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardEstablishContext
+JNIEXPORT jlong JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardEstablishContext
   (JNIEnv *, jobject, jint);
 
 /*
@@ -37,15 +37,15 @@
  * Signature: (I)V
  */
 JNIEXPORT void JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardReleaseContext
-  (JNIEnv *, jobject, jint);
+  (JNIEnv *, jobject, jlong);
 
 /*
  * Class:     com_ibm_opencard_terminal_pcsc10_OCFPCSC1
  * Method:    SCardConnect
  * Signature: (ILjava/lang/String;IILjava/lang/Integer;)I
  */
-JNIEXPORT jint JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardConnect
-  (JNIEnv *, jobject, jint, jstring, jint, jint, jobject);
+JNIEXPORT jlong JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardConnect
+  (JNIEnv *, jobject, jlong, jstring, jint, jint, jobject);
 
 /*
  * Class:     com_ibm_opencard_terminal_pcsc10_OCFPCSC1
@@ -53,7 +53,7 @@
  * Signature: (IIIILjava/lang/Integer;)V
  */
 JNIEXPORT void JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardReconnect
-  (JNIEnv *, jobject, jint, jint, jint, jint, jobject);
+  (JNIEnv *, jobject, jlong, jint, jint, jint, jobject);
 
 /*
  * Class:     com_ibm_opencard_terminal_pcsc10_OCFPCSC1
@@ -61,7 +61,7 @@
  * Signature: (II)V
  */
 JNIEXPORT void JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardDisconnect
-  (JNIEnv *, jobject, jint, jint);
+  (JNIEnv *, jobject, jlong, jint);
 
 /*
  * Class:     com_ibm_opencard_terminal_pcsc10_OCFPCSC1
@@ -69,7 +69,7 @@
  * Signature: (II[Lcom/ibm/opencard/terminal/pcsc10/PcscReaderState;)V
  */
 JNIEXPORT void JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardGetStatusChange
-  (JNIEnv *, jobject, jint, jint, jobjectArray);
+  (JNIEnv *, jobject, jlong, jint, jobjectArray);
 
 /*
  * Class:     com_ibm_opencard_terminal_pcsc10_OCFPCSC1
@@ -77,7 +77,7 @@
  * Signature: (II)[B
  */
 JNIEXPORT jbyteArray JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardGetAttrib
-  (JNIEnv *, jobject, jint, jint);
+  (JNIEnv *, jobject, jlong, jint);
 
 /*
  * Class:     com_ibm_opencard_terminal_pcsc10_OCFPCSC1
@@ -85,7 +85,7 @@
  * Signature: (II[B)[B
  */
 JNIEXPORT jbyteArray JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardControl
-  (JNIEnv *, jobject, jint, jint, jbyteArray);
+  (JNIEnv *, jobject, jlong, jint, jbyteArray);
 
 /*
  * Class:     com_ibm_opencard_terminal_pcsc10_OCFPCSC1
@@ -93,7 +93,7 @@
  * Signature: (I[B)[B
  */
 JNIEXPORT jbyteArray JNICALL 
Java_com_ibm_opencard_terminal_pcsc10_OCFPCSC1_SCardTransmit
-  (JNIEnv *, jobject, jint, jbyteArray);
+  (JNIEnv *, jobject, jlong, jbyteArray);
 
 #ifdef __cplusplus
 }
Index: PcscExceptions.cpp
===================================================================
--- PcscExceptions.cpp  (revision 1656)
+++ PcscExceptions.cpp  (arbetskopia)
@@ -77,7 +77,7 @@
     /* allocate enough bufferspace for the complete exception message */
     completeMsg = (char *)malloc(strlen(method) + strlen(msg) + 50);
     sprintf(completeMsg, "PCSC Exception in method %s: %s\n" \
-           "return code = %8.8x\n", method, msg,returnCode);
+           "return code = %8.8x\n", method, msg,(signed)returnCode);
 
     if ((exceptionMsg = env->NewStringUTF(completeMsg)) == NULL) {
        free(completeMsg);
Index: Makefile
===================================================================
--- Makefile    (revision 1656)
+++ Makefile    (arbetskopia)
@@ -1,12 +1,12 @@
 CC        = c++
 LD        = ld 
 OBJS     := $(patsubst %.cpp,%.o,$(wildcard *.cpp))
-JDK_HOME  = /System/Library/Frameworks/JavaVM.framework
-PCSC_HDRS = -I/usr/local/pcsc/include
-PCSC_LIBS = -L/usr/local/pcsc/lib -lpcsclite
-INCLUDE   = -I$(JDK_HOME)/Headers -I$(JDK_HOME)/include/genunix $(PCSC_HDRS)
-LIBNAME   = libOCFPCSC1.jnilib
-PREFIX   = /usr/local/pcsc
+JDK_HOME  = /usr/local/java
+PCSC_HDRS = -I/usr/include/PCSC
+PCSC_LIBS = -L/usr/lib -lpcsclite
+INCLUDE   = -I$(JDK_HOME)/include -I$(JDK_HOME)/include/linux $(PCSC_HDRS)
+LIBNAME   = libOCFPCSC1.so
+CPPFLAGS  = -fPIC -Wall -DHAVE_PTHREAD_H -DCK_GENERIC
 
 all: $(LIBNAME)
 
@@ -17,7 +17,7 @@
        cp -f *.so /usr/local/pcsc/lib
 
 $(LIBNAME): $(OBJS)
-       cc $(OBJS) $(PCSC_LIBS) -dynamiclib -install_name 
$(PREFIX)/lib/$(LIBNAME)  -o $@
+       $(CC) $(OBJS) $(PCSC_LIBS) -shared -o $@
 
 $(patsubst %.cpp,%.o,$(wildcard *.cpp)) : %.o : %.cpp
-       $(CC) $(CFLAGS) -c $< $(INCLUDE) $(DEFS)
+       $(CC) $(CPPFLAGS) $(CFLAGS) -c $< $(INCLUDE) $(DEFS)
_______________________________________________
Muscle mailing list
[email protected]
http://lists.drizzle.com/mailman/listinfo/muscle

Reply via email to