diff options
Diffstat (limited to 'libjava/gnu/gcj/runtime/SharedLibLoader.java')
-rw-r--r-- | libjava/gnu/gcj/runtime/SharedLibLoader.java | 68 |
1 files changed, 36 insertions, 32 deletions
diff --git a/libjava/gnu/gcj/runtime/SharedLibLoader.java b/libjava/gnu/gcj/runtime/SharedLibLoader.java index ac2f72d4b64..1f80bbc8289 100644 --- a/libjava/gnu/gcj/runtime/SharedLibLoader.java +++ b/libjava/gnu/gcj/runtime/SharedLibLoader.java @@ -1,4 +1,4 @@ -/* Copyright (C) 2001 Free Software Foundation +/* Copyright (C) 2001, 2003 Free Software Foundation This file is part of libgcj. @@ -7,7 +7,12 @@ Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package gnu.gcj.runtime; -import java.util.Hashtable; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.CodeSource; +import java.util.Enumeration; +import java.util.Vector; /** * A ClassLoader backed by a gcj-compiled shared library. @@ -16,14 +21,6 @@ import java.util.Hashtable; public class SharedLibLoader extends ClassLoader { - public native void finalize (); - - /** Called during dlopen's processing of the init section. */ - void registerClass(String name, Class cls) - { - classMap.put(name, cls); - } - /** Load a shared library, and associate a ClassLoader with it. * @param libname named of shared library (passed to dlopen) * @param parent the parent ClassLoader @@ -32,44 +29,51 @@ public class SharedLibLoader extends ClassLoader public SharedLibLoader(String libname, ClassLoader parent, int flags) { super(parent); - init(libname, flags); + URL url; + try + { + url = new URL("file", "", libname); + } + catch (MalformedURLException _) + { + url = null; + } + helper = SharedLibHelper.findHelper(this, libname, + new CodeSource(url, null)); } - /** Load a shared library, and asociate a ClassLoader with it. * @param libname named of shared library (passed to dlopen) */ public SharedLibLoader(String libname) { - super(getSystemClassLoader()); - init(libname, 0); + this(libname, getSystemClassLoader(), 0); } - void init(String libname, int flags) + public Class findClass(String name) + throws ClassNotFoundException { - init(libname.getBytes(), flags); + Class cls = helper.findClass(name); + if (cls == null) + throw new ClassNotFoundException(name); + return cls; } - native void init(byte[] libname, int flags); - - public Class loadClass(String name) - throws ClassNotFoundException + public URL findResource (String name) { - return super.loadClass(name); + return helper.findResource(name); } - public Class findClass(String name) - throws ClassNotFoundException + public Enumeration findResources (String name) throws IOException { - Object cls = classMap.get(name); - if (cls == null) - throw new ClassNotFoundException(name); - return (Class) cls; + URL url = findResource(name); + if (url == null) + return null; + Vector v = new Vector(1); + v.add(url); + return v.elements(); } - /** The handle returned by dlopen. */ - gnu.gcj.RawData handler; - - /** Map classnames to Classes. */ - Hashtable classMap = new Hashtable(20); + /** The helper that does the work for us. */ + SharedLibHelper helper; } |