home *** CD-ROM | disk | FTP | other *** search
- package java.lang;
-
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.URL;
- import java.security.AccessControlContext;
- import java.security.AccessController;
- import java.security.CodeSource;
- import java.security.PermissionCollection;
- import java.security.ProtectionDomain;
- import java.security.cert.Certificate;
- import java.util.Enumeration;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Hashtable;
- import java.util.Map;
- import java.util.Set;
- import java.util.Stack;
- import java.util.Vector;
- import sun.misc.CompoundEnumeration;
- import sun.misc.Launcher;
- import sun.misc.Resource;
- import sun.misc.URLClassPath;
-
- public abstract class ClassLoader {
- private boolean initialized = false;
- private ClassLoader parent;
- private Hashtable package2certs = new Hashtable(11);
- Certificate[] nocerts;
- private Vector classes = new Vector();
- private Set domains = new HashSet();
- private HashMap packages = new HashMap();
- private static URLClassPath bootstrapClassPath;
- private static ClassLoader scl;
- private static boolean sclSet;
- private static RuntimePermission getClassLoaderPerm = null;
- private ProtectionDomain defaultDomain = null;
- private static PermissionCollection defaultPermissions = null;
- private static Vector loadedLibraryNames = new Vector();
- private static Vector systemNativeLibraries = new Vector();
- private Vector nativeLibraries = new Vector();
- private static Stack nativeLibraryContext = new Stack();
- private static String[] usr_paths;
- private static String[] sys_paths;
- // $FF: synthetic field
- static Class class$java$lang$ClassLoader;
-
- void addClass(Class var1) {
- this.classes.addElement(var1);
- }
-
- protected ClassLoader(ClassLoader var1) {
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- var2.checkCreateClassLoader();
- }
-
- this.parent = var1;
- this.initialized = true;
- }
-
- protected ClassLoader() {
- SecurityManager var1 = System.getSecurityManager();
- if (var1 != null) {
- var1.checkCreateClassLoader();
- }
-
- this.parent = getSystemClassLoader();
- this.initialized = true;
- }
-
- public Class loadClass(String var1) throws ClassNotFoundException {
- return this.loadClass(var1, false);
- }
-
- protected synchronized Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
- Class var3 = this.findLoadedClass(var1);
- if (var3 == null) {
- try {
- if (this.parent != null) {
- var3 = this.parent.loadClass(var1, false);
- } else {
- var3 = this.findBootstrapClass0(var1);
- }
- } catch (ClassNotFoundException var5) {
- var3 = this.findClass(var1);
- }
- }
-
- if (var2) {
- this.resolveClass(var3);
- }
-
- return var3;
- }
-
- private synchronized Class loadClassInternal(String var1) throws ClassNotFoundException {
- return this.loadClass(var1);
- }
-
- private void checkPackageAccess(Class var1, ProtectionDomain var2) {
- SecurityManager var3 = System.getSecurityManager();
- if (var3 != null) {
- String var4 = var1.getName();
- int var5 = var4.lastIndexOf(46);
- if (var5 != -1) {
- AccessController.doPrivileged(new 1(this, var3, var4, var5), new AccessControlContext(new ProtectionDomain[]{var2}));
- }
- }
-
- this.domains.add(var2);
- }
-
- protected Class findClass(String var1) throws ClassNotFoundException {
- throw new ClassNotFoundException(var1);
- }
-
- protected final Class defineClass(byte[] var1, int var2, int var3) throws ClassFormatError {
- return this.defineClass((String)null, var1, var2, var3, (ProtectionDomain)null);
- }
-
- protected final Class defineClass(String var1, byte[] var2, int var3, int var4) throws ClassFormatError {
- return this.defineClass(var1, var2, var3, var4, (ProtectionDomain)null);
- }
-
- protected final Class defineClass(String var1, byte[] var2, int var3, int var4, ProtectionDomain var5) throws ClassFormatError {
- this.check();
- if (var1 != null && var1.startsWith("java.")) {
- throw new SecurityException("Prohibited package name: " + var1.substring(0, var1.lastIndexOf(46)));
- } else {
- if (var5 == null) {
- var5 = this.getDefaultDomain();
- }
-
- if (var1 != null) {
- this.checkCerts(var1, var5.getCodeSource());
- }
-
- Class var6 = this.defineClass0(var1, var2, var3, var4, var5);
- if (var5.getCodeSource() != null) {
- Certificate[] var7 = var5.getCodeSource().getCertificates();
- if (var7 != null) {
- this.setSigners(var6, var7);
- }
- }
-
- return var6;
- }
- }
-
- private synchronized void checkCerts(String var1, CodeSource var2) {
- int var3 = var1.lastIndexOf(46);
- String var4 = var3 == -1 ? "" : var1.substring(0, var3);
- Certificate[] var5 = (Certificate[])this.package2certs.get(var4);
- if (var5 == null) {
- if (var2 != null) {
- var5 = var2.getCertificates();
- }
-
- if (var5 == null) {
- if (this.nocerts == null) {
- this.nocerts = new Certificate[0];
- }
-
- var5 = this.nocerts;
- }
-
- this.package2certs.put(var4, var5);
- } else {
- Certificate[] var6 = null;
- if (var2 != null) {
- var6 = var2.getCertificates();
- }
-
- if (!this.compareCerts(var5, var6)) {
- throw new SecurityException("class \"" + var1 + "\"'s signer information does not match signer information of other classes in the same package");
- }
- }
-
- }
-
- private boolean compareCerts(Certificate[] var1, Certificate[] var2) {
- if (var2 != null && var2.length != 0) {
- if (var2.length != var1.length) {
- return false;
- } else {
- for(int var4 = 0; var4 < var2.length; ++var4) {
- boolean var3 = false;
-
- for(int var5 = 0; var5 < var1.length; ++var5) {
- if (var2[var4].equals(var1[var5])) {
- var3 = true;
- break;
- }
- }
-
- if (!var3) {
- return false;
- }
- }
-
- for(int var8 = 0; var8 < var1.length; ++var8) {
- boolean var7 = false;
-
- for(int var6 = 0; var6 < var2.length; ++var6) {
- if (var1[var8].equals(var2[var6])) {
- var7 = true;
- break;
- }
- }
-
- if (!var7) {
- return false;
- }
- }
-
- return true;
- }
- } else {
- return var1.length == 0;
- }
- }
-
- protected final void resolveClass(Class var1) {
- this.check();
- this.resolveClass0(var1);
- }
-
- protected final Class findSystemClass(String var1) throws ClassNotFoundException {
- this.check();
- ClassLoader var2 = getSystemClassLoader();
- return var2 == null ? this.findBootstrapClass(var1) : var2.loadClass(var1);
- }
-
- public final ClassLoader getParent() {
- if (this.parent == null) {
- return null;
- } else {
- SecurityManager var1 = System.getSecurityManager();
- if (var1 != null) {
- ClassLoader var2 = getCallerClassLoader();
- if (var2 != null && !this.isAncestor(var2)) {
- var1.checkPermission(getGetClassLoaderPerm());
- }
- }
-
- return this.parent;
- }
- }
-
- protected final void setSigners(Class var1, Object[] var2) {
- this.check();
- var1.setSigners(var2);
- }
-
- private Class findBootstrapClass0(String var1) throws ClassNotFoundException {
- this.check();
- return this.findBootstrapClass(var1);
- }
-
- private native Class defineClass0(String var1, byte[] var2, int var3, int var4, ProtectionDomain var5);
-
- private native void resolveClass0(Class var1);
-
- private native Class findBootstrapClass(String var1) throws ClassNotFoundException;
-
- private void check() {
- if (!this.initialized) {
- throw new SecurityException("ClassLoader object not initialized");
- }
- }
-
- protected final native Class findLoadedClass(String var1);
-
- public URL getResource(String var1) {
- URL var2;
- if (this.parent != null) {
- var2 = this.parent.getResource(var1);
- } else {
- var2 = getBootstrapResource(var1);
- }
-
- if (var2 == null) {
- var2 = this.findResource(var1);
- }
-
- return var2;
- }
-
- public final Enumeration getResources(String var1) throws IOException {
- Enumeration[] var2 = new Enumeration[2];
- if (this.parent != null) {
- var2[0] = this.parent.getResources(var1);
- } else {
- var2[0] = getBootstrapResources(var1);
- }
-
- var2[1] = this.findResources(var1);
- return new CompoundEnumeration(var2);
- }
-
- protected Enumeration findResources(String var1) throws IOException {
- return new CompoundEnumeration(new Enumeration[0]);
- }
-
- protected URL findResource(String var1) {
- return null;
- }
-
- public static URL getSystemResource(String var0) {
- ClassLoader var1 = getSystemClassLoader();
- return var1 == null ? getBootstrapResource(var0) : var1.getResource(var0);
- }
-
- private static URL getBootstrapResource(String var0) {
- URLClassPath var1 = getBootstrapClassPath();
- Resource var2 = var1.getResource(var0);
- return var2 != null ? var2.getURL() : null;
- }
-
- public static Enumeration getSystemResources(String var0) throws IOException {
- ClassLoader var1 = getSystemClassLoader();
- return var1 == null ? getBootstrapResources(var0) : var1.getResources(var0);
- }
-
- private static Enumeration getBootstrapResources(String var0) throws IOException {
- Enumeration var1 = getBootstrapClassPath().getResources(var0);
- return new 2(var1);
- }
-
- static URLClassPath getBootstrapClassPath() {
- if (bootstrapClassPath == null) {
- bootstrapClassPath = Launcher.getBootstrapClassPath();
- }
-
- return bootstrapClassPath;
- }
-
- public InputStream getResourceAsStream(String var1) {
- URL var2 = this.getResource(var1);
-
- try {
- return var2 != null ? var2.openStream() : null;
- } catch (IOException var4) {
- return null;
- }
- }
-
- public static InputStream getSystemResourceAsStream(String var0) {
- URL var1 = getSystemResource(var0);
-
- try {
- return var1 != null ? var1.openStream() : null;
- } catch (IOException var3) {
- return null;
- }
- }
-
- public static ClassLoader getSystemClassLoader() {
- if (!sclSet) {
- Launcher var0 = Launcher.getLauncher();
- if (var0 != null) {
- scl = var0.getClassLoader();
- }
-
- sclSet = true;
- }
-
- if (scl == null) {
- return null;
- } else {
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- ClassLoader var1 = getCallerClassLoader();
- if (var1 != null && var1 != scl && !scl.isAncestor(var1)) {
- var2.checkPermission(getGetClassLoaderPerm());
- }
- }
-
- return scl;
- }
- }
-
- boolean isAncestor(ClassLoader var1) {
- ClassLoader var2 = this;
-
- do {
- var2 = var2.parent;
- if (var1 == var2) {
- return true;
- }
- } while(var2 != null);
-
- return false;
- }
-
- static native ClassLoader getCallerClassLoader();
-
- static RuntimePermission getGetClassLoaderPerm() {
- if (getClassLoaderPerm == null) {
- getClassLoaderPerm = new RuntimePermission("getClassLoader");
- }
-
- return getClassLoaderPerm;
- }
-
- protected Package definePackage(String var1, String var2, String var3, String var4, String var5, String var6, String var7, URL var8) throws IllegalArgumentException {
- HashMap var9 = this.packages;
- synchronized(var9) {
- Package var10 = this.getPackage(var1);
- if (var10 != null) {
- throw new IllegalArgumentException(var1);
- } else {
- var10 = new Package(var1, var2, var3, var4, var5, var6, var7, var8);
- this.packages.put(var1, var10);
- return var10;
- }
- }
- }
-
- protected Package getPackage(String var1) {
- HashMap var2 = this.packages;
- synchronized(var2) {
- Package var3 = (Package)this.packages.get(var1);
- if (var3 == null) {
- if (this.parent != null) {
- var3 = this.parent.getPackage(var1);
- } else {
- var3 = Package.getSystemPackage(var1);
- }
-
- if (var3 != null) {
- this.packages.put(var1, var3);
- }
- }
-
- return var3;
- }
- }
-
- protected Package[] getPackages() {
- HashMap var2 = this.packages;
- Map var1;
- synchronized(var2) {
- var1 = (Map)this.packages.clone();
- }
-
- Package[] var3;
- if (this.parent != null) {
- var3 = this.parent.getPackages();
- } else {
- var3 = Package.getSystemPackages();
- }
-
- if (var3 != null) {
- for(int var4 = 0; var4 < var3.length; ++var4) {
- String var5 = var3[var4].getName();
- if (var1.get(var5) == null) {
- var1.put(var5, var3[var4]);
- }
- }
- }
-
- return (Package[])var1.values().toArray(new Package[var1.size()]);
- }
-
- protected String findLibrary(String var1) {
- return null;
- }
-
- private ProtectionDomain getDefaultDomain() {
- if (this.defaultDomain == null) {
- Class var1 = class$java$lang$ClassLoader == null ? (class$java$lang$ClassLoader = class$("java.lang.ClassLoader")) : class$java$lang$ClassLoader;
- synchronized(var1) {
- if (defaultPermissions == null) {
- defaultPermissions = (PermissionCollection)AccessController.doPrivileged(new 3(this));
- }
-
- if (this.defaultDomain == null) {
- CodeSource var2 = new CodeSource((URL)null, (Certificate[])null);
- this.defaultDomain = new ProtectionDomain(var2, defaultPermissions);
- }
- }
- }
-
- return this.defaultDomain;
- }
-
- private static String[] initializePath(String var0) {
- String var1 = System.getProperty(var0, "");
- String var2 = File.pathSeparator;
- int var3 = var1.length();
- int var4 = var1.indexOf(var2);
-
- int var6;
- for(var6 = 0; var4 >= 0; var4 = var1.indexOf(var2, var4 + 1)) {
- ++var6;
- }
-
- String[] var7 = new String[var6 + 1];
- var4 = 0;
- var6 = 0;
-
- for(int var5 = var1.indexOf(var2); var5 >= 0; var5 = var1.indexOf(var2, var4)) {
- if (var5 - var4 > 0) {
- var7[var6++] = var1.substring(var4, var5);
- } else if (var5 - var4 == 0) {
- var7[var6++] = ".";
- }
-
- var4 = var5 + 1;
- }
-
- var7[var6] = var1.substring(var4, var3);
- return var7;
- }
-
- static void loadLibrary(Class var0, String var1, boolean var2) {
- ClassLoader var3 = var0 == null ? null : var0.getClassLoader();
- if (sys_paths == null) {
- usr_paths = initializePath("java.library.path");
- sys_paths = initializePath("sun.boot.library.path");
- }
-
- if (var2) {
- if (!loadLibrary0(var0, new File(var1))) {
- throw new UnsatisfiedLinkError("Can't load library: " + var1);
- }
- } else {
- if (var3 != null) {
- String var4 = var3.findLibrary(var1);
- if (var4 != null) {
- File var9 = new File(var4);
- if (!var9.isAbsolute()) {
- throw new UnsatisfiedLinkError("ClassLoader.findClass failed to return an absolute path: " + var4);
- }
-
- if (loadLibrary0(var0, var9)) {
- return;
- }
-
- throw new UnsatisfiedLinkError("Can't load " + var4);
- }
- }
-
- for(int var7 = 0; var7 < sys_paths.length; ++var7) {
- File var5 = new File(sys_paths[var7], System.mapLibraryName(var1));
- if (loadLibrary0(var0, var5)) {
- return;
- }
- }
-
- if (var3 != null) {
- for(int var8 = 0; var8 < usr_paths.length; ++var8) {
- File var6 = new File(usr_paths[var8], System.mapLibraryName(var1));
- if (loadLibrary0(var0, var6)) {
- return;
- }
- }
- }
-
- throw new UnsatisfiedLinkError("no " + var1 + " in java.library.path");
- }
- }
-
- private static boolean loadLibrary0(Class var0, File var1) {
- Boolean var2 = (Boolean)AccessController.doPrivileged(new 4(var1));
- if (!var2) {
- return false;
- } else {
- String var3;
- try {
- var3 = var1.getCanonicalPath();
- } catch (IOException var23) {
- return false;
- }
-
- ClassLoader var4 = var0 == null ? null : var0.getClassLoader();
- Vector var5 = var4 != null ? var4.nativeLibraries : systemNativeLibraries;
- synchronized(var5) {
- int var7 = var5.size();
-
- for(int var8 = 0; var8 < var7; ++var8) {
- NativeLibrary var9 = (NativeLibrary)var5.elementAt(var8);
- if (var3.equals(var9.name)) {
- boolean var10 = true;
- return var10;
- }
- }
-
- Vector var26 = loadedLibraryNames;
- synchronized(var26) {
- if (loadedLibraryNames.contains(var3)) {
- throw new UnsatisfiedLinkError("Native Library " + var3 + " already loaded in another classloader");
- } else {
- int var27 = nativeLibraryContext.size();
-
- for(int var11 = 0; var11 < var27; ++var11) {
- NativeLibrary var12 = (NativeLibrary)nativeLibraryContext.elementAt(var11);
- if (var3.equals(var12.name)) {
- if (var4 == java.lang.ClassLoader.NativeLibrary.access$200(var12).getClassLoader()) {
- boolean var13 = true;
- return var13;
- }
-
- throw new UnsatisfiedLinkError("Native Library " + var3 + " is being loaded in another classloader");
- }
- }
-
- NativeLibrary var28 = new NativeLibrary(var0, var3);
- nativeLibraryContext.push(var28);
-
- try {
- var28.load(var3);
- } finally {
- nativeLibraryContext.pop();
- }
-
- if (var28.handle != 0L) {
- loadedLibraryNames.addElement(var3);
- var5.addElement(var28);
- boolean var29 = true;
- return var29;
- } else {
- boolean var14 = false;
- return var14;
- }
- }
- }
- }
- }
- }
-
- static long findNative(ClassLoader var0, String var1) {
- Vector var2 = var0 != null ? var0.nativeLibraries : systemNativeLibraries;
- synchronized(var2) {
- int var4 = var2.size();
-
- for(int var5 = 0; var5 < var4; ++var5) {
- NativeLibrary var6 = (NativeLibrary)var2.elementAt(var5);
- long var7 = var6.find(var1);
- if (var7 != 0L) {
- return var7;
- }
- }
-
- return 0L;
- }
- }
-
- // $FF: synthetic method
- static Vector access$000() {
- return loadedLibraryNames;
- }
-
- // $FF: synthetic method
- static Stack access$100() {
- return nativeLibraryContext;
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
- }
-