mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Java
		
	
	
	
/* Copyright (C) 2001  Free Software Foundation
 | 
						|
 | 
						|
   This file is part of libgcj.
 | 
						|
 | 
						|
This software is copyrighted work licensed under the terms of the
 | 
						|
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
 | 
						|
details.  */
 | 
						|
 | 
						|
package gnu.gcj.runtime;
 | 
						|
import java.util.Hashtable;
 | 
						|
 | 
						|
/**
 | 
						|
 * A ClassLoader backed by a gcj-compiled shared library.
 | 
						|
 * @author Per Bothner <per@bothner.com>, Brainfood Inc.
 | 
						|
 */
 | 
						|
 | 
						|
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
 | 
						|
   * @parem flags passed to dlopen
 | 
						|
   */
 | 
						|
  public SharedLibLoader(String libname, ClassLoader parent, int flags)
 | 
						|
  {
 | 
						|
    super(parent);
 | 
						|
    init(libname, flags);
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
  /** 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);
 | 
						|
  }
 | 
						|
 | 
						|
  void init(String libname, int flags)
 | 
						|
  {
 | 
						|
    init(libname.getBytes(), flags);
 | 
						|
  }
 | 
						|
 | 
						|
  native void init(byte[] libname, int flags);
 | 
						|
 | 
						|
  public Class loadClass(String name)
 | 
						|
    throws ClassNotFoundException
 | 
						|
  {
 | 
						|
    return super.loadClass(name);
 | 
						|
  }
 | 
						|
 | 
						|
  public Class findClass(String name)
 | 
						|
    throws ClassNotFoundException
 | 
						|
  {
 | 
						|
    Object cls = classMap.get(name);
 | 
						|
    if (cls == null)
 | 
						|
      throw new ClassNotFoundException(name);
 | 
						|
    return (Class) cls;
 | 
						|
  }
 | 
						|
 | 
						|
  /** The handle returned by dlopen. */
 | 
						|
  gnu.gcj.RawData handler;
 | 
						|
 | 
						|
  /** Map classnames to Classes. */
 | 
						|
  Hashtable classMap = new Hashtable(20);
 | 
						|
}
 |