diff options
author | Mark Wielaard <mark@klomp.org> | 2004-04-21 07:19:24 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2004-04-21 07:19:24 +0000 |
commit | 60e957d071f9ff4e41cf93088aaf18fcbe2dfa92 (patch) | |
tree | e228a00130bdada5c95b26a492fd1fd589a45850 /libjava/jni | |
parent | 27dd18cf734dfdd6aba03fab66044a9aa911054a (diff) | |
download | gcc-60e957d071f9ff4e41cf93088aaf18fcbe2dfa92.zip gcc-60e957d071f9ff4e41cf93088aaf18fcbe2dfa92.tar.gz gcc-60e957d071f9ff4e41cf93088aaf18fcbe2dfa92.tar.bz2 |
gthread-jni.c (maybe_rethrow): Explicitly malloc and free buf.
2004-04-21 Mark Wielaard <mark@klomp.org>
* native/jni/gtk-peer/gthread-jni.c (maybe_rethrow): Explicitly
malloc and free buf.
From-SVN: r80948
Diffstat (limited to 'libjava/jni')
-rw-r--r-- | libjava/jni/gtk-peer/gthread-jni.c | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/libjava/jni/gtk-peer/gthread-jni.c b/libjava/jni/gtk-peer/gthread-jni.c index cd37fe1..b21a80c 100644 --- a/libjava/jni/gtk-peer/gthread-jni.c +++ b/libjava/jni/gtk-peer/gthread-jni.c @@ -91,28 +91,40 @@ JavaVM *gdk_vm; 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; - - /* 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); + int len; + char *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, "<init>", "(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); - } + /* create RuntimeException wrapper object */ + obj_class = (*gdk_env)->FindClass (gdk_env, + "java/lang/RuntimeException"); + ctor = (*gdk_env)->GetMethodID(gdk_env, obj_class, "<init>", + "(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); + } } /* This macro is used to include a source location in the exception message */ |