GNU Classpath merge.
2002-10-31 Stephen Crawley <crawley@dstc.edu.au> * java/lang/Double.java (valueOf): Return new Double(parseDouble(s)). 2002-10-31 Wu Gansha <gansha.wu@intel.com>: * java/util/ArrayList.java (readObject, writeObject): Only read/write size items. 2002-10-31 Wu Gansha <gansha.wu@intel.com>: * java/io/DataInputStream.java (convertFromUTF): Give StringBuffer an initial estimated size to avoid enlarge buffer frequently. 2002-10-31 Wu Gansha <gansha.wu@intel.com>: * java/lang/reflect/Proxy.java (ProxyType): Set loader to System ClassLoader when null. (ProxyType.hashCode): Loader null check no longer needed. (ProxyType.sameTypes): New method. (ProxyType.equals): Use new method. 2002-10-31 Mark Wielaard <mark@klomp.org> * java/net/URLDecoder.java (decode): Initialize Stringbuffer size to length of String. * java/net/URLEncoder.java (encode): Likewise. 2002-10-31 Mark Wielaard <mark@klomp.org> * java/util/zip/ZipInputStream.java (getNextEntry): Throw IOException when stream is closed. (closeEntry): Likewise. (read): Likewise. * java/util/zip/ZipOutputStream.java (putNextEntry): Throw ZipException when no entry active. (closeEntry): Likewise. (write): Likewise. From-SVN: r58772
This commit is contained in:
parent
c33c471beb
commit
de36f65dd1
9 changed files with 109 additions and 32 deletions
|
@ -1,3 +1,42 @@
|
||||||
|
2002-10-31 Stephen Crawley <crawley@dstc.edu.au>
|
||||||
|
|
||||||
|
* java/lang/Double.java (valueOf): Return new Double(parseDouble(s)).
|
||||||
|
|
||||||
|
2002-10-31 Wu Gansha <gansha.wu@intel.com>:
|
||||||
|
|
||||||
|
* java/util/ArrayList.java (readObject, writeObject): Only read/write
|
||||||
|
size items.
|
||||||
|
|
||||||
|
2002-10-31 Wu Gansha <gansha.wu@intel.com>:
|
||||||
|
|
||||||
|
* java/io/DataInputStream.java (convertFromUTF): Give StringBuffer an
|
||||||
|
initial estimated size to avoid enlarge buffer frequently.
|
||||||
|
|
||||||
|
2002-10-31 Wu Gansha <gansha.wu@intel.com>:
|
||||||
|
|
||||||
|
* java/lang/reflect/Proxy.java (ProxyType): Set loader to System
|
||||||
|
ClassLoader when null.
|
||||||
|
(ProxyType.hashCode): Loader null check no longer needed.
|
||||||
|
(ProxyType.sameTypes): New method.
|
||||||
|
(ProxyType.equals): Use new method.
|
||||||
|
|
||||||
|
2002-10-31 Mark Wielaard <mark@klomp.org>
|
||||||
|
|
||||||
|
* java/net/URLDecoder.java (decode): Initialize Stringbuffer size to
|
||||||
|
length of String.
|
||||||
|
* java/net/URLEncoder.java (encode): Likewise.
|
||||||
|
|
||||||
|
2002-10-31 Mark Wielaard <mark@klomp.org>
|
||||||
|
|
||||||
|
* java/util/zip/ZipInputStream.java (getNextEntry): Throw IOException
|
||||||
|
when stream is closed.
|
||||||
|
(closeEntry): Likewise.
|
||||||
|
(read): Likewise.
|
||||||
|
* java/util/zip/ZipOutputStream.java (putNextEntry): Throw
|
||||||
|
ZipException when no entry active.
|
||||||
|
(closeEntry): Likewise.
|
||||||
|
(write): Likewise.
|
||||||
|
|
||||||
2002-11-02 Tom Tromey <tromey@redhat.com>
|
2002-11-02 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* java/lang/Class.h: Move JV_STATE_ERROR before JV_STATE_DONE.
|
* java/lang/Class.h: Move JV_STATE_ERROR before JV_STATE_DONE.
|
||||||
|
|
|
@ -734,7 +734,9 @@ public class DataInputStream extends FilterInputStream implements DataInput
|
||||||
static String convertFromUTF(byte[] buf)
|
static String convertFromUTF(byte[] buf)
|
||||||
throws EOFException, UTFDataFormatException
|
throws EOFException, UTFDataFormatException
|
||||||
{
|
{
|
||||||
StringBuffer strbuf = new StringBuffer();
|
// Give StringBuffer an initial estimated size to avoid
|
||||||
|
// enlarge buffer frequently
|
||||||
|
StringBuffer strbuf = new StringBuffer(buf.length/2 + 2);
|
||||||
|
|
||||||
for (int i = 0; i < buf.length; )
|
for (int i = 0; i < buf.length; )
|
||||||
{
|
{
|
||||||
|
|
|
@ -191,10 +191,7 @@ public final class Double extends Number implements Comparable
|
||||||
*/
|
*/
|
||||||
public static Double valueOf(String s)
|
public static Double valueOf(String s)
|
||||||
{
|
{
|
||||||
// XXX just call new Double(parseDouble(s));
|
return new Double(parseDouble(s));
|
||||||
if (s == null)
|
|
||||||
throw new NullPointerException();
|
|
||||||
return new Double(s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -462,7 +462,6 @@ public class Proxy implements Serializable
|
||||||
private static native Class generateProxyClass0(ClassLoader loader,
|
private static native Class generateProxyClass0(ClassLoader loader,
|
||||||
ProxyData data);
|
ProxyData data);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper class for mapping unique ClassLoader and interface combinations
|
* Helper class for mapping unique ClassLoader and interface combinations
|
||||||
* to proxy classes.
|
* to proxy classes.
|
||||||
|
@ -490,6 +489,8 @@ public class Proxy implements Serializable
|
||||||
*/
|
*/
|
||||||
ProxyType(ClassLoader loader, Class[] interfaces)
|
ProxyType(ClassLoader loader, Class[] interfaces)
|
||||||
{
|
{
|
||||||
|
if (loader == null)
|
||||||
|
loader = ClassLoader.getSystemClassLoader();
|
||||||
this.loader = loader;
|
this.loader = loader;
|
||||||
this.interfaces = interfaces;
|
this.interfaces = interfaces;
|
||||||
}
|
}
|
||||||
|
@ -501,12 +502,56 @@ public class Proxy implements Serializable
|
||||||
*/
|
*/
|
||||||
public int hashCode()
|
public int hashCode()
|
||||||
{
|
{
|
||||||
int hash = (loader == null) ? 0 : loader.hashCode();
|
//loader is always not null
|
||||||
|
int hash = loader.hashCode();
|
||||||
for (int i = 0; i < interfaces.length; i++)
|
for (int i = 0; i < interfaces.length; i++)
|
||||||
hash = hash * 31 + interfaces[i].hashCode();
|
hash = hash * 31 + interfaces[i].hashCode();
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A more comprehensive comparison of two arrays,
|
||||||
|
// ignore array element order, and
|
||||||
|
// ignore redundant elements
|
||||||
|
private static boolean sameTypes(Class arr1[], Class arr2[]) {
|
||||||
|
if (arr1.length == 1 && arr2.length == 1) {
|
||||||
|
return arr1[0] == arr2[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
// total occurrance of elements of arr1 in arr2
|
||||||
|
int total_occ_of_arr1_in_arr2 = 0;
|
||||||
|
each_type:
|
||||||
|
for (int i = arr1.length; --i >= 0; )
|
||||||
|
{
|
||||||
|
Class t = arr1[i];
|
||||||
|
for (int j = i; --j >= 0; )
|
||||||
|
{
|
||||||
|
if (t == arr1[j])
|
||||||
|
{ //found duplicate type
|
||||||
|
continue each_type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// count c(a unique element of arr1)'s
|
||||||
|
// occurrences in arr2
|
||||||
|
int occ_in_arr2 = 0;
|
||||||
|
for (int j = arr2.length; --j >= 0; )
|
||||||
|
{
|
||||||
|
if (t == arr2[j])
|
||||||
|
{
|
||||||
|
++occ_in_arr2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (occ_in_arr2 == 0)
|
||||||
|
{ // t does not occur in arr2
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
total_occ_of_arr1_in_arr2 += occ_in_arr2;
|
||||||
|
}
|
||||||
|
// now, each element of arr2 must have been visited
|
||||||
|
return total_occ_of_arr1_in_arr2 == arr2.length;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates equality.
|
* Calculates equality.
|
||||||
*
|
*
|
||||||
|
@ -518,15 +563,10 @@ public class Proxy implements Serializable
|
||||||
ProxyType pt = (ProxyType) other;
|
ProxyType pt = (ProxyType) other;
|
||||||
if (loader != pt.loader || interfaces.length != pt.interfaces.length)
|
if (loader != pt.loader || interfaces.length != pt.interfaces.length)
|
||||||
return false;
|
return false;
|
||||||
int i = interfaces.length;
|
return sameTypes(interfaces, pt.interfaces);
|
||||||
while (--i >= 0)
|
|
||||||
if (interfaces[i] != pt.interfaces[i])
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
} // class ProxyType
|
} // class ProxyType
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper class which allows hashing of a method name and signature
|
* Helper class which allows hashing of a method name and signature
|
||||||
* without worrying about return type, declaring class, or throws clause,
|
* without worrying about return type, declaring class, or throws clause,
|
||||||
|
@ -681,7 +721,6 @@ public class Proxy implements Serializable
|
||||||
}
|
}
|
||||||
} // class ProxySignature
|
} // class ProxySignature
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A flat representation of all data needed to generate bytecode/instantiate
|
* A flat representation of all data needed to generate bytecode/instantiate
|
||||||
* a proxy class. This is basically a struct.
|
* a proxy class. This is basically a struct.
|
||||||
|
@ -820,7 +859,6 @@ public class Proxy implements Serializable
|
||||||
}
|
}
|
||||||
} // class ProxyData
|
} // class ProxyData
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does all the work of building a class. By making this a nested class,
|
* Does all the work of building a class. By making this a nested class,
|
||||||
* this code is not loaded in memory if the VM has a native
|
* this code is not loaded in memory if the VM has a native
|
||||||
|
|
|
@ -63,7 +63,7 @@ import java.io.UnsupportedEncodingException;
|
||||||
public class URLDecoder
|
public class URLDecoder
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Constructor for compatibility with Sun's JDK.
|
* Public contructor. Note that this class has only static methods.
|
||||||
*/
|
*/
|
||||||
public URLDecoder ()
|
public URLDecoder ()
|
||||||
{
|
{
|
||||||
|
@ -116,8 +116,6 @@ public class URLDecoder
|
||||||
public static String decode(String s, String encoding)
|
public static String decode(String s, String encoding)
|
||||||
throws UnsupportedEncodingException
|
throws UnsupportedEncodingException
|
||||||
{
|
{
|
||||||
StringBuffer result = new StringBuffer();
|
|
||||||
|
|
||||||
// First convert all '+' characters to spaces.
|
// First convert all '+' characters to spaces.
|
||||||
String str = s.replace('+', ' ');
|
String str = s.replace('+', ' ');
|
||||||
|
|
||||||
|
@ -126,6 +124,7 @@ public class URLDecoder
|
||||||
int start = 0;
|
int start = 0;
|
||||||
byte[] bytes = null;
|
byte[] bytes = null;
|
||||||
int length = str.length();
|
int length = str.length();
|
||||||
|
StringBuffer result = new StringBuffer(length);
|
||||||
while ((i = str.indexOf('%', start)) >= 0)
|
while ((i = str.indexOf('%', start)) >= 0)
|
||||||
{
|
{
|
||||||
// Add all non-encoded characters to the result buffer
|
// Add all non-encoded characters to the result buffer
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* URLEncoder.java -- Class to convert strings to a properly encoded URL
|
/* URLEncoder.java -- Class to convert strings to a properly encoded URL
|
||||||
Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GNU Classpath.
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ package java.net;
|
||||||
|
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Written using on-line Java Platform 1.2/1.4 API Specification, as well
|
* Written using on-line Java Platform 1.2/1.4 API Specification, as well
|
||||||
* as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
|
* as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
|
||||||
* Status: Believed complete and correct.
|
* Status: Believed complete and correct.
|
||||||
|
@ -102,11 +102,11 @@ public class URLEncoder
|
||||||
public static String encode(String s, String encoding)
|
public static String encode(String s, String encoding)
|
||||||
throws UnsupportedEncodingException
|
throws UnsupportedEncodingException
|
||||||
{
|
{
|
||||||
StringBuffer result = new StringBuffer();
|
|
||||||
int length = s.length();
|
int length = s.length();
|
||||||
int start = 0;
|
int start = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
|
StringBuffer result = new StringBuffer(length);
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
while ( i < length && isSafe(s.charAt(i)) )
|
while ( i < length && isSafe(s.charAt(i)) )
|
||||||
|
|
|
@ -558,7 +558,9 @@ public class ArrayList extends AbstractList
|
||||||
// We serialize unused list entries to preserve capacity.
|
// We serialize unused list entries to preserve capacity.
|
||||||
int len = data.length;
|
int len = data.length;
|
||||||
s.writeInt(len);
|
s.writeInt(len);
|
||||||
for (int i = 0; i < len; i++)
|
// it would be more efficient to just write "size" items,
|
||||||
|
// this need readObject read "size" items too.
|
||||||
|
for (int i = 0; i < size; i++)
|
||||||
s.writeObject(data[i]);
|
s.writeObject(data[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -578,7 +580,7 @@ public class ArrayList extends AbstractList
|
||||||
s.defaultReadObject();
|
s.defaultReadObject();
|
||||||
int capacity = s.readInt();
|
int capacity = s.readInt();
|
||||||
data = new Object[capacity];
|
data = new Object[capacity];
|
||||||
for (int i = 0; i < capacity; i++)
|
for (int i = 0; i < size; i++)
|
||||||
data[i] = s.readObject();
|
data[i] = s.readObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,7 +139,7 @@ public class ZipInputStream extends InflaterInputStream implements ZipConstants
|
||||||
public ZipEntry getNextEntry() throws IOException
|
public ZipEntry getNextEntry() throws IOException
|
||||||
{
|
{
|
||||||
if (crc == null)
|
if (crc == null)
|
||||||
throw new IllegalStateException("Closed.");
|
throw new IOException("Stream closed.");
|
||||||
if (entry != null)
|
if (entry != null)
|
||||||
closeEntry();
|
closeEntry();
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ public class ZipInputStream extends InflaterInputStream implements ZipConstants
|
||||||
public void closeEntry() throws IOException
|
public void closeEntry() throws IOException
|
||||||
{
|
{
|
||||||
if (crc == null)
|
if (crc == null)
|
||||||
throw new IllegalStateException("Closed.");
|
throw new IOException("Stream closed.");
|
||||||
if (entry == null)
|
if (entry == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -287,7 +287,7 @@ public class ZipInputStream extends InflaterInputStream implements ZipConstants
|
||||||
public int read(byte[] b, int off, int len) throws IOException
|
public int read(byte[] b, int off, int len) throws IOException
|
||||||
{
|
{
|
||||||
if (crc == null)
|
if (crc == null)
|
||||||
throw new IllegalStateException("Closed.");
|
throw new IOException("Stream closed.");
|
||||||
if (entry == null)
|
if (entry == null)
|
||||||
return -1;
|
return -1;
|
||||||
boolean finished = false;
|
boolean finished = false;
|
||||||
|
|
|
@ -158,12 +158,12 @@ public class ZipOutputStream extends DeflaterOutputStream implements ZipConstant
|
||||||
* is not set in the entry, the current time is used.
|
* is not set in the entry, the current time is used.
|
||||||
* @param entry the entry.
|
* @param entry the entry.
|
||||||
* @exception IOException if an I/O error occured.
|
* @exception IOException if an I/O error occured.
|
||||||
* @exception IllegalStateException if stream was finished
|
* @exception ZipException if stream was finished.
|
||||||
*/
|
*/
|
||||||
public void putNextEntry(ZipEntry entry) throws IOException
|
public void putNextEntry(ZipEntry entry) throws IOException
|
||||||
{
|
{
|
||||||
if (entries == null)
|
if (entries == null)
|
||||||
throw new IllegalStateException("ZipOutputStream was finished");
|
throw new ZipException("ZipOutputStream was finished");
|
||||||
|
|
||||||
int method = entry.getMethod();
|
int method = entry.getMethod();
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
|
@ -249,12 +249,12 @@ public class ZipOutputStream extends DeflaterOutputStream implements ZipConstant
|
||||||
/**
|
/**
|
||||||
* Closes the current entry.
|
* Closes the current entry.
|
||||||
* @exception IOException if an I/O error occured.
|
* @exception IOException if an I/O error occured.
|
||||||
* @exception IllegalStateException if no entry is active.
|
* @exception ZipException if no entry is active.
|
||||||
*/
|
*/
|
||||||
public void closeEntry() throws IOException
|
public void closeEntry() throws IOException
|
||||||
{
|
{
|
||||||
if (curEntry == null)
|
if (curEntry == null)
|
||||||
throw new IllegalStateException("No open entry");
|
throw new ZipException("No open entry");
|
||||||
|
|
||||||
/* First finish the deflater, if appropriate */
|
/* First finish the deflater, if appropriate */
|
||||||
if (curMethod == DEFLATED)
|
if (curMethod == DEFLATED)
|
||||||
|
@ -300,12 +300,12 @@ public class ZipOutputStream extends DeflaterOutputStream implements ZipConstant
|
||||||
/**
|
/**
|
||||||
* Writes the given buffer to the current entry.
|
* Writes the given buffer to the current entry.
|
||||||
* @exception IOException if an I/O error occured.
|
* @exception IOException if an I/O error occured.
|
||||||
* @exception IllegalStateException if no entry is active.
|
* @exception ZipException if no entry is active.
|
||||||
*/
|
*/
|
||||||
public void write(byte[] b, int off, int len) throws IOException
|
public void write(byte[] b, int off, int len) throws IOException
|
||||||
{
|
{
|
||||||
if (curEntry == null)
|
if (curEntry == null)
|
||||||
throw new IllegalStateException("No open entry.");
|
throw new ZipException("No open entry.");
|
||||||
|
|
||||||
switch (curMethod)
|
switch (curMethod)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue