1 /* Copyright (C) 2001, 2003  Free Software Foundation
2 
3    This file is part of libgcj.
4 
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
7 details.  */
8 
9 package gnu.gcj.runtime;
10 import java.io.IOException;
11 import java.net.MalformedURLException;
12 import java.net.URL;
13 import java.security.CodeSource;
14 import java.util.Enumeration;
15 import java.util.Vector;
16 
17 /**
18  * A ClassLoader backed by a gcj-compiled shared library.
19  * @author Per Bothner <per@bothner.com>, Brainfood Inc.
20  */
21 
22 public class SharedLibLoader extends ClassLoader
23 {
24   /** Load a shared library, and associate a ClassLoader with it.
25    * @param libname named of shared library (passed to dlopen)
26    * @param parent the parent ClassLoader
27    * @parem flags passed to dlopen
28    */
SharedLibLoader(String libname, ClassLoader parent, int flags)29   public SharedLibLoader(String libname, ClassLoader parent, int flags)
30   {
31     super(parent);
32     URL url;
33     try
34       {
35 	url = new URL("file", "", libname);
36       }
37     catch (MalformedURLException _)
38       {
39 	url = null;
40       }
41     helper = SharedLibHelper.findHelper(this, libname,
42 					new CodeSource(url, null));
43   }
44 
45   /** Load a shared library, and asociate a ClassLoader with it.
46    * @param libname named of shared library (passed to dlopen)
47    */
SharedLibLoader(String libname)48   public SharedLibLoader(String libname)
49   {
50     this(libname, getSystemClassLoader(), 0);
51   }
52 
findClass(String name)53   public Class findClass(String name)
54     throws ClassNotFoundException
55   {
56     Class cls = helper.findClass(name);
57     if (cls == null)
58       throw new ClassNotFoundException(name);
59     return cls;
60   }
61 
findResource(String name)62   public URL findResource (String name)
63   {
64     return helper.findResource(name);
65   }
66 
findResources(String name)67   public Enumeration findResources (String name) throws IOException
68   {
69     URL url = findResource(name);
70     if (url == null)
71       return null;
72     Vector v = new Vector(1);
73     v.add(url);
74     return v.elements();
75   }
76 
77   /** The helper that does the work for us.  */
78   SharedLibHelper helper;
79 }
80