diff options
author | Tom Tromey <tromey@redhat.com> | 2001-01-26 23:00:19 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2001-01-26 23:00:19 +0000 |
commit | f86f42a8ffc8ecf366aaa07e0512bebf2af91c9e (patch) | |
tree | 72c1eaf28683215ac81bfb6c01e04e7180cce70c | |
parent | 45291dd5855ad2c9c38088864c7b047e483d2a61 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libjava/jni.cc | 24 |
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? |