Something is wrong with JNI's jlong in JDK7

Scott Palmer swpalmer at gmail.com
Tue Nov 13 08:21:32 PST 2012


I just noticed that the criteria for defining jlong has changed from that given in Apple's JDK 6 vs. Oracle's JDK 7.  This caused some code of mine to break because it seems to be wrong under some circumstances.

JDK 7u10 has this.  Note that sometimes a jlong is a C "long" and sometimes it is a C "long long": 

#ifndef _JAVASOFT_JNI_MD_H_
#define _JAVASOFT_JNI_MD_H_

#define JNIEXPORT
#define JNIIMPORT
#define JNICALL

typedef int jint;
#ifdef _LP64 /* 64-bit Solaris */
typedef long jlong;
#else
typedef long long jlong;
#endif

typedef signed char jbyte;

#endif /* !_JAVASOFT_JNI_MD_H_ */



Whereas Apple's JDK 6 always uses "long long":



#ifndef _JAVASOFT_JNI_MD_H_
#define _JAVASOFT_JNI_MD_H_

#define JNIEXPORT __attribute__((visibility("default")))
#define JNIIMPORT
#define JNICALL

#if defined(__LP64__) && __LP64__ /* for -Wundef */
typedef int jint;
#else
typedef long jint;
#endif
typedef long long jlong;
typedef signed char jbyte;

#endif /* !_JAVASOFT_JNI_MD_H_ */



More information about the macosx-port-dev mailing list