Patch: JNI -vs- signatures
Tom Tromey
tromey@redhat.com
Fri Jan 26 14:57:00 GMT 2001
JNI defines type signatures to use `/' as name separators in class
names. However, jni.cc was assuming `.' was used.
This patch fixes the problem.
I'm checking this in because (1) the risk is very low, and (2) without
this patch JNI is substantially less useful.
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.
Tom
Index: jni.cc
===================================================================
RCS file: /cvs/gcc/egcs/libjava/jni.cc,v
retrieving revision 1.34
diff -u -r1.34 jni.cc
--- jni.cc 2000/11/01 00:18:03 1.34
+++ jni.cc 2001/01/26 22:42:31
@@ -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,8 +593,14 @@
_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());
using namespace java::lang::reflect;
@@ -1053,14 +1059,12 @@
_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?
More information about the Java-patches
mailing list