File (getAbsolutePath): Prefix drive specifier on Windows for paths starting with a '\'.
2003-03-01 Ranjit Mathew <rmathew@hotmail.com> * java/io/File (getAbsolutePath): Prefix drive specifier on Windows for paths starting with a '\'. (toURL): Make URL more consistent with what Sun's JDK returns. * java/io/natFileWin32.cc (java::io::File::isAbsolute): Return true only if the path is a UNC network path or it starts with a drive specifier. * java/net/URLStreamHandler.java (parseURL): Correct minor typo. Be prepared to handle either '/' or '\\' in the file path for Windows if using the "file" protocol. Canonicalise the file path if using a relative path in the given context and the "file" protocol. From-SVN: r63635
This commit is contained in:
parent
73058ef68c
commit
5bedfc9356
4 changed files with 71 additions and 11 deletions
|
@ -1,5 +1,5 @@
|
|||
/* URLStreamHandler.java -- Abstract superclass for all protocol handlers
|
||||
Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
|
@ -39,6 +39,7 @@ exception statement from your version. */
|
|||
package java.net;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.File;
|
||||
|
||||
/*
|
||||
* Written using on-line Java Platform 1.2 API Specification, as well
|
||||
|
@ -112,7 +113,7 @@ public abstract class URLStreamHandler
|
|||
* subclasses that implement protocols with URL's the follow a different
|
||||
* syntax should override this method. The lone exception is that if
|
||||
* the protocol name set in the URL is "file", this method will accept
|
||||
* a an empty hostname (i.e., "file:///"), which is legal for that protocol
|
||||
* an empty hostname (i.e., "file:///"), which is legal for that protocol
|
||||
*
|
||||
* @param url The URL object in which to store the results
|
||||
* @param spec The String-ized URL to parse
|
||||
|
@ -176,8 +177,32 @@ public abstract class URLStreamHandler
|
|||
else if (start < end)
|
||||
{
|
||||
// Context is available, but only override it if there is a new file.
|
||||
file = file.substring(0, file.lastIndexOf('/'))
|
||||
+ '/' + spec.substring(start, end);
|
||||
char sepChar = '/';
|
||||
int lastSlash = file.lastIndexOf (sepChar);
|
||||
if (lastSlash < 0 && File.separatorChar != sepChar
|
||||
&& url.getProtocol ().equals ("file"))
|
||||
{
|
||||
// On Windows, even '\' is allowed in a "file" URL.
|
||||
sepChar = File.separatorChar;
|
||||
lastSlash = file.lastIndexOf (sepChar);
|
||||
}
|
||||
|
||||
file = file.substring(0, lastSlash)
|
||||
+ sepChar + spec.substring (start, end);
|
||||
|
||||
if (url.getProtocol ().equals ("file"))
|
||||
{
|
||||
// For "file" URLs constructed relative to a context, we
|
||||
// need to canonicalise the file path.
|
||||
try
|
||||
{
|
||||
file = new File (file).getCanonicalPath ();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
ref = null;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue