| /* Copyright (C) 2005 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.*; |
| import java.util.StringTokenizer; |
| import java.util.HashSet; |
| import java.net.URL; |
| import java.net.URLClassLoader; |
| |
| public final class SystemClassLoader extends URLClassLoader |
| { |
| SystemClassLoader(ClassLoader parent) |
| { |
| super(new URL[0], parent); |
| } |
| |
| // We add the URLs to the system class loader late. The reason for |
| // this is that during bootstrap we don't want to parse URLs or |
| // create URL connections, since that will result in circularities |
| // causing a crash. |
| void init() |
| { |
| String sep = File.pathSeparator; |
| StringTokenizer st |
| = new StringTokenizer (System.getProperty ("java.class.path", "."), |
| sep, true); |
| // Pretend we start with a ':', so if we see a ':' first we add |
| // '.'. |
| boolean last_was_sep = true; |
| while (st.hasMoreElements ()) |
| { |
| String e = st.nextToken (); |
| try |
| { |
| if (sep.equals(e)) |
| { |
| if (last_was_sep) |
| { |
| // We saw two separators in a row, so add ".". |
| addURL(new URL("file", "", -1, "./")); |
| last_was_sep = false; |
| } |
| else |
| last_was_sep = true; |
| continue; |
| } |
| |
| File path = new File(e); |
| // Ignore invalid paths. |
| if (!path.exists()) |
| continue; |
| if (!e.endsWith (File.separator) && path.isDirectory ()) |
| addURL(new URL("file", "", -1, e + File.separator)); |
| else |
| addURL(new URL("file", "", -1, e)); |
| } |
| catch (java.net.MalformedURLException x) |
| { |
| // This should never happen. |
| throw new RuntimeException(x); |
| } |
| } |
| // If we saw a trailing ":", add "." to the path. |
| if (last_was_sep) |
| { |
| try |
| { |
| addURL(new URL("file", "", -1, "./")); |
| } |
| catch (java.net.MalformedURLException x) |
| { |
| // This should never happen. |
| throw new RuntimeException(x); |
| } |
| } |
| } |
| } |