diff options
author | Anthony Green <green@redhat.com> | 2005-06-04 11:23:29 +0000 |
---|---|---|
committer | Anthony Green <green@gcc.gnu.org> | 2005-06-04 11:23:29 +0000 |
commit | 15f1298bf17418ba2cc8e00a1a5b6d99db2f1db5 (patch) | |
tree | bf4f231a611072a7ce526a6864c657158f490e6c /libjava/java | |
parent | e0342c26d32711da67235f44ab63714d9cc14f4a (diff) | |
download | gcc-15f1298bf17418ba2cc8e00a1a5b6d99db2f1db5.zip gcc-15f1298bf17418ba2cc8e00a1a5b6d99db2f1db5.tar.gz gcc-15f1298bf17418ba2cc8e00a1a5b6d99db2f1db5.tar.bz2 |
URLClassLoader.java: import gnu.gcj.Core, and gnu.java.net.protocol.core.CoreInputStream.
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.
From-SVN: r100582
Diffstat (limited to 'libjava/java')
-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 4b95998..e0a9389 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); |