Regression in GCJ 3.3 in parsing property files

Ranjit Mathew rmathew@hotmail.com
Tue Feb 18 20:06:00 GMT 2003


> Ranjit> The VMClassLoader has only "file:.\" as the base URL for
> Ranjit> searching the file "build.properties".
> 
> Where does this string come from?

For each component of the CLASSPATH, it creates a base URL - the
one above is created for the default "." in the CLASSPATH.


> Is it really valid for a file: URL to use `\' as the separator?
> My suspicion is that this sort of URL should always use `/'.

Yes. I verified with Sun's JDK 1.4.1 which has no problems in
reading from a "file:.\\build.properties" resource.


> Note that one known bug in this area is that File.toURL doesn't
> convert the path separator.  I think it should.

I'll look into this...


> Or, I could be mistaken about all this and we would have to fix the
> URL parsing code.  Can you find out?

The following patch to the parseURL( ) method fixes the problem for 
me:
Index: java/net/URLStreamHandler.java
===================================================================
--- java/net/URLStreamHandler.java	2003-02-19 00:33:08.000000000 +0530
+++ java/net/URLStreamHandler.java	2003-02-19 00:51:32.000000000 +0530
@@ -40,4 +40,5 @@
 
 import java.io.IOException;
+import java.io.File;
 
 /*
@@ -177,6 +178,14 @@
       {
 	// 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))
+          {
+            sepChar = File.separatorChar;
+            lastSlash = file.lastIndexOf (sepChar);
+          }
+        
+	file = file.substring(0, lastSlash)
+		+ sepChar + spec.substring(start, end);
 	ref = null;
       }

Ranjit.

-- 
Ranjit Mathew        Email: rmathew AT hotmail DOT com
Bangalore,           
INDIA.               Web: http://ranjitmathew.tripod.com/



More information about the Java mailing list