Merged gcj-eclipse branch to trunk.
From-SVN: r120621
This commit is contained in:
parent
c648dedbde
commit
97b8365caf
17478 changed files with 606493 additions and 100744 deletions
|
@ -1,5 +1,5 @@
|
|||
/* gnu.java.net.protocol.jar.Handler - jar protocol handler for java.net
|
||||
Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
|
@ -45,6 +45,9 @@ import java.net.MalformedURLException;
|
|||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.net.URLStreamHandler;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
/**
|
||||
* @author Kresten Krab Thorup (krab@gnu.org)
|
||||
|
@ -114,7 +117,7 @@ public class Handler extends URLStreamHandler
|
|||
file = file.substring(0, idx + 1) + url_string;
|
||||
}
|
||||
|
||||
setURL (url, "jar", url.getHost(), url.getPort(), file, null);
|
||||
setURL (url, "jar", url.getHost(), url.getPort(), flat(file), null);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -148,6 +151,45 @@ public class Handler extends URLStreamHandler
|
|||
setURL (url, "jar", url.getHost(), url.getPort(), url_string, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes the given jar url string 'flat' by removing any . and .. from
|
||||
* jar file path because ZipFile entries can only handle flat paths.
|
||||
* Inside jar files '/' is always the path separator.
|
||||
*/
|
||||
private static String flat(String url_string)
|
||||
{
|
||||
int jar_stop = url_string.indexOf("!/");
|
||||
String jar_path = url_string.substring(jar_stop + 1, url_string.length());
|
||||
|
||||
if (jar_path.indexOf("/.") < 0)
|
||||
return url_string;
|
||||
|
||||
ArrayList tokens = new ArrayList();
|
||||
StringTokenizer st = new StringTokenizer(jar_path, "/");
|
||||
while (st.hasMoreTokens())
|
||||
{
|
||||
String token = st.nextToken();
|
||||
if (token.equals("."))
|
||||
continue;
|
||||
else if (token.equals(".."))
|
||||
{
|
||||
if (! tokens.isEmpty())
|
||||
tokens.remove(tokens.size() - 1);
|
||||
}
|
||||
else
|
||||
tokens.add(token);
|
||||
}
|
||||
|
||||
StringBuffer path = new StringBuffer(url_string.length());
|
||||
path.append(url_string.substring(0, jar_stop + 1));
|
||||
|
||||
Iterator it = tokens.iterator();
|
||||
while (it.hasNext())
|
||||
path.append('/').append(it.next());
|
||||
|
||||
return path.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method converts a Jar URL object into a String.
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue