From 9dac635528219ffe0b7a7aef4d355947edd6c48c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 11 Oct 2002 22:10:37 +0000 Subject: [PATCH] re PR libgcj/8142 ('$' in class names vs. dlopen 'dynamic string tokens') Fix for PR libgcj/8142 * java/lang/natClassLoader.cc (findClass): Skip inner classes when loading native modules. From-SVN: r58066 --- libjava/ChangeLog | 6 ++++++ libjava/java/lang/natClassLoader.cc | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 51a8a414bc2..eaba74a43dd 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,9 @@ +2002-10-11 Mark Wielaard + + Fix for PR libgcj/8142 + * java/lang/natClassLoader.cc (findClass): Skip inner classes when + loading native modules. + 2002-10-10 Michael Koch * javax/swing/AbstractListModel.java diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc index c229943ecc5..8bff16997b9 100644 --- a/libjava/java/lang/natClassLoader.cc +++ b/libjava/java/lang/natClassLoader.cc @@ -204,7 +204,14 @@ gnu::gcj::runtime::VMClassLoader::findClass (jstring name) // by `lib-gnu-pkg.so' and `lib-gnu.so'. If loading one of // these causes the class to appear in the cache, then use it. java::lang::StringBuffer *sb = new java::lang::StringBuffer (JvNewStringLatin1("lib-")); - jstring so_base_name = (sb->append (name)->toString ())->replace ('.', '-'); + // Skip inner classes + jstring cn; + jint ci = name->indexOf('$'); + if (ci == -1) + cn = name; + else + cn = name->substring (0, ci); + jstring so_base_name = (sb->append (cn)->toString ())->replace ('.', '-'); // Compare against `3' because that is the length of "lib". while (! klass && so_base_name && so_base_name->length() > 3) -- 2.30.2