URL.java (getPath): New JDK 1.3 method.

* java/net/URL.java (getPath):  New JDK 1.3 method.

	* java/net/URLStreamHandler.java (parseURL):
	It is wrong to prepend '/' to the file part of a relative url.

	* java/net/URLStreamHandler.java (parseURL):
	Minor optizations - append '/' rather than "/".

	* java/net/URLStreamHandler.java (parseURL):
	Don't canonicalize "xx/.." or "./" URLs - JDK doesn't.
	We probably should canonicalize for a context-relative url, though.
	* java/net/URL.java (sameFile):  Delegate to URLStreamHandler.
	* java/net/URLStreamHandler.java (canonicalizeFilename):  New helper.
	(sameFile):  New method.  Uses canonicalizeFilename.

From-SVN: r49980
This commit is contained in:
Per Bothner 2002-02-22 16:15:49 -08:00 committed by Per Bothner
parent 43710f9f89
commit 9abe2e29b4
3 changed files with 59 additions and 19 deletions

View file

@ -1,3 +1,20 @@
2002-02-20 Per Bothner <per@bothner.com>
* java/net/URL.java (getPath): New JDK 1.3 method.
* java/net/URLStreamHandler.java (parseURL):
It is wrong to prepend '/' to the file part of a relative url.
* java/net/URLStreamHandler.java (parseURL):
Minor optizations - append '/' rather than "/".
* java/net/URLStreamHandler.java (parseURL):
Don't canonicalize "xx/.." or "./" URLs - JDK doesn't.
We probably should canonicalize for a context-relative url, though.
* java/net/URL.java (sameFile): Delegate to URLStreamHandler.
* java/net/URLStreamHandler.java (canonicalizeFilename): New helper.
(sameFile): New method. Uses canonicalizeFilename.
2002-02-22 Tom Tromey <tromey@redhat.com>
* java/lang/natSystem.cc (init_properties): Include the `Inc.' in

View file

@ -1,6 +1,6 @@
// URL.java - A Uniform Resource Locator.
/* Copyright (C) 1999, 2000 Free Software Foundation
/* Copyright (C) 1999, 2000, 2002 Free Software Foundation
This file is part of libgcj.
@ -219,6 +219,12 @@ public final class URL implements Serializable
return file;
}
public String getPath()
{
int quest = file.indexOf('?');
return quest < 0 ? file : file.substring(0, quest);
}
public String getHost()
{
return host;
@ -274,16 +280,7 @@ public final class URL implements Serializable
public boolean sameFile(URL other)
{
// This comparison is very conservative. It assumes that any
// field can be null.
return (other != null
&& port == other.port
&& ((protocol == null && other.protocol == null)
|| (protocol != null && protocol.equals(other.protocol)))
&& ((host == null && other.host == null)
|| (host != null && host.equals(other.host)))
&& ((file == null && other.file == null)
|| (file != null && file.equals(other.file))));
return handler.sameFile(this, other);
}
protected void set(String protocol, String host, int port, String file,

View file

@ -1,6 +1,6 @@
// URLStreamHandler.java - Superclass of all stream protocol handlers.
/* Copyright (C) 1999 Free Software Foundation
/* Copyright (C) 1999, 2002 Free Software Foundation
This file is part of libgcj.
@ -84,17 +84,20 @@ public abstract class URLStreamHandler
else if (file == null || file.length() <= 0)
{
// No file context available; just spec for file.
file = "/" + spec.substring(start, limit);
file = spec.substring(start, limit);
}
else if (start < limit)
{
// Context is available, but only override it if there is a new file.
// FIXME: unsure to what extent `/` and File.separatorChar
// can mix in URLs. Ignore File.separatorChar for now.
file = file.substring(0, file.lastIndexOf('/'))
+ "/" + spec.substring(start, limit);
+ '/' + spec.substring(start, limit);
}
u.set(u.getProtocol(), host, port, file, u.getRef());
}
private static String canonicalizeFilename(String file)
{
int index;
// Replace "/./" with "/". This probably isn't very efficient in
@ -113,10 +116,33 @@ public abstract class URLStreamHandler
else
break;
}
u.set(u.getProtocol(), host, port, file, u.getRef());
return file;
}
public boolean sameFile(URL url1, URL url2)
{
if (url1 == url2)
return true;
// This comparison is very conservative. It assumes that any
// field can be null.
if (url1 == null || url2 == null || url1.getPort() != url2.getPort())
return false;
String s1, s2;
s1 = url1.getProtocol();
s2 = url2.getProtocol();
if (s1 != s2 && (s1 == null || ! s1.equals(s2)))
return false;
s1 = url1.getHost();
s2 = url2.getHost();
if (s1 != s2 && (s1 == null || ! s1.equals(s2)))
return false;
s1 = canonicalizeFilename(url1.getFile());
s2 = canonicalizeFilename(url2.getFile());
if (s1 != s2 && (s1 == null || ! s1.equals(s2)))
return false;
return true;
}
protected void setURL(URL u, String protocol, String host, int port,
String file, String ref)
{