re PR libgcj/8142 ('$' in class names vs. dlopen 'dynamic string tokens')
authorMark Wielaard <mark@klomp.org>
Fri, 11 Oct 2002 22:10:37 +0000 (22:10 +0000)
committerMark Wielaard <mark@gcc.gnu.org>
Fri, 11 Oct 2002 22:10:37 +0000 (22:10 +0000)
Fix for PR libgcj/8142
* java/lang/natClassLoader.cc (findClass): Skip inner classes when
loading native modules.

From-SVN: r58066

libjava/ChangeLog
libjava/java/lang/natClassLoader.cc

index 51a8a414bc2c971886ad7748956ec327e929be66..eaba74a43dd2b4e3d23648d3d43da721892f3fb2 100644 (file)
@@ -1,3 +1,9 @@
+2002-10-11  Mark Wielaard  <mark@klomp.org>
+
+       Fix for PR libgcj/8142
+       * java/lang/natClassLoader.cc (findClass): Skip inner classes when
+       loading native modules.
+
 2002-10-10  Michael Koch  <konqueror@gmx.de>
 
        * javax/swing/AbstractListModel.java
index c229943ecc5feded01579c758e31e154868a37d2..8bff16997b9906a0f900b47533a7d1e231aa7972 100644 (file)
@@ -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)