From: Anthony Green Date: Sat, 4 Jun 2005 11:23:29 +0000 (+0000) Subject: URLClassLoader.java: import gnu.gcj.Core, and gnu.java.net.protocol.core.CoreInputStream. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=15f1298bf17418ba2cc8e00a1a5b6d99db2f1db5;p=gcc.git URLClassLoader.java: import gnu.gcj.Core, and gnu.java.net.protocol.core.CoreInputStream. 2005-06-04 Anthony Green * java/net/URLClassLoader.java: import gnu.gcj.Core, and gnu.java.net.protocol.core.CoreInputStream. (CureURLLoader): New class. (CoreResource): New class. (addURLImpl): Add special treatment for the "core" protocol. * gnu/gcj/natCore.cc (find): New method. * gnu/gcj/Core.java (find): New method. From-SVN: r100582 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 9c3960ca3ed..0b18f79f5f5 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,13 @@ +2005-06-04 Anthony Green + + * java/net/URLClassLoader.java: import gnu.gcj.Core, + and gnu.java.net.protocol.core.CoreInputStream. + (CureURLLoader): New class. + (CoreResource): New class. + (addURLImpl): Add special treatment for the "core" protocol. + * gnu/gcj/natCore.cc (find): New method. + * gnu/gcj/Core.java (find): New method. + 2005-06-03 Keith Seitz * gnu/classpath/jdwp/transport/ITransport.java: New file. diff --git a/libjava/gnu/gcj/Core.java b/libjava/gnu/gcj/Core.java index 80d623c5655..d3c358e10aa 100644 --- a/libjava/gnu/gcj/Core.java +++ b/libjava/gnu/gcj/Core.java @@ -12,6 +12,9 @@ public class Core { public native static Core create (String name) throws java.io.IOException; + // Same as create, except returns null if not found. + public native static Core find (String name); + public RawData ptr; public int length; diff --git a/libjava/gnu/gcj/natCore.cc b/libjava/gnu/gcj/natCore.cc index bb3fd57f6fb..d084b25b581 100644 --- a/libjava/gnu/gcj/natCore.cc +++ b/libjava/gnu/gcj/natCore.cc @@ -103,6 +103,13 @@ _Jv_create_core (_Jv_core_chain *node, jstring name) return core; } +gnu::gcj::Core * +gnu::gcj::Core::find (jstring name) +{ + gnu::gcj::Core *core = _Jv_create_core (root, name); + return core; +} + gnu::gcj::Core * gnu::gcj::Core::create (jstring name) { diff --git a/libjava/java/net/URLClassLoader.java b/libjava/java/net/URLClassLoader.java index 4b9599816a9..e0a9389b716 100644 --- a/libjava/java/net/URLClassLoader.java +++ b/libjava/java/net/URLClassLoader.java @@ -63,7 +63,8 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.Manifest; import gnu.gcj.runtime.SharedLibHelper; - +import gnu.gcj.Core; +import gnu.java.net.protocol.core.CoreInputStream; /** * A secure class loader that can load classes and resources from @@ -677,6 +678,66 @@ public class URLClassLoader extends SecureClassLoader } } + /** + * A CoreURLLoader is a type of URLLoader + * only loading from core url. + */ + static final class CoreURLLoader extends URLLoader + { + private String dir; + + CoreURLLoader(URLClassLoader classloader, URL url) + { + super(classloader, url); + dir = baseURL.getFile(); + } + + /** get resource with the name "name" in the core url */ + Resource getResource(String name) + { + Core core = Core.find (dir + name); + if (core != null) + return new CoreResource(this, name, core); + return null; + } + } + + static final class CoreResource extends Resource + { + final Core core; + + CoreResource(CoreURLLoader loader, String name, Core core) + { + super(loader, name); + this.core = core; + } + + InputStream getInputStream() throws IOException + { + return new CoreInputStream(core); + } + + public int getLength() + { + return core.length; + } + + public URL getURL() + { + try + { + return new URL(loader.baseURL, name, + loader.classloader.getURLStreamHandler("core")); + } + catch (MalformedURLException e) + { + InternalError ie = new InternalError(); + ie.initCause(e); + throw ie; + } + } + } + // Constructors /** @@ -842,6 +903,8 @@ public class URLClassLoader extends SecureClassLoader loader = new JarURLLoader(this, newUrl); else if ("file".equals(protocol)) loader = new FileURLLoader(this, newUrl); + else if ("core".equals(protocol)) + loader = new CoreURLLoader(this, newUrl); else loader = new RemoteURLLoader(this, newUrl);