diff options
author | green <green@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-04 11:23:29 +0000 |
---|---|---|
committer | green <green@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-04 11:23:29 +0000 |
commit | 47e80a7c3b34e6119633a3b21442b542c77f0222 (patch) | |
tree | bf4f231a611072a7ce526a6864c657158f490e6c /libjava/java/net | |
parent | ebd65d12ee761b7a29f6a353a623a507b336f4f1 (diff) | |
download | ppe42-gcc-47e80a7c3b34e6119633a3b21442b542c77f0222.tar.gz ppe42-gcc-47e80a7c3b34e6119633a3b21442b542c77f0222.zip |
2005-06-04 Anthony Green <green@redhat.com>
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100582 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/net')
-rw-r--r-- | libjava/java/net/URLClassLoader.java | 65 |
1 files changed, 64 insertions, 1 deletions
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 <code>CoreURLLoader</code> is a type of <code>URLLoader</code> + * 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); |