aboutsummaryrefslogtreecommitdiff
path: root/libjava/jni
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2004-04-21 07:19:24 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2004-04-21 07:19:24 +0000
commit60e957d071f9ff4e41cf93088aaf18fcbe2dfa92 (patch)
treee228a00130bdada5c95b26a492fd1fd589a45850 /libjava/jni
parent27dd18cf734dfdd6aba03fab66044a9aa911054a (diff)
downloadgcc-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.c48
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 */