This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
FYI: Patch: gnu.java.net.protocol.jar.Handler
- From: Michael Koch <konqueror at gmx dot de>
- To: java-patches at gcc dot gnu dot org
- Date: Fri, 19 Dec 2003 10:53:21 +0100
- Subject: FYI: Patch: gnu.java.net.protocol.jar.Handler
Hi list,
I commited the attached patch to merge gnu.java.net.protocol.jar.Handler with
classpath again. This also fixes one mauve testcase and gives room for more
fixes to jar URLs.
Michael
Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v
retrieving revision 1.2460
diff -u -b -B -r1.2460 ChangeLog
--- ChangeLog 19 Dec 2003 02:53:35 -0000 1.2460
+++ ChangeLog 19 Dec 2003 09:47:32 -0000
@@ -1,3 +1,9 @@
+2003-12-19 Michael Koch <konqueror@gmx.de>
+
+ * gnu/java/net/protocol/jar/Handler.java
+ (parseURL): New method.
+ (toExternalForm): New method.
+
2003-12-18 Fernando Nasser <fnasser@redhat.com>
* java/awt/List.java (replaceItem): Prevent selection to move with
Index: gnu/java/net/protocol/jar/Handler.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/net/protocol/jar/Handler.java,v
retrieving revision 1.3
diff -u -b -B -r1.3 Handler.java
--- gnu/java/net/protocol/jar/Handler.java 26 Nov 2003 10:17:51 -0000 1.3
+++ gnu/java/net/protocol/jar/Handler.java 19 Dec 2003 09:47:32 -0000
@@ -68,4 +68,86 @@
{
return new Connection(url);
}
+
+ /**
+ * This method overrides URLStreamHandler's for parsing url of protocol "jar"
+ *
+ * @param url The URL object in which to store the results
+ * @param url_string The String-ized URL to parse
+ * @param start The position in the string to start scanning from
+ * @param end The position in the string to stop scanning
+ */
+ protected void parseURL (URL url, String url_string, int start, int end)
+ {
+ // This method does not throw an exception or return a value. Thus our
+ // strategy when we encounter an error in parsing is to return without
+ // doing anything.
+ String file = url.getFile();
+
+ if (file != null
+ && file != "")
+ { //has context url
+ url_string = url_string.substring (start, end);
+ if (url_string.startsWith("/"))
+ { //url string is an absolute path
+ int idx = file.lastIndexOf ("!/");
+ if (idx == -1) //context path is weird
+ file = file + "!" + url_string;
+ else
+ file = file.substring (0, idx + 1) + url_string;
+ }
+ else
+ {
+ int idx = file.lastIndexOf ("/");
+ if (idx == -1) //context path is weird
+ file = "/" + url_string;
+ else if (idx == (file.length() - 1))
+ //just concatenate two parts
+ file = file + url_string;
+ else
+ // according to Java API Documentation, here is a little different
+ // with URLStreamHandler.parseURL
+ // but JDK seems doesn't handle it well
+ file = file + "/" + url_string;
+ }
+
+ setURL (url, "jar", url.getHost(), url.getPort(), file, null);
+ return;
+ }
+
+ // Bunches of things should be true. Make sure.
+ if (end < start)
+ return;
+ if (end - start < 2)
+ return;
+ if (start > url_string.length())
+ return;
+
+ // Skip remains of protocol
+ url_string = url_string.substring (start, end);
+
+ if (!url.getProtocol().equals ("jar") )
+ return;
+
+ setURL (url, "jar", url.getHost(), url.getPort(), url_string, null);
+ }
+
+ /**
+ * This method converts a Jar URL object into a String.
+ *
+ * @param url The URL object to convert
+ */
+ protected String toExternalForm (URL url)
+ {
+ String file = url.getFile();
+
+ // return "jar:" + file;
+ // Performance!!:
+ // Do the concatenation manually to avoid resize StringBuffer's
+ // internal buffer.
+ StringBuffer sb = new StringBuffer (file.length() + 5);
+ sb.append ("jar:");
+ sb.append (file);
+ return sb.toString();
+ }
}