diff options
author | Tom Tromey <tromey@redhat.com> | 2006-01-17 23:25:12 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2006-01-17 23:25:12 +0000 |
commit | 96c6b0e22a1fbb1a3a8983b5765df57311cea3b6 (patch) | |
tree | 201e8542f05dcd33e5a48830e4e6ac2a4ee84ae1 | |
parent | a37a4460b58efb3e01d94dc944babdbea2780a22 (diff) | |
download | gcc-96c6b0e22a1fbb1a3a8983b5765df57311cea3b6.zip gcc-96c6b0e22a1fbb1a3a8983b5765df57311cea3b6.tar.gz gcc-96c6b0e22a1fbb1a3a8983b5765df57311cea3b6.tar.bz2 |
re PR classpath/20198 (java.security.CodeSource.getLocation output is different than expected)
PR classpath/20198:
* java/net/URLClassLoader.java (FileURLLoader): Added argument.
(JarURLLoader): Likewise.
(addURLImpl): Canonicalize file URLs.
From-SVN: r109844
-rw-r--r-- | libjava/ChangeLog | 7 | ||||
-rw-r--r-- | libjava/java/net/URLClassLoader.java | 48 |
2 files changed, 47 insertions, 8 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index f8df781..9b8dff9 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2006-01-17 Tom Tromey <tromey@redhat.com> + + PR classpath/20198: + * java/net/URLClassLoader.java (FileURLLoader): Added argument. + (JarURLLoader): Likewise. + (addURLImpl): Canonicalize file URLs. + 2006-01-16 Mark Wielaard <mark@klomp.org> Imported GNU Classpath 0.20 diff --git a/libjava/java/net/URLClassLoader.java b/libjava/java/net/URLClassLoader.java index 5bb0337..ada4b63 100644 --- a/libjava/java/net/URLClassLoader.java +++ b/libjava/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. @@ -305,9 +305,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(); @@ -601,10 +602,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 */ @@ -885,13 +886,44 @@ 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 ("gcjlib".equals(protocol)) loader = new SoURLLoader(this, newUrl); else 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 if ("core".equals(protocol)) loader = new CoreURLLoader(this, newUrl); else |