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