From 29b881f4d32c3bc9b1eb6ff9fbf786bd6ce49ae7 Mon Sep 17 00:00:00 2001 From: aph Date: Mon, 16 Apr 2007 13:44:59 +0000 Subject: 2007-04-16 Andrew Haley * gnu/gcj/runtime/BootClassLoader.java (getBootURLLoader): New method. (bootGetResource): Use getBootURLLoader() to load resources. (bootGetResources): Likewise. * java/lang/reflect/natMethod.cc (Method::invoke): In invoke also check that the method's declaring class is accessible. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123862 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/gnu/gcj/runtime/BootClassLoader.java | 62 +++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 2 deletions(-) (limited to 'libjava/gnu') diff --git a/libjava/gnu/gcj/runtime/BootClassLoader.java b/libjava/gnu/gcj/runtime/BootClassLoader.java index 731703ab8f3..40f3147b7be 100644 --- a/libjava/gnu/gcj/runtime/BootClassLoader.java +++ b/libjava/gnu/gcj/runtime/BootClassLoader.java @@ -9,9 +9,13 @@ details. */ package gnu.gcj.runtime; import gnu.java.net.protocol.core.Handler; +import java.io.File; import java.io.IOException; import java.net.URL; +import java.net.URLClassLoader; import java.util.Enumeration; +import java.util.StringTokenizer; +import java.util.Vector; /** * This is a helper for the bootstrap class loader. It is a @@ -27,6 +31,9 @@ public final class BootClassLoader extends HelperClassLoader // path fails otherwise. static Class coreHandler = gnu.java.net.protocol.core.Handler.class; + private boolean initialized; + private URLClassLoader bootURLLoader; + BootClassLoader(String libdir) { // The BootClassLoader is the top of the delegation chain. It does not @@ -68,13 +75,64 @@ public final class BootClassLoader extends HelperClassLoader return c; } + // Parse the boot classpath and create a URLClassLoader that loads + // resources from it. This is provided for the benefit of code that + // does things like + // ClassLoader.getResourceAsStream("java/lang/Object.class") + private synchronized URLClassLoader getBootURLLoader() + { + if (initialized) + return bootURLLoader; + initialized = true; + + Vector urls = new Vector(); + String bootClasspath = System.getProperty ("sun.boot.class.path"); + StringTokenizer st = + new StringTokenizer(bootClasspath, File.pathSeparator); + while (st.hasMoreTokens()) + { + try + { + urls.add(new File(st.nextToken()).toURL()); + } + catch (java.net.MalformedURLException e) + { + } + } + + if (urls.size() > 0) + bootURLLoader = new URLClassLoader(urls.toArray(new URL[urls.size()])); + return bootURLLoader; + } + public URL bootGetResource(String name) { - return findResource(name); + URL url = findResource(name); + if (url != null) + return url; + + URLClassLoader loader = getBootURLLoader(); + if (loader != null) + url = loader.findResource(name); + + return url; } public Enumeration bootGetResources(String name) throws IOException { - return findResources(name); + URLClassLoader loader = getBootURLLoader(); + Enumeration[] e = + { + findResources(name), + (loader != null) ? loader.findResources(name) : null + }; + + Vector v = new Vector(); + for (Enumeration en : e) + if (en != null) + while (en.hasMoreElements()) + v.add(en.nextElement()); + + return v.elements(); } } -- cgit v1.2.1