Index: native/jni/classpath/jcl.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jcl.c,v retrieving revision 1.13 diff -u -r1.13 jcl.c --- native/jni/classpath/jcl.c 25 Jul 2005 17:20:52 -0000 1.13 +++ native/jni/classpath/jcl.c 2 Aug 2005 09:00:42 -0000 @@ -195,15 +195,62 @@ { #ifdef POINTERS_ARE_64BIT rawDataClass = (*env)->FindClass (env, "gnu/classpath/RawData64"); + if (rawDataClass == NULL) + { + JCL_ThrowException (env, "java/lang/InternalError", + "unable to find internal class"); + return NULL; + } + rawData_mid = (*env)->GetMethodID (env, rawDataClass, "", "(J)V"); + if (rawData_mid == NULL) + { + JCL_ThrowException (env, "java/lang/InternalError", + "unable to find internal constructor"); + return NULL; + } + rawData_fid = (*env)->GetFieldID (env, rawDataClass, "data", "J"); + if (rawData_fid == NULL) + { + JCL_ThrowException (env, "java/lang/InternalError", + "unable to find internal field"); + return NULL; + } #else rawDataClass = (*env)->FindClass (env, "gnu/classpath/RawData32"); + if (rawDataClass == NULL) + { + JCL_ThrowException (env, "java/lang/InternalError", + "unable to find internal class"); + return NULL; + } + rawData_mid = (*env)->GetMethodID (env, rawDataClass, "", "(I)V"); + if (rawData_mid == NULL) + { + JCL_ThrowException (env, "java/lang/InternalError", + "unable to find internal constructor"); + return NULL; + } + rawData_fid = (*env)->GetFieldID (env, rawDataClass, "data", "I"); + if (rawData_fid == NULL) + { + JCL_ThrowException (env, "java/lang/InternalError", + "unable to find internal field"); + return NULL; + } + #endif (*env)->DeleteLocalRef(env, rawDataClass); rawDataClass = (*env)->NewGlobalRef (env, rawDataClass); + if (rawDataClass = NULL) + { + JCL_ThrowException (env, "java/lang/InternalError", + "unable to create an internal global ref"); + return NULL; + } } #ifdef POINTERS_ARE_64BIT Index: native/jni/classpath/jcl.h =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jcl.h,v retrieving revision 1.12 diff -u -r1.12 jcl.h --- native/jni/classpath/jcl.h 25 Jul 2005 17:20:52 -0000 1.12 +++ native/jni/classpath/jcl.h 2 Aug 2005 09:00:42 -0000 @@ -42,6 +42,14 @@ #include #include +#if SIZEOF_VOID_P == 4 +typedef jint jpointer; +#elif SIZEOF_VOID_P == 8 +typedef jlong jpointer; +#else +#error "Unknown pointer size" +#endif + JNIEXPORT jclass JNICALL JCL_FindClass (JNIEnv * env, const char *className); JNIEXPORT void JNICALL JCL_ThrowException (JNIEnv * env, const char *className, Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c,v retrieving revision 1.8 diff -u -r1.8 gnu_java_awt_peer_gtk_GtkImage.c --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c 26 Jul 2005 20:25:13 -0000 1.8 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c 2 Aug 2005 09:00:42 -0000 @@ -582,15 +582,7 @@ "Lgnu/classpath/RawData;"); g_assert (data_fid != 0); -#if SIZEOF_VOID_P == 8 - cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); - method = (*env)->GetMethodID (env, cls, "", "(J)V"); - data = (*env)->NewObject (env, cls, method, (jlong) ptr); -#else - cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); - method = (*env)->GetMethodID (env, cls, "", "(I)V"); - data = (*env)->NewObject (env, cls, method, (jint) ptr); -#endif + data = JCL_NewRawDataObject (env, ptr); (*env)->SetObjectField (env, obj, data_fid, data); } @@ -609,13 +601,5 @@ g_assert (data_fid != 0); data = (*env)->GetObjectField (env, obj, data_fid); -#if SIZEOF_VOID_P == 8 - cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); - field = (*env)->GetFieldID (env, cls, "data", "J"); - return (void *) (*env)->GetLongField (env, data, field); -#else - cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); - field = (*env)->GetFieldID (env, cls, "data", "I"); - return (void *) (*env)->GetIntField (env, data, field); -#endif + return JCL_GetRawData (env, data); } Index: native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c,v retrieving revision 1.24 diff -u -r1.24 gnu_java_nio_channels_FileChannelImpl.c --- native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 31 Jul 2005 16:00:43 -0000 1.24 +++ native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 2 Aug 2005 09:00:42 -0000 @@ -512,9 +512,7 @@ { #ifdef HAVE_MMAP jclass MappedByteBufferImpl_class; - jclass RawData_class; jmethodID MappedByteBufferImpl_init = NULL; - jmethodID RawData_init = NULL; jobject RawData_instance; volatile jobject buffer; long pagesize; @@ -535,26 +533,6 @@ return NULL; #endif /* HAVE_GETPAGESIZE/HAVE_SYSCONF */ -#if (SIZEOF_VOID_P == 4) - RawData_class = (*env)->FindClass (env, "gnu/classpath/RawData32"); - if (RawData_class != NULL) - { - RawData_init = (*env)->GetMethodID (env, RawData_class, - "", "(I)V"); - } -#elif (SIZEOF_VOID_P == 8) - RawData_class = (*env)->FindClass (env, "gnu/classpath/RawData64"); - if (RawData_class != NULL) - { - RawData_init = (*env)->GetMethodID (env, RawData_class, - "", "(J)V"); - } -#else - JCL_ThrowException (env, IO_EXCEPTION, - "pointer size not supported"); - return NULL; -#endif /* SIZEOF_VOID_P */ - if ((*env)->ExceptionOccurred (env)) { return NULL; @@ -583,13 +561,7 @@ down to a multiple of the page size. */ address = (void *) ((char *) p + (position % pagesize)); -#if (SIZEOF_VOID_P == 4) - RawData_instance = (*env)->NewObject (env, RawData_class, - RawData_init, (jint) address); -#elif (SIZEOF_VOID_P == 8) - RawData_instance = (*env)->NewObject (env, RawData_class, - RawData_init, (jlong) address); -#endif /* SIZEOF_VOID_P */ + RawData_instance = JCL_NewRawDataObject(env, address); MappedByteBufferImpl_class = (*env)->FindClass (env, "java/nio/MappedByteBufferImpl"); Index: native/jni/java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c,v retrieving revision 1.4 diff -u -r1.4 gnu_java_nio_charset_iconv_IconvDecoder.c --- native/jni/java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c 2 Jul 2005 20:32:55 -0000 1.4 +++ native/jni/java-nio/gnu_java_nio_charset_iconv_IconvDecoder.c 2 Aug 2005 09:00:42 -0000 @@ -181,15 +181,7 @@ data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/RawData;"); assert (data_fid != 0); -#ifdef POINTERS_ARE_64BIT - cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); - method = (*env)->GetMethodID (env, cls, "", "(J)V"); - data = (*env)->NewObject (env, cls, method, (jlong) ptr); -#else - cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); - method = (*env)->GetMethodID (env, cls, "", "(I)V"); - data = (*env)->NewObject (env, cls, method, (jint) ptr); -#endif + data = JCL_NewRawDataObject(env, ptr); (*env)->SetObjectField (env, obj, data_fid, data); } @@ -207,13 +199,5 @@ assert (data_fid != 0); data = (*env)->GetObjectField (env, obj, data_fid); -#if SIZEOF_VOID_P == 8 - cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); - field = (*env)->GetFieldID (env, cls, "data", "J"); - return (void *) (*env)->GetLongField (env, data, field); -#else - cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); - field = (*env)->GetFieldID (env, cls, "data", "I"); - return (void *) (*env)->GetIntField (env, data, field); -#endif + return JCL_GetRawData(env, data); } Index: native/jni/java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c,v retrieving revision 1.4 diff -u -r1.4 gnu_java_nio_charset_iconv_IconvEncoder.c --- native/jni/java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c 2 Jul 2005 20:32:55 -0000 1.4 +++ native/jni/java-nio/gnu_java_nio_charset_iconv_IconvEncoder.c 2 Aug 2005 09:00:42 -0000 @@ -180,16 +180,8 @@ cls = (*env)->GetObjectClass (env, obj); data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/RawData;"); assert (data_fid != 0); - -#ifdef POINTERS_ARE_64BIT - cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); - method = (*env)->GetMethodID (env, cls, "", "(J)V"); - data = (*env)->NewObject (env, cls, method, (jlong) ptr); -#else - cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); - method = (*env)->GetMethodID (env, cls, "", "(I)V"); - data = (*env)->NewObject (env, cls, method, (jint) ptr); -#endif + + data = JCL_NewRawDataObject (env, ptr); (*env)->SetObjectField (env, obj, data_fid, data); } @@ -207,13 +199,5 @@ assert (data_fid != 0); data = (*env)->GetObjectField (env, obj, data_fid); -#if SIZEOF_VOID_P == 8 - cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); - field = (*env)->GetFieldID (env, cls, "data", "J"); - return (void *) (*env)->GetLongField (env, data, field); -#else - cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); - field = (*env)->GetFieldID (env, cls, "data", "I"); - return (void *) (*env)->GetIntField (env, data, field); -#endif + return JCL_GetRawDataObject(env, data); } Index: native/jni/java-nio/java_nio_MappedByteBufferImpl.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/java-nio/java_nio_MappedByteBufferImpl.c,v retrieving revision 1.8 diff -u -r1.8 java_nio_MappedByteBufferImpl.c --- native/jni/java-nio/java_nio_MappedByteBufferImpl.c 31 Jul 2005 00:59:03 -0000 1.8 +++ native/jni/java-nio/java_nio_MappedByteBufferImpl.c 2 Aug 2005 09:00:42 -0000 @@ -57,8 +57,8 @@ /* FIXME these are defined in gnu_java_nio_channels_FileChannelImpl too; should be someplace common. */ -#define ALIGN_DOWN(p,s) ((p) - ((p) % (s))) -#define ALIGN_UP(p,s) ((p) + ((s) - ((p) % (s)))) +#define ALIGN_DOWN(p,s) ((jpointer)(p) - ((jpointer)(p) % (s))) +#define ALIGN_UP(p,s) ((jpointer)(p) + ((s) - ((jpointer)(p) % (s)))) /** * Returns the memory page size of this platform. @@ -97,7 +97,6 @@ const long pagesize = get_pagesize (); jfieldID MappedByteBufferImpl_address; jfieldID MappedByteBufferImpl_size; - jfieldID RawData_data; jobject MappedByteBufferImpl_address_value = NULL; *address = NULL; @@ -123,22 +122,8 @@ return; } -#if (SIZEOF_VOID_P == 4) - RawData_data = - (*env)->GetFieldID (env, (*env)->GetObjectClass (env, MappedByteBufferImpl_address_value), - "data", "I"); *address = (void *) - ALIGN_DOWN ((*env)->GetIntField (env, MappedByteBufferImpl_address_value, - RawData_data), pagesize); -#elif (SIZEOF_VOID_P == 8) - RawData_data = - (*env)->GetFieldID (env, (*env)->GetObjectClass (env, MappedByteBufferImpl_address_value), - "data", "J"); - *address = (void *) - ALIGN_DOWN ((*env)->GetLongField (env, MappedByteBufferImpl_address_value, - RawData_data), pagesize); -#endif /* SIZEOF_VOID_P */ - + ALIGN_DOWN (JCL_GetRawData (env, MappedByteBufferImpl_address_value), pagesize); *size = (size_t) ALIGN_UP ((*env)->GetIntField (env, this, MappedByteBufferImpl_size), pagesize); Index: native/jni/java-nio/java_nio_VMDirectByteBuffer.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/java-nio/java_nio_VMDirectByteBuffer.c,v retrieving revision 1.8 diff -u -r1.8 java_nio_VMDirectByteBuffer.c --- native/jni/java-nio/java_nio_VMDirectByteBuffer.c 30 Jul 2005 20:40:30 -0000 1.8 +++ native/jni/java-nio/java_nio_VMDirectByteBuffer.c 2 Aug 2005 09:00:42 -0000 @@ -45,104 +45,10 @@ #include "java_nio_VMDirectByteBuffer.h" -static jclass classRawData; -static jmethodID methodRawDataInit; -static jfieldID fieldNativePointer; - -static void *NIOGetPointer (JNIEnv *, jobject); -static jobject NIOGetRawData (JNIEnv *, void *pointer); - -static void * -NIOGetPointer (JNIEnv * env, jobject rawdata) -{ -#if SIZEOF_VOID_P == 4 - return (void *) (*env)->GetIntField (env, rawdata, fieldNativePointer); -#elif SIZEOF_VOID_P == 8 - return (void *) (*env)->GetLongField (env, rawdata, fieldNativePointer); -#else -#error unsupported pointer size -#endif -} - -static jobject -NIOGetRawData (JNIEnv * env, void *pointer) -{ -#if SIZEOF_VOID_P == 4 - return (*env)->NewObject (env, classRawData, methodRawDataInit, - (jint) pointer); -#elif SIZEOF_VOID_P == 8 - return (*env)->NewObject (env, classRawData, methodRawDataInit, - (jlong) pointer); -#else -#error unsupported pointer size -#endif -} - JNIEXPORT void JNICALL Java_java_nio_VMDirectByteBuffer_init (JNIEnv * env, jclass clazz __attribute__ ((__unused__))) { -#if SIZEOF_VOID_P == 4 - classRawData = (*env)->FindClass (env, "gnu/classpath/RawData32"); - if (classRawData == NULL) - { - JCL_ThrowException (env, "java/lang/InternalError", - "unable to find internal class"); - return; - } - - methodRawDataInit = (*env)->GetMethodID (env, classRawData, - "", "(I)V"); - if (methodRawDataInit == NULL) - { - JCL_ThrowException (env, "java/lang/InternalError", - "unable to find internal constructor"); - return; - } - - fieldNativePointer = (*env)->GetFieldID (env, classRawData, "data", "I"); - if (fieldNativePointer == NULL) - { - JCL_ThrowException (env, "java/lang/InternalError", - "unable to find internal field"); - return; - } -#elif SIZEOF_VOID_P == 8 - classRawData = (*env)->FindClass (env, "gnu/classpath/RawData64"); - if (classRawData == NULL) - { - JCL_ThrowException (env, "java/lang/InternalError", - "unable to find internal class"); - return; - } - - methodRawDataInit = (*env)->GetMethodID (env, classRawData, - "", "(J)V"); - if (methodRawDataInit == NULL) - { - JCL_ThrowException (env, "java/lang/InternalError", - "unable to find internal constructor"); - return; - } - - fieldNativePointer = (*env)->GetFieldID (env, classRawData, "data", "J"); - if (fieldNativePointer == NULL) - { - JCL_ThrowException (env, "java/lang/InternalError", - "unable to find internal field"); - return; - } -#else -#error unsupported pointer size -#endif - - /* We need to wrap the jclass in global reference to make it persistent */ - if ((classRawData = (*env)->NewGlobalRef (env, classRawData)) == NULL) - { - JCL_ThrowException (env, "java/lang/InternalError", - "failed to create global reference"); - return; - } } JNIEXPORT jobject JNICALL @@ -160,14 +66,14 @@ return 0; } - return NIOGetRawData (env, buffer); + return JCL_NewRawDataObject (env, buffer); } JNIEXPORT void JNICALL Java_java_nio_VMDirectByteBuffer_free (JNIEnv * env, jclass clazz __attribute__ ((__unused__)), jobject address) { - free (NIOGetPointer (env, address)); + free (JCL_GetRawData (env, address)); } JNIEXPORT jbyte JNICALL @@ -175,7 +81,7 @@ (JNIEnv * env, jclass clazz __attribute__ ((__unused__)), jobject address, jint index) { - return ((jbyte *) NIOGetPointer (env, address))[index]; + return ((jbyte *) JCL_GetRawData (env, address))[index]; } JNIEXPORT void JNICALL @@ -183,7 +89,7 @@ (JNIEnv * env, jclass clazz __attribute__ ((__unused__)), jobject address, jint index, jbyte value) { - jbyte *pointer = (jbyte *) NIOGetPointer (env, address) + index; + jbyte *pointer = (jbyte *) JCL_GetRawData (env, address) + index; *pointer = value; } @@ -192,7 +98,7 @@ (JNIEnv * env, jclass clazz __attribute__ ((__unused__)), jobject address, jint index, jbyteArray dst, jint dst_offset, jint dst_len) { - jbyte *src = (jbyte *) NIOGetPointer (env, address) + index; + jbyte *src = (jbyte *) JCL_GetRawData (env, address) + index; jbyte *_dst = (*env)->GetByteArrayElements (env, dst, NULL) + dst_offset; memcpy (_dst, src, dst_len); (*env)->ReleaseByteArrayElements (env, dst, _dst, 0); @@ -204,7 +110,7 @@ jobject address, jint index, jbyteArray src, jint src_offset, jint src_len) { jbyte *_src = (*env)->GetByteArrayElements (env, src, NULL) + src_offset; - jbyte *dst = (jbyte *) NIOGetPointer (env, address) + index; + jbyte *dst = (jbyte *)JCL_GetRawData (env, address) + index; (*env)->ReleaseByteArrayElements (env, src, _src, 0); memcpy (dst, _src, src_len); } @@ -214,8 +120,8 @@ (JNIEnv * env, jclass clazz __attribute__ ((__unused__)), jobject address, jint dst_offset, jint src_offset, jint count) { - jbyte *dst = (jbyte *) NIOGetPointer (env, address) + dst_offset; - jbyte *src = (jbyte *) NIOGetPointer (env, address) + src_offset; + jbyte *dst = (jbyte *) JCL_GetRawData (env, address) + dst_offset; + jbyte *src = (jbyte *) JCL_GetRawData (env, address) + src_offset; memmove (dst, src, count); } @@ -224,5 +130,5 @@ (JNIEnv * env, jclass clazz __attribute__ ((__unused__)), jobject address, jint offset) { - return NIOGetRawData (env, (jbyte *) NIOGetPointer (env, address) + offset); + return JCL_NewRawDataObject (env, (jbyte *) JCL_GetRawData (env, address) + offset); } Index: native/jni/xmlj/xmlj_util.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/xmlj/xmlj_util.c,v retrieving revision 1.2 diff -u -r1.2 xmlj_util.c --- native/jni/xmlj/xmlj_util.c 2 Jul 2005 20:32:55 -0000 1.2 +++ native/jni/xmlj/xmlj_util.c 2 Aug 2005 09:00:42 -0000 @@ -39,6 +39,7 @@ #include "xmlj_error.h" #include #include +#include /* xmlChar->jstring cache */ #ifdef XMLJ_STRING_CACHE @@ -218,35 +219,13 @@ void * xmljAsPointer (JNIEnv *env, jobject ptr) { - jclass cls; - jfieldID field; - -#if defined XMLJ_64BIT_POINTER - cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); - field = (*env)->GetFieldID (env, cls, "data", "J"); - return (void *) (*env)->GetLongField (env, ptr, field); -#else - cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); - field = (*env)->GetFieldID (env, cls, "data", "I"); - return (void *) (*env)->GetIntField (env, ptr, field); -#endif + return JCL_GetRawData(env, ptr); } jobject xmljAsField (JNIEnv *env, void * ptr) { - jclass cls; - jmethodID method; - -#if defined XMLJ_64BIT_POINTER - cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); - method = (*env)->GetMethodID (env, cls, "", "(J)V"); - return (*env)->NewObject (env, cls, method, (jlong) ptr); -#else - cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); - method = (*env)->GetMethodID (env, cls, "", "(I)V"); - return (*env)->NewObject (env, cls, method, (jint) ptr); -#endif + return JCL_NewRawDataObject(env, ptr); } JNIEnv *