aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2001-01-26 23:00:19 +0000
committerTom Tromey <tromey@gcc.gnu.org>2001-01-26 23:00:19 +0000
commitf86f42a8ffc8ecf366aaa07e0512bebf2af91c9e (patch)
tree72c1eaf28683215ac81bfb6c01e04e7180cce70c
parent45291dd5855ad2c9c38088864c7b047e483d2a61 (diff)
downloadgcc-f86f42a8ffc8ecf366aaa07e0512bebf2af91c9e.zip
gcc-f86f42a8ffc8ecf366aaa07e0512bebf2af91c9e.tar.gz
gcc-f86f42a8ffc8ecf366aaa07e0512bebf2af91c9e.tar.bz2
jni.cc (_Jv_JNI_GetAnyMethodID): Rewrite signature from external to internal representation.
* jni.cc (_Jv_JNI_GetAnyMethodID): Rewrite signature from external to internal representation. (_Jv_JNI_GetAnyFieldID): Likewise. Also, only use _Jv_FindClassFromSignature. From-SVN: r39289
-rw-r--r--libjava/ChangeLog7
-rw-r--r--libjava/jni.cc24
2 files changed, 21 insertions, 10 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 7169f86..55fb358 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,10 @@
+2001-01-26 Tom Tromey <tromey@redhat.com>
+
+ * jni.cc (_Jv_JNI_GetAnyMethodID): Rewrite signature from external
+ to internal representation.
+ (_Jv_JNI_GetAnyFieldID): Likewise. Also, only use
+ _Jv_FindClassFromSignature.
+
2001-01-26 Warren Levy <warrenl@redhat.com>
* java/lang/natSystem.cc (getSystemTimeZone): Only use tm_gmtoff
diff --git a/libjava/jni.cc b/libjava/jni.cc
index 5344542..dcc620b 100644
--- a/libjava/jni.cc
+++ b/libjava/jni.cc
@@ -1,6 +1,6 @@
// jni.cc - JNI implementation, including the jump table.
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
This file is part of libgcj.
@@ -593,7 +593,13 @@ _Jv_JNI_GetAnyMethodID (JNIEnv *env, jclass clazz,
_Jv_InitClass (clazz);
_Jv_Utf8Const *name_u = _Jv_makeUtf8Const ((char *) name, -1);
- _Jv_Utf8Const *sig_u = _Jv_makeUtf8Const ((char *) sig, -1);
+
+ // FIXME: assume that SIG isn't too long.
+ int len = strlen (sig);
+ char s[len + 1];
+ for (int i = 0; i <= len; ++i)
+ s[i] = (sig[i] == '/') ? '.' : sig[i];
+ _Jv_Utf8Const *sig_u = _Jv_makeUtf8Const ((char *) s, -1);
JvAssert (! clazz->isPrimitive());
@@ -1053,14 +1059,12 @@ _Jv_JNI_GetAnyFieldID (JNIEnv *env, jclass clazz,
_Jv_Utf8Const *a_name = _Jv_makeUtf8Const ((char *) name, -1);
- jclass field_class = NULL;
- if (sig[0] == '[')
- field_class = _Jv_FindClassFromSignature ((char *) sig, NULL);
- else
- {
- _Jv_Utf8Const *sig_u = _Jv_makeUtf8Const ((char *) sig, -1);
- field_class = _Jv_FindClass (sig_u, NULL);
- }
+ // FIXME: assume that SIG isn't too long.
+ int len = strlen (sig);
+ char s[len + 1];
+ for (int i = 0; i <= len; ++i)
+ s[i] = (sig[i] == '/') ? '.' : sig[i];
+ jclass field_class = _Jv_FindClassFromSignature ((char *) s, NULL);
// FIXME: what if field_class == NULL?