gcc/libjava/gnu/gcj/runtime/SharedLibLoader.java
Tom Tromey 91edd042ff Makefile.in: Rebuilt.
* Makefile.in: Rebuilt.
	* Makefile.am (ordinary_java_source_files): Added new files.
	* java/lang/Class.h (_Jv_sharedlib_register_hook): Declare as
	friend.
	* java/net/URLClassLoader.java (findClass): Don't use
	findURLResource.  Use loader's getClass method.
	(URLLoader.getClass): New method.
	(addURL): Handle `gcjlib' URLs.
	(SoURLLoader): New class.
	(SoResource): Likewise.
	* gnu/gcj/protocol/gcjlib/Connection.java: New file.
	* gnu/gcj/protocol/gcjlib/Handler.java: New file.
	* include/jvm.h (struct _Jv_core_chain): Moved from natCore.cc.
	(_Jv_RegisterCoreHook): Declare.
	(_Jv_FindCore): Declare.
	* gnu/gcj/runtime/SharedLibHelper.java: New file.
	* gnu/gcj/runtime/natSharedLibLoader.cc (CoreHookFunc): New
	typedef.
	(core_hook): New function.
	(struct SharedLibDummy) [saved_core]: New field.
	(init): Set _Jv_RegisterCoreHook.  Throw exception on failure.
	(register_hook): Set protection domain and class loader on new
	class.
	(finalize): Free core chain.
	* gnu/gcj/Core.java (Core): New constructor.
	* gnu/gcj/runtime/SharedLibLoader.java: Rewrote to use
	SharedLibHelper.
	* gnu/gcj/natCore.cc (_Jv_RegisterResource): Indentation fixlet.
	(_Jv_create_core): New function.
	(create): Use it.
	(default_register_resource): New function.
	(_Jv_RegisterCoreHook): New global.
	(_Jv_RegisterResource): Use it.
	(core_chain_struct): Removed.
	(_Jv_FindCore): New function.
	(_Jv_FreeCoreChain): New function.

From-SVN: r70892
2003-08-28 22:17:37 +00:00

80 lines
1.9 KiB
Java

/* Copyright (C) 2001, 2003 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.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.
* @author Per Bothner <per@bothner.com>, Brainfood Inc.
*/
public class SharedLibLoader extends ClassLoader
{
/** 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);
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)
{
this(libname, getSystemClassLoader(), 0);
}
public Class findClass(String name)
throws ClassNotFoundException
{
Class cls = helper.findClass(name);
if (cls == null)
throw new ClassNotFoundException(name);
return cls;
}
public URL findResource (String name)
{
return helper.findResource(name);
}
public Enumeration findResources (String name) throws IOException
{
URL url = findResource(name);
if (url == null)
return null;
Vector v = new Vector(1);
v.add(url);
return v.elements();
}
/** The helper that does the work for us. */
SharedLibHelper helper;
}