Index: configure.ac =================================================================== RCS file: /cvsroot/classpath/classpath/configure.ac,v retrieving revision 1.15 diff -u -r1.15 configure.ac --- configure.ac 9 Apr 2004 14:04:48 -0000 1.15 +++ configure.ac 9 Apr 2004 17:32:24 -0000 @@ -125,7 +125,7 @@ if test "x${GCC}" = xyes; then dnl We want ISO C90 pedantic ansi, but with longlong (jlong) support dnl and modern POSIX and BSD C library funtions/prototypes. - AM_CFLAGS='-ansi -std=c89 -pedantic -Wall -Wno-long-long -D_POSIX_SOURCE -D_BSD_SOURCE' + AM_CFLAGS='-ansi -std=c89 -pedantic -Wall -Wno-long-long -D_BSD_SOURCE' fi AC_SUBST(AM_CFLAGS) Index: native/jni/gtk-peer/gthread-jni.c =================================================================== RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gthread-jni.c,v retrieving revision 1.9 diff -u -r1.9 gthread-jni.c --- native/jni/gtk-peer/gthread-jni.c 7 Apr 2004 20:28:54 -0000 1.9 +++ native/jni/gtk-peer/gthread-jni.c 9 Apr 2004 17:32:24 -0000 @@ -91,28 +91,40 @@ static void maybe_rethrow(JNIEnv *gdk_env, char *message, char *file, int line) { jthrowable cause; - /* rethrow if an exception happened */ - if ((cause = (*gdk_env)->ExceptionOccurred(gdk_env)) != NULL) { jstring jmessage; - jclass obj_class; + jclass obj_class; jobject obj; jmethodID ctor; + int len; + char *buf; - /* allocate local message in Java */ - int len = strlen(message) + strlen(file) + 25; - char buf[ len ]; - bzero(buf, len); - sprintf(buf, "%s (at %s:%d)", message, file, line); - jmessage = (*gdk_env)->NewStringUTF(gdk_env, buf); + /* rethrow if an exception happened */ + if ((cause = (*gdk_env)->ExceptionOccurred(gdk_env)) != NULL) + { + + /* allocate local message in Java */ + len = strlen(message) + strlen(file) + 25; + buf = (char *) malloc(len); + if (buf != NULL) + { + bzero(buf, len); + sprintf(buf, "%s (at %s:%d)", message, file, line); + jmessage = (*gdk_env)->NewStringUTF(gdk_env, buf); + free(buf); + } + else + jmessage = NULL; - /* create RuntimeException wrapper object */ - obj_class = (*gdk_env)->FindClass (gdk_env, "java/lang/RuntimeException"); - ctor = (*gdk_env)->GetMethodID(gdk_env, obj_class, "", "(Ljava/langString;Ljava/lang/Throwable)V"); - obj = (*gdk_env)->NewObject (gdk_env, obj_class, ctor, jmessage, cause); + /* create RuntimeException wrapper object */ + obj_class = (*gdk_env)->FindClass (gdk_env, + "java/lang/RuntimeException"); + ctor = (*gdk_env)->GetMethodID(gdk_env, obj_class, "", + "(Ljava/langString;Ljava/lang/Throwable)V"); + obj = (*gdk_env)->NewObject (gdk_env, obj_class, ctor, jmessage, cause); - /* throw it */ - (*gdk_env)->Throw(gdk_env, (jthrowable)obj); - } + /* throw it */ + (*gdk_env)->Throw(gdk_env, (jthrowable)obj); + } } /* This macro is used to include a source location in the exception message */ 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.2 diff -u -r1.2 gnu_java_nio_channels_FileChannelImpl.c --- native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 9 Apr 2004 14:04:50 -0000 1.2 +++ native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c 9 Apr 2004 17:32:25 -0000 @@ -90,21 +90,27 @@ #define CONVERT_SSIZE_T_TO_JINT(x) ((jint)(x & 0xFFFFFFFF)) #define CONVERT_JINT_TO_SSIZE_T(x) (x) -#define GET_NATIVE_FD(native_fd) \ - jclass clazz_fc = (*env)->FindClass (env, "gnu/java/nio/channels/FileChannelImpl"); \ - if (!clazz_fc) \ - { \ - JCL_ThrowException(env, IO_EXCEPTION, "Internal error"); \ - native_fd = -1; \ - } \ - jfieldID field_fd = (*env)->GetFieldID (env, clazz_fc, "fd", "I"); \ - if (!field_fd) \ - { \ - JCL_ThrowException(env, IO_EXCEPTION, "Internal error"); \ - native_fd = -1; \ - } \ - \ - native_fd = (*env)->GetIntField (env, obj, field_fd); +static jint get_native_fd(JNIEnv *env, jobject obj) +{ + jclass clazz_fc; + jfieldID field_fd; + + clazz_fc = (*env)->FindClass (env, "gnu/java/nio/channels/FileChannelImpl"); + if (!clazz_fc) + { + JCL_ThrowException(env, IO_EXCEPTION, "Internal error"); + return -1; + } + + field_fd = (*env)->GetFieldID (env, clazz_fc, "fd", "I"); + if (!field_fd) + { + JCL_ThrowException(env, IO_EXCEPTION, "Internal error"); + return -1; + } + + return (*env)->GetIntField (env, obj, field_fd); +} /* * Library initialization routine. Called as part of java.io.FileDescriptor @@ -222,7 +228,7 @@ int native_fd; int result; - GET_NATIVE_FD(native_fd); + native_fd = get_native_fd(env, obj); TARGET_NATIVE_FILE_CLOSE(native_fd,result); if (result != TARGET_NATIVE_OK) @@ -243,7 +249,7 @@ jlong bytes_available; int result; - GET_NATIVE_FD(native_fd); + native_fd = get_native_fd(env, obj); TARGET_NATIVE_FILE_AVAILABLE(native_fd,bytes_available,result); if (result != TARGET_NATIVE_OK) @@ -275,7 +281,7 @@ jlong file_size; int result; - GET_NATIVE_FD(native_fd); + native_fd = get_native_fd(env, obj); TARGET_NATIVE_FILE_SIZE(native_fd, file_size, result); if (result != TARGET_NATIVE_OK) @@ -299,7 +305,7 @@ jlong current_offset; int result; - GET_NATIVE_FD(native_fd); + native_fd = get_native_fd(env, obj); TARGET_NATIVE_FILE_TELL(native_fd, current_offset, result); if (result != TARGET_NATIVE_OK) @@ -323,7 +329,7 @@ jlong new_offset; int result; - GET_NATIVE_FD(native_fd); + native_fd = get_native_fd(env, obj); #if 0 /* Should there be such an exception? All native layer macros should @@ -370,7 +376,7 @@ char data; int result; - GET_NATIVE_FD(native_fd); + native_fd = get_native_fd(env, obj); #if 0 /* Should there be such an exception? All native layer macros should @@ -488,7 +494,7 @@ ssize_t bytes_read; int result; - GET_NATIVE_FD(native_fd); + native_fd = get_native_fd(env, obj); bytes_read = 0; do @@ -524,7 +530,7 @@ ssize_t n; int result; - GET_NATIVE_FD(native_fd); + native_fd = get_native_fd(env, obj); bufptr = (*env)->GetByteArrayElements(env, buffer, 0); if (!bufptr) @@ -572,7 +578,7 @@ ssize_t bytes_written; int result; - GET_NATIVE_FD(native_fd); + native_fd = get_native_fd(env, obj); native_data = (char)(CONVERT_JINT_TO_INT(b) & 0xFF); do @@ -601,7 +607,7 @@ ssize_t n; int result; - GET_NATIVE_FD(native_fd); + native_fd = get_native_fd(env, obj); bufptr = (*env)->GetByteArrayElements(env, buffer, 0); if (!bufptr) Index: native/target/generic/target_generic_misc.h =================================================================== RCS file: /cvsroot/classpath/classpath/native/target/generic/target_generic_misc.h,v retrieving revision 1.9 diff -u -r1.9 target_generic_misc.h --- native/target/generic/target_generic_misc.h 29 Mar 2004 07:07:40 -0000 1.9 +++ native/target/generic/target_generic_misc.h 9 Apr 2004 17:32:25 -0000 @@ -68,38 +68,6 @@ /****************************** Macros *********************************/ /***********************************************************************\ -* Name : TARGET_NATIVE_MISC_FORMAT_STRING -* Purpose : format a string with arguments -* Input : buffer - buffer for string -* bufferSize - size of buffer -* format - format string (like printf) -* args - optional arguments (GNU CPP only!) -* Output : - -* Return : - -* Side-effect: unknown -* Notes : - this macro can only be used with a GNU gcc (CPP) -* - this is a "safe" macro to format string; buffer- -* overflows will be avoided. Direct usage of e. g. -* snprintf() is not permitted because it is not ANSI C -* (not portable!) -* - do not use this routine in a function without -* variable number of arguments (ellipses), because -* va_list/va_start/va_end is used! -\***********************************************************************/ - -#ifndef TARGET_NATIVE_MISC_FORMAT_STRING - #ifdef __GNUC__ - #include - #define TARGET_NATIVE_MISC_FORMAT_STRING(buffer,bufferSize,format,args...) \ - do { \ - snprintf(buffer,bufferSize,format, ## args); \ - } while (0) - #else - #error TARGET_NATIVE_MISC_FORMAT_STRING with variable number of arguments is only supported by GNU gcc! Use TARGET_NATIVE_FORMAT_STRING instead. - #endif -#endif - -/***********************************************************************\ * Name : TARGET_NATIVE_MISC_FORMAT_STRING * Purpose : format a string (with a fixed number of) arguments * Input : buffer - buffer for string