Something is wrong with JNI's jlong in JDK7

Scott Palmer swpalmer at gmail.com
Tue Nov 13 14:00:02 PST 2012


On 2012-11-13, at 4:36 PM, Mike Swingler <swingler at apple.com> wrote:

> On Nov 13, 2012, at 8:21 AM, Scott Palmer <swpalmer at gmail.com> wrote:
> 
>> 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_ */
> 
> Have you filed a bug at <http://bugs.sun.com>?

Just…  I filed it against "javah" since there was no more appropriate category available.


Scott



More information about the macosx-port-dev mailing list