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:
Ranjit Mathew 2003-03-01 23:38:13 +00:00 committed by Tom Tromey
parent 73058ef68c
commit 5bedfc9356
4 changed files with 71 additions and 11 deletions

View file

@ -1,6 +1,6 @@
// File.java - File name
/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
/* Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
This file is part of libgcj.
@ -153,12 +153,20 @@ public class File implements Serializable, Comparable
this (dir == null ? null : dir.path, name);
}
// FIXME ???
public String getAbsolutePath ()
{
if (isAbsolute ())
return path;
return System.getProperty("user.dir") + separatorChar + path;
else if (separatorChar == '\\'
&& path.length () > 0 && path.charAt (0) == '\\')
{
// On Windows, even if the path starts with a '\\' it is not
// really absolute until we prefix the drive specifier from
// the current working directory to it.
return System.getProperty ("user.dir").substring (0, 2) + path;
}
else
return System.getProperty ("user.dir") + separatorChar + path;
}
/** @since 1.2 */
@ -289,8 +297,14 @@ public class File implements Serializable, Comparable
public URL toURL () throws MalformedURLException
{
return new URL ("file://" + getAbsolutePath ()
+ (isDirectory() ? "/" : ""));
// On Win32, Sun's JDK returns URLs of the form "file:/c:/foo/bar.txt",
// while on UNIX, it returns URLs of the form "file:/foo/bar.txt".
if (separatorChar == '\\')
return new URL ("file:/" + getAbsolutePath ().replace ('\\', '/')
+ (isDirectory() ? "/" : ""));
else
return new URL ("file:" + getAbsolutePath ()
+ (isDirectory() ? "/" : ""));
}
private final native boolean performMkdir ();