diff options
author | Tom Tromey <tromey@redhat.com> | 2006-01-18 00:19:13 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2006-01-18 00:19:13 +0000 |
commit | 7d15868b445a0682c6bb89ec41a588a8191b2f25 (patch) | |
tree | 15bdbbdaf0134e2f4ff8f63a15445c192d712413 /java | |
parent | 70ebb2f7fb6bd103ab7fbb824b20c6fc54ab25f5 (diff) | |
download | classpath-7d15868b445a0682c6bb89ec41a588a8191b2f25.tar.gz |
PR classpath/20198:
* java/net/URLClassLoader.java (FileURLLoader): Added argument.
(JarURLLoader): Likewise.
(addURLImpl): Canonicalize file URLs.
Diffstat (limited to 'java')
-rw-r--r-- | java/net/URLClassLoader.java | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/java/net/URLClassLoader.java b/java/net/URLClassLoader.java index 9d0e50410..9e489db53 100644 --- a/java/net/URLClassLoader.java +++ b/java/net/URLClassLoader.java @@ -1,5 +1,5 @@ /* URLClassLoader.java -- ClassLoader that loads classes from one or more URLs - Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -292,9 +292,10 @@ public class URLClassLoader extends SecureClassLoader Vector classPath; // The "Class-Path" attribute of this Jar's manifest - public JarURLLoader(URLClassLoader classloader, URL baseURL) + public JarURLLoader(URLClassLoader classloader, URL baseURL, + URL absoluteUrl) { - super(classloader, baseURL); + super(classloader, baseURL, absoluteUrl); // Cache url prefix for all resources in this jar url. String external = baseURL.toExternalForm(); @@ -526,10 +527,10 @@ public class URLClassLoader extends SecureClassLoader { File dir; //the file for this file url - FileURLLoader(URLClassLoader classloader, URL url) + FileURLLoader(URLClassLoader classloader, URL url, URL absoluteUrl) { - super(classloader, url); - dir = new File(baseURL.getFile()); + super(classloader, url, absoluteUrl); + dir = new File(absoluteUrl.getFile()); } /** get resource with the name "name" in the file url */ @@ -723,11 +724,42 @@ public class URLClassLoader extends SecureClassLoader String file = newUrl.getFile(); String protocol = newUrl.getProtocol(); + // If we have a file: URL, we want to make it absolute + // here, before we decide whether it is really a jar. + URL absoluteURL; + if ("file".equals (protocol)) + { + File dir = new File(file); + URL absUrl; + try + { + absoluteURL = dir.getCanonicalFile().toURL(); + } + catch (IOException ignore) + { + try + { + absoluteURL = dir.getAbsoluteFile().toURL(); + } + catch (MalformedURLException _) + { + // This really should not happen. + absoluteURL = newUrl; + } + } + } + else + { + // This doesn't hurt, and it simplifies the logic a + // little. + absoluteURL = newUrl; + } + // Check that it is not a directory if (! (file.endsWith("/") || file.endsWith(File.separator))) - loader = new JarURLLoader(this, newUrl); + loader = new JarURLLoader(this, newUrl, absoluteURL); else if ("file".equals(protocol)) - loader = new FileURLLoader(this, newUrl); + loader = new FileURLLoader(this, newUrl, absoluteURL); else loader = new RemoteURLLoader(this, newUrl); |