mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-29 23:04:12 +08:00
Connection.java (unquote): New method.
2005-07-13 Andrew Haley <aph@redhat.com> * gnu/java/net/protocol/file/Connection.java (unquote): New method. (connect): Unquote filename. gnu/java/net/protocol/jar/Connection.java (getInputStream): Likewise. (getJarFile): Likewise. * java/net/URLConnection.java (getContentHandler): Guard cast with instaceof. * java/net/URL.java (URL): If the file part of a spec is absolute, ignore the file part of its context. From-SVN: r102029
This commit is contained in:
parent
b11e14262e
commit
3fefd0193c
@ -1,3 +1,18 @@
|
||||
2005-07-14 Andrew Haley <aph@redhat.com>
|
||||
|
||||
* gnu/java/net/protocol/file/Connection.java (unquote): New
|
||||
method.
|
||||
(connect): Unquote filename.
|
||||
gnu/java/net/protocol/jar/Connection.java (getInputStream):
|
||||
Likewise.
|
||||
(getJarFile): Likewise.
|
||||
|
||||
* java/net/URLConnection.java (getContentHandler): Guard cast with
|
||||
instaceof.
|
||||
|
||||
* java/net/URL.java (URL): If the file part of a spec is absolute,
|
||||
ignore the file part of its context.
|
||||
|
||||
2005-07-14 Aaron Luchko <aluchko@redhat.com>
|
||||
|
||||
* gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java:
|
||||
|
@ -59,6 +59,7 @@ import java.security.Permission;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
import java.net.MalformedURLException;
|
||||
|
||||
/**
|
||||
* This subclass of java.net.URLConnection models a URLConnection via
|
||||
@ -124,6 +125,54 @@ public class Connection extends URLConnection
|
||||
permission = new FilePermission(getURL().getFile(), DEFAULT_PERMISSION);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unquote "%" + hex quotes characters
|
||||
*
|
||||
* @param str The string to unquote or null.
|
||||
*
|
||||
* @return The unquoted string or null if str was null.
|
||||
*
|
||||
* @exception MalformedURLException If the given string contains invalid
|
||||
* escape sequences.
|
||||
*
|
||||
* Sadly the same as URI.unquote, but there's nothing we can do to
|
||||
* make it accessible.
|
||||
*
|
||||
*/
|
||||
public static String unquote(String str) throws MalformedURLException
|
||||
{
|
||||
if (str == null)
|
||||
return null;
|
||||
byte[] buf = new byte[str.length()];
|
||||
int pos = 0;
|
||||
for (int i = 0; i < str.length(); i++)
|
||||
{
|
||||
char c = str.charAt(i);
|
||||
if (c > 127)
|
||||
throw new MalformedURLException(str + " : Invalid character");
|
||||
if (c == '%')
|
||||
{
|
||||
if (i + 2 >= str.length())
|
||||
throw new MalformedURLException(str + " : Invalid quoted character");
|
||||
int hi = Character.digit(str.charAt(++i), 16);
|
||||
int lo = Character.digit(str.charAt(++i), 16);
|
||||
if (lo < 0 || hi < 0)
|
||||
throw new MalformedURLException(str + " : Invalid quoted character");
|
||||
buf[pos++] = (byte) (hi * 16 + lo);
|
||||
}
|
||||
else
|
||||
buf[pos++] = (byte) c;
|
||||
}
|
||||
try
|
||||
{
|
||||
return new String(buf, 0, pos, "utf-8");
|
||||
}
|
||||
catch (java.io.UnsupportedEncodingException x2)
|
||||
{
|
||||
throw (Error) new InternalError().initCause(x2);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* "Connects" to the file by opening it.
|
||||
*/
|
||||
@ -134,7 +183,7 @@ public class Connection extends URLConnection
|
||||
return;
|
||||
|
||||
// If not connected, then file needs to be openned.
|
||||
file = new File (getURL().getFile());
|
||||
file = new File (unquote(getURL().getFile()));
|
||||
|
||||
if (! file.isDirectory())
|
||||
{
|
||||
|
@ -151,7 +151,8 @@ public final class Connection extends JarURLConnection
|
||||
if (jarfile != null)
|
||||
{
|
||||
// this is the easy way...
|
||||
ZipEntry entry = jarfile.getEntry(getEntryName());
|
||||
ZipEntry entry = jarfile.getEntry
|
||||
(gnu.java.net.protocol.file.Connection.unquote(getEntryName()));
|
||||
|
||||
if (entry != null)
|
||||
return jarfile.getInputStream (entry);
|
||||
@ -164,12 +165,14 @@ public final class Connection extends JarURLConnection
|
||||
JarInputStream zis = new JarInputStream(
|
||||
jarFileURLConnection.getInputStream ());
|
||||
|
||||
String entryName = gnu.java.net.protocol.file.Connection.unquote(getEntryName());
|
||||
|
||||
// This is hideous, we're doing a linear search...
|
||||
for (ZipEntry entry = zis.getNextEntry();
|
||||
entry != null;
|
||||
entry = zis.getNextEntry())
|
||||
{
|
||||
if (getEntryName().equals(entry.getName()))
|
||||
if (entryName.equals(entry.getName()))
|
||||
{
|
||||
int size = (int) entry.getSize();
|
||||
byte[] data = new byte[size];
|
||||
@ -203,12 +206,14 @@ public final class Connection extends JarURLConnection
|
||||
jar_file = (JarFile) file_cache.get (jarFileURL);
|
||||
if (jar_file == null)
|
||||
{
|
||||
jar_file = new JarFile (jarFileURL.getFile());
|
||||
jar_file = new JarFile
|
||||
(gnu.java.net.protocol.file.Connection.unquote(jarFileURL.getFile()));
|
||||
file_cache.put (jarFileURL, jar_file);
|
||||
}
|
||||
}
|
||||
else
|
||||
jar_file = new JarFile (jarFileURL.getFile());
|
||||
jar_file = new JarFile
|
||||
(gnu.java.net.protocol.file.Connection.unquote(jarFileURL.getFile()));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -408,10 +408,7 @@ public final class URL implements Serializable
|
||||
// The 1.2 doc specifically says these are copied to the new URL.
|
||||
host = context.host;
|
||||
port = context.port;
|
||||
file = context.file;
|
||||
userInfo = context.userInfo;
|
||||
if (file == null || file.length() == 0)
|
||||
file = "/";
|
||||
authority = context.authority;
|
||||
}
|
||||
}
|
||||
@ -423,10 +420,13 @@ public final class URL implements Serializable
|
||||
protocol = context.protocol;
|
||||
host = context.host;
|
||||
port = context.port;
|
||||
file = context.file;
|
||||
userInfo = context.userInfo;
|
||||
if (file == null || file.length() == 0)
|
||||
file = "/";
|
||||
if (spec.indexOf(":/", 1) < 0)
|
||||
{
|
||||
file = context.file;
|
||||
if (file == null || file.length() == 0)
|
||||
file = "/";
|
||||
}
|
||||
authority = context.authority;
|
||||
}
|
||||
else // Protocol NOT specified in spec. and no context available.
|
||||
|
@ -983,17 +983,22 @@ public abstract class URLConnection
|
||||
if (contentType == null || contentType.equals(""))
|
||||
return null;
|
||||
|
||||
ContentHandler handler;
|
||||
ContentHandler handler = null;
|
||||
|
||||
// See if a handler has been cached for this content type.
|
||||
// For efficiency, if a content type has been searched for but not
|
||||
// found, it will be in the hash table but as the contentType String
|
||||
// instead of a ContentHandler.
|
||||
if ((handler = (ContentHandler) handlers.get(contentType)) != null)
|
||||
if (handler instanceof ContentHandler)
|
||||
return handler;
|
||||
else
|
||||
return null;
|
||||
{
|
||||
Object cachedHandler;
|
||||
if ((cachedHandler = handlers.get(contentType)) != null)
|
||||
{
|
||||
if (cachedHandler instanceof ContentHandler)
|
||||
return (ContentHandler)cachedHandler;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// If a non-default factory has been set, use it.
|
||||
if (factory != null)
|
||||
|
Loading…
Reference in New Issue
Block a user