URLClassLoader.java (getCanonicalFileURL): New method.

2002-12-10  Mark Wielaard  <mark@klomp.org>
            Tom Tromey  <tromey@redhat.com>

	* java/net/URLClassLoader.java (getCanonicalFileURL): New method.
	(JarURLLoader): Use it.
	(FileURLLoader): Likewise.
	(JarURLResource.getURL): Use chained exception.
	(FileResource.getURL): Likewise.
	(FileURLLoader.getResource): Use canonical file name.
	(addURL): Indentation fix.

Co-Authored-By: Tom Tromey <tromey@redhat.com>

From-SVN: r60019
This commit is contained in:
Mark Wielaard 2002-12-11 02:13:51 +00:00 committed by Tom Tromey
parent d23faea18e
commit a7e693d5d2
2 changed files with 55 additions and 21 deletions

View File

@ -1,3 +1,14 @@
2002-12-10 Mark Wielaard <mark@klomp.org>
Tom Tromey <tromey@redhat.com>
* java/net/URLClassLoader.java (getCanonicalFileURL): New method.
(JarURLLoader): Use it.
(FileURLLoader): Likewise.
(JarURLResource.getURL): Use chained exception.
(FileResource.getURL): Likewise.
(FileURLLoader.getResource): Use canonical file name.
(addURL): Indentation fix.
2002-12-10 Tom Tromey <tromey@redhat.com>
* include/win32.h: Fixed typo in "DISABLE_JAVA_NET".

View File

@ -271,6 +271,22 @@ public class URLClassLoader extends SecureClassLoader
abstract InputStream getInputStream() throws IOException;
}
static URL getCanonicalFileURL(URL url)
{
if ("file".equals(url.getProtocol()))
{
try
{
File f = new File(url.getFile()).getCanonicalFile();
url = new URL("file", "", f.toString());
}
catch (IOException ignore)
{
}
}
return url;
}
/**
* A <code>JarURLLoader</code> is a type of <code>URLLoader</code>
* only loading from jar url.
@ -282,7 +298,7 @@ public class URLClassLoader extends SecureClassLoader
public JarURLLoader(URLClassLoader classloader, URL baseURL)
{
super(classloader, baseURL);
super(classloader, getCanonicalFileURL(baseURL));
// cache url prefix for all resources in this jar url
String external = baseURL.toExternalForm();
@ -331,7 +347,6 @@ public class URLClassLoader extends SecureClassLoader
return null;
}
}
}
final static class JarURLResource extends Resource
@ -368,7 +383,9 @@ public class URLClassLoader extends SecureClassLoader
}
catch(MalformedURLException e)
{
throw new InternalError(e.toString());
InternalError ie = new InternalError();
ie.initCause(e);
throw ie;
}
}
}
@ -468,18 +485,23 @@ public class URLClassLoader extends SecureClassLoader
FileURLLoader(URLClassLoader classloader, URL url)
{
super(classloader, url);
// Note that this must be a "file" protocol URL.
dir = new File(url.getFile());
super(classloader, getCanonicalFileURL(url));
dir = new File(baseURL.getFile());
}
/** get resource with the name "name" in the file url */
Resource getResource(String name)
{
File file = new File(dir, name);
try
{
file = file.getCanonicalFile();
}
catch (IOException ignore)
{
}
if (file.exists() && !file.isDirectory())
return new FileResource(this, name, file);
else
return null;
}
}
@ -513,7 +535,9 @@ public class URLClassLoader extends SecureClassLoader
}
catch(MalformedURLException e)
{
throw new InternalError(e.toString());
InternalError ie = new InternalError();
ie.initCause(e);
throw ie;
}
}
}
@ -667,10 +691,9 @@ public class URLClassLoader extends SecureClassLoader
{
String file = newUrl.getFile();
// Check that it is not a directory
if (!(file.endsWith("/") || file.endsWith(File.separator)))
if (! (file.endsWith("/") || file.endsWith(File.separator)))
loader = new JarURLLoader(this, newUrl);
else // it's a url that point to a jar file
if ("file".equals(newUrl.getProtocol()))
else if ("file".equals(newUrl.getProtocol()))
loader = new FileURLLoader(this, newUrl);
else
loader = new RemoteURLLoader(this, newUrl);