1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
/* 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;
}
last_was_sep = false;
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);
}
}
}
}
|