summaryrefslogtreecommitdiff
path: root/libjava/classpath/gnu/java/io
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/gnu/java/io')
-rw-r--r--libjava/classpath/gnu/java/io/ASN1ParsingException.java56
-rw-r--r--libjava/classpath/gnu/java/io/Base64InputStream.java220
-rw-r--r--libjava/classpath/gnu/java/io/ClassLoaderObjectInputStream.java73
-rw-r--r--libjava/classpath/gnu/java/io/NullOutputStream.java56
-rw-r--r--libjava/classpath/gnu/java/io/ObjectIdentityMap2Int.java292
-rw-r--r--libjava/classpath/gnu/java/io/ObjectIdentityWrapper.java100
-rw-r--r--libjava/classpath/gnu/java/io/PlatformHelper.java129
-rw-r--r--libjava/classpath/gnu/java/io/package.html46
8 files changed, 972 insertions, 0 deletions
diff --git a/libjava/classpath/gnu/java/io/ASN1ParsingException.java b/libjava/classpath/gnu/java/io/ASN1ParsingException.java
new file mode 100644
index 000000000..9cf98abd3
--- /dev/null
+++ b/libjava/classpath/gnu/java/io/ASN1ParsingException.java
@@ -0,0 +1,56 @@
+/* ASN1ParsingException.java -- ASN.1 parsing exception.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.io;
+
+/**
+ * Signals a malformed ASN.1 sequence.
+ */
+public class ASN1ParsingException extends java.io.IOException
+{
+
+ public ASN1ParsingException()
+ {
+ super();
+ }
+
+ public ASN1ParsingException(String msg)
+ {
+ super(msg);
+ }
+}
diff --git a/libjava/classpath/gnu/java/io/Base64InputStream.java b/libjava/classpath/gnu/java/io/Base64InputStream.java
new file mode 100644
index 000000000..1105b6022
--- /dev/null
+++ b/libjava/classpath/gnu/java/io/Base64InputStream.java
@@ -0,0 +1,220 @@
+/* Base64InputStream.java -- base-64 input stream.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.io;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * A filter input stream that decodes data encoded in the Base-64
+ * encoding scheme.
+ *
+ * @author Casey Marshall (rsdio@metastatic.org)
+ */
+public class Base64InputStream extends FilterInputStream
+{
+
+ // Constants and fields.
+ // ------------------------------------------------------------------------
+
+ /** Base-64 digits. */
+ private static final String BASE_64 =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+ /** Base-64 padding character. */
+ private static final char BASE_64_PAD = '=';
+
+ /** Decoding state. */
+ private int state;
+
+ /** Intermediate decoded value. */
+ private int temp;
+
+ /** EOF flag. */
+ private boolean eof;
+
+ private final byte[] one = new byte[1];
+
+ // Constructors.
+ // ------------------------------------------------------------------------
+
+ /**
+ * Create a new Base-64 input stream. The input bytes must be the
+ * ASCII characters A-Z, a-z, 0-9, + and /, with optional whitespace,
+ * and will be decoded into a byte stream.
+ *
+ * @param in The source of Base-64 input.
+ */
+ public Base64InputStream(InputStream in)
+ {
+ super(in);
+ state = 0;
+ temp = 0;
+ eof = false;
+ }
+
+ // Class method.
+ // ------------------------------------------------------------------------
+
+ /**
+ * Decode a single Base-64 string to a byte array.
+ *
+ * @param base64 The Base-64 encoded data.
+ * @return The decoded bytes.
+ * @throws IOException If the given data do not compose a valid Base-64
+ * sequence.
+ */
+ public static byte[] decode(String base64) throws IOException
+ {
+ Base64InputStream in =
+ new Base64InputStream(new ByteArrayInputStream(base64.getBytes()));
+ ByteArrayOutputStream out =
+ new ByteArrayOutputStream((int) (base64.length() / 0.666));
+ byte[] buf = new byte[1024];
+ int len;
+ while ((len = in.read(buf)) != -1)
+ out.write(buf, 0, len);
+ return out.toByteArray();
+ }
+
+ // Instance methods.
+ // ------------------------------------------------------------------------
+
+ public int available()
+ {
+ return 0;
+ }
+
+ public int read() throws IOException
+ {
+ if (read(one) == 1)
+ return one[0];
+ return -1;
+ }
+
+ public int read(byte[] buf, int off, int len) throws IOException
+ {
+ if (eof)
+ return -1;
+ int count = 0;
+ while (count < len)
+ {
+ int i;
+ while (Character.isWhitespace((char) (i = in.read())))
+ ;
+
+ int pos = BASE_64.indexOf((char) i);
+ if (pos >= 0)
+ {
+ switch (state)
+ {
+ case 0:
+ temp = pos << 2;
+ state = 1;
+ break;
+ case 1:
+ buf[count++] = (byte) (temp | (pos >>> 4));
+ temp = (pos & 0x0F) << 4;
+ state = 2;
+ break;
+ case 2:
+ buf[count++] = (byte) (temp | (pos >>> 2));
+ temp = (pos & 0x03) << 6;
+ state = 3;
+ break;
+ case 3:
+ buf[count++] = (byte) (temp | pos);
+ state = 0;
+ break;
+ }
+ }
+ else if (i == BASE_64_PAD)
+ {
+ switch (state)
+ {
+ case 0:
+ case 1:
+ throw new IOException("malformed Base-64 input");
+ case 2:
+ while (Character.isWhitespace((char) (i = in.read())))
+ ;
+ if (i != BASE_64_PAD)
+ throw new IOException("malformed Base-64 input");
+ case 3:
+ while (Character.isWhitespace((char) (i = in.read())))
+ ;
+ }
+ eof = true;
+ break;
+ }
+ else // First non-Base-64 character, consider it end-of-stream.
+ {
+ if (state != 0)
+ throw new IOException("malformed Base-64 input");
+ eof = true;
+ break;
+ }
+ }
+ return count;
+ }
+
+ public boolean markSupported()
+ {
+ return false;
+ }
+
+ public void mark(int markLimit) { }
+
+ public void reset() throws IOException
+ {
+ throw new IOException("reset not supported");
+ }
+
+ public long skip(long n) throws IOException
+ {
+ long skipped;
+ for (skipped = 0; skipped < n; skipped++)
+ if (read() == -1)
+ break;
+ return skipped;
+ }
+}
diff --git a/libjava/classpath/gnu/java/io/ClassLoaderObjectInputStream.java b/libjava/classpath/gnu/java/io/ClassLoaderObjectInputStream.java
new file mode 100644
index 000000000..e3f3d4c42
--- /dev/null
+++ b/libjava/classpath/gnu/java/io/ClassLoaderObjectInputStream.java
@@ -0,0 +1,73 @@
+/* gnu.java.io.ClassLoaderObjectInputStream
+ Copyright (C) 1998 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.StreamCorruptedException;
+
+/**
+ * ClassLoaderObjectInputStream is ObjectInputStream, with
+ * the ability to use a specific ClassLoader.
+ *
+ * @author Geoff Berry
+ * @version 1.1.0, 29 Jul 1998
+ */
+
+public class ClassLoaderObjectInputStream extends ObjectInputStream {
+ ClassLoader myClassLoader;
+
+ /** Create the new ClassLoaderObjectInputStream.
+ * @param in the InputStream to read the Objects from.
+ * @param myClassLoader the ClassLoader to load classes
+ * with.
+ */
+ public ClassLoaderObjectInputStream(InputStream in, ClassLoader myClassLoader) throws IOException,StreamCorruptedException {
+ super(in);
+ this.myClassLoader = myClassLoader;
+ }
+
+ /** Overriden method to use the loadClass() method from
+ * the ClassLoader.
+ */
+ public Class resolveClass(String name) throws IOException, ClassNotFoundException {
+ return myClassLoader.loadClass(name);
+ }
+}
diff --git a/libjava/classpath/gnu/java/io/NullOutputStream.java b/libjava/classpath/gnu/java/io/NullOutputStream.java
new file mode 100644
index 000000000..603a2d3dd
--- /dev/null
+++ b/libjava/classpath/gnu/java/io/NullOutputStream.java
@@ -0,0 +1,56 @@
+/* NullOutputStream.java -- OutputStream that does absolutely nothing
+ Copyright (C) 1998 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.io;
+
+import java.io.OutputStream;
+
+/**
+ This is a placeholder OutputStream that does absolutley nothing
+ when written to. It is intended to be used in the same manner as
+ /dev/null. None of this class's methods do anything at all.
+*/
+public class NullOutputStream extends OutputStream
+{
+ public NullOutputStream() {}
+ public void write( int b ) {}
+ public void write( byte b[] ) {}
+ public void write( byte b[], int off, int len ) {}
+ public void flush() {}
+ public void close() {}
+}
diff --git a/libjava/classpath/gnu/java/io/ObjectIdentityMap2Int.java b/libjava/classpath/gnu/java/io/ObjectIdentityMap2Int.java
new file mode 100644
index 000000000..ed62e8381
--- /dev/null
+++ b/libjava/classpath/gnu/java/io/ObjectIdentityMap2Int.java
@@ -0,0 +1,292 @@
+/* ObjectIdentityMapToInt.java -- Helper class for faster serialization
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.io;
+
+/**
+ * This class provides a map from Object to non-negative int values.
+ * Objects are considered equal only if their references are equal.
+ *
+ * This can be used to equip objects with an integer id. This class
+ * is implemented to use as little memory as possible, particularly
+ * not to create hashtable buckets and Integer instances for each
+ * mapping.
+ *
+ * @author Fridtjof Siebert (siebert@aicas.com)
+ */
+public class ObjectIdentityMap2Int
+{
+
+
+ /**
+ * Prime numbers used as size of array. We need the size to be a
+ * prime number since the delta used for conflict resulution must
+ * not have any common divisors with the length.
+ */
+ private static final int[] PRIMES = {
+ 0x1f,
+ 0x3d,
+ 0x7f,
+ 0xfb,
+ 0x1fd,
+ 0x3fd,
+ 0x7f7,
+ 0xffd,
+ 0x1fff,
+ 0x3ffd,
+ 0x7fed,
+ 0xfff1,
+ 0x1ffff,
+ 0x3fffb,
+ 0x7ffff,
+ 0xffffd,
+ 0x1ffff7,
+ 0x3ffffd,
+ 0x7ffff1,
+ 0xfffffd,
+ 0x1ffffd9,
+ 0x3fffffb,
+ 0x7ffffd9,
+ 0xfffffc7,
+ 0x1ffffffd,
+ 0x3fffffdd,
+ 0x7fffffff};
+
+
+ /**
+ * Object to be used instead of "null"
+ */
+ private static final Object NIL = new Object();
+
+
+ /**
+ * The objects in this map:
+ *
+ * invariant
+ * objectTable.size == PRIMES[cap]
+ */
+ private Object[] objectTable;
+
+
+ /**
+ * The corresponding integer ids.
+ *
+ * invariant
+ * intTable.size == PRIMES[cap]
+ */
+ private int[] intTable;
+
+
+ /**
+ * The number of entries in this map.
+ *
+ * invariant
+ * size < limit
+ */
+ private int size = 0;
+
+
+ /**
+ * The index in primes of the size of the tables.
+ */
+ private int cap = 0;
+
+
+ /**
+ * The limit for size at which the table size is increased.
+ *
+ * invariant
+ * limit = PRIMES[cap] / 4 * 3;
+ */
+ private int limit = 0;
+
+
+ /**
+ * Constructs an empty <code>ObjectIdentityMap2Int</code>.
+ */
+ public ObjectIdentityMap2Int()
+ {
+ alloc(0);
+ }
+
+
+ /**
+ * Helper function to alloc the object and int array for the given
+ * capacity. Set limit, reset size to 0.
+ *
+ * No elements will be stored in the newly allocated arrays.
+ *
+ * @param c the capacity: this is an index in PRIMES, PRIMES[c]
+ * gives the size of the arrays.
+ *
+ * @throws InternalError if c >= PRIMES.length (in this case, a
+ * normal Hashtable would throw an OutOfMemoryError or a
+ * NegativeArraySizeException since the array size exceeds the range
+ * of positive integers).
+ */
+ private void alloc(int c)
+ {
+ if (c >= PRIMES.length)
+ throw new InternalError("Hash table size overflow");
+
+ cap = c;
+ int len = PRIMES[c];
+ objectTable = new Object[len];
+ intTable = new int[len];
+ limit = len / 4 * 3;
+
+ size = 0;
+ }
+
+
+ /**
+ * Add a mapping to this Map.
+ *
+ * ensures
+ * (get(o) == i);
+ *
+ * @param o object reference or null that is to be mapped.
+ *
+ * @param i the integer id to be associated with o
+ *
+ * @throws IllegalArgumentException if i<0
+ *
+ * @throws InternalError if hash tables has grown to more then
+ * 0x7fffffff entries (ie., size >= 0x7fffffff*3/4).
+ */
+ public void put(Object o, int i)
+ {
+ if (i < 0)
+ throw new IllegalArgumentException("int argument must be postive: "+i);
+
+ o = (o == null) ? NIL : o;
+ int s = slot(o);
+ Object[] ot = objectTable;
+ intTable[s] = i;
+ if (objectTable[s] == null)
+ {
+ objectTable[s] = o;
+ size++;
+ if (size >= limit)
+ {
+ rehash();
+ }
+ }
+ }
+
+
+ /**
+ * Helper function to find the index of a free or existing slot for
+ * object o
+ *
+ * ensure
+ * ((objectTable[result] != null) IMPLIES (objectTable[result] == o));
+ *
+ * @param o an object, must not be null.
+ *
+ * @return an index of o
+ */
+ private int slot(Object o)
+ {
+ Object[] ot = objectTable;
+ int hc = System.identityHashCode(o);
+ int len = ot.length;
+ int result = hc % len;
+ result = result < 0 ? -result : result;
+ int delta = 16 - (hc & 15);
+ Object existing = ot[result];
+ while ((existing != null) && (existing != o))
+ {
+ result += delta;
+ if (result >= len)
+ result -= len;
+ existing = ot[result];
+ }
+ return result;
+ }
+
+
+ /**
+ * Helper function for put() to increaes the capacity of this table
+ * to the next size (approx. double the size). Keep the mapping and
+ * the size unchanged.
+ *
+ * ensure
+ * (cap == \old cap+1);
+ */
+ private void rehash()
+ {
+ Object[] ot = objectTable;
+ int [] it = intTable;
+ alloc(cap + 1);
+
+ for (int i = 0; i < ot.length; i++)
+ put(ot[i], it[i]);
+ }
+
+
+ /**
+ * Obtain an element from this map
+ *
+ * @param o an object or null
+ *
+ * @return the corresponding integer id for o or -1 if o has not
+ * been put into this map.
+ */
+ public int get(Object o)
+ {
+ o = (o == null) ? NIL : o;
+ int s = slot(o);
+ return objectTable[s] == null ? -1 : intTable[s];
+ }
+
+ /**
+ * Clear this map
+ *
+ * ensures
+ * ((size == 0) && \forall Object o: get(o) == -1)
+ */
+ public void clear()
+ {
+ Object[] ot = objectTable;
+ size = 0;
+ for (int i = 0; i < ot.length; i++)
+ ot[i] = null;
+ }
+
+}
diff --git a/libjava/classpath/gnu/java/io/ObjectIdentityWrapper.java b/libjava/classpath/gnu/java/io/ObjectIdentityWrapper.java
new file mode 100644
index 000000000..53c9943de
--- /dev/null
+++ b/libjava/classpath/gnu/java/io/ObjectIdentityWrapper.java
@@ -0,0 +1,100 @@
+/* ObjectIdentityWrapper.java -- Wrapper class used to override equals()
+ and hashCode() to be as discriminating as possible
+ Copyright (C) 1998 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.java.io;
+
+/**
+ This class is a thin wrapper around <code>Object</code> that makes
+ the methods <code>hashCode()</code> and <code>equals(Object)</code>
+ as discriminating as possible.
+*/
+public class ObjectIdentityWrapper
+{
+
+ /**
+ Constructs a <code>ObjectIdentityWrapper</code> that is wrapped
+ around o.
+ */
+ public ObjectIdentityWrapper( Object o )
+ {
+ object = o;
+ }
+
+ /**
+ Uses <code>System.identityHashCode(Object)</code> to compute a
+ hash code for the object wrapped by this
+ <code>ObjectIdentityWrapper</code>.
+
+ @see java.lang.System#identityHashCode(java.lang.Object)
+ @see java.util.Hashtable
+ @see java.lang.Object#hashCode()
+ */
+ public int hashCode()
+ {
+ return System.identityHashCode( object );
+ }
+
+ /**
+ Uses the <code>==</code> operator to test for equality between
+ the object wrapped by this <code>ObjectIdentityWrapper</code> and
+ the object wrapped by the <code>ObjectIdentityWrapper</code> o.
+ Returns false if o is not a <code>ObjectIdentityWrapper</code>.
+
+ @see java.util.Hashtable
+ @see java.lang.Object#equals()
+ */
+ public boolean equals( Object o )
+ {
+ if( o instanceof ObjectIdentityWrapper )
+ return object == ((ObjectIdentityWrapper)o).object;
+ else
+ return false;
+ }
+
+ public String toString()
+ {
+ return "ObjectIdentityWrapper< " + object + ", " + hashCode() + " >";
+ }
+
+ /**
+ The <code>Object</code> wrapped by this
+ <code>ObjectIdentityWrapper</code>.
+ */
+ public Object object;
+}
diff --git a/libjava/classpath/gnu/java/io/PlatformHelper.java b/libjava/classpath/gnu/java/io/PlatformHelper.java
new file mode 100644
index 000000000..545241110
--- /dev/null
+++ b/libjava/classpath/gnu/java/io/PlatformHelper.java
@@ -0,0 +1,129 @@
+/* PlatformHelper.java -- Isolate OS-specific IO helper methods and variables
+ Copyright (C) 1998, 2002, 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package gnu.java.io;
+
+/**
+ * We had many changes in File.java, URLStreamHandler.java etc. to handle
+ * path representations on different platforms (Windows/Unix-family).
+ * Finally we'd like to collect all these ad hoc codes into this utility class.
+ * --Gansha
+ */
+public class PlatformHelper
+{
+ public static final boolean isWindows = System.getProperty("os.name").indexOf("Windows") >= 0;
+ public static final String separator = System.getProperty("file.separator");
+ public static final char separatorChar = separator.charAt(0);
+ public static final String pathSeparator = System.getProperty("path.separator");
+ public static final char pathSeparatorChar = pathSeparator.charAt(0);
+
+ /**
+ * On most platforms 260 is equal or greater than a max path value,
+ * so we can set the initial buffer size of StringBuffer to half of this value
+ * to improve performance.
+ */
+ public static final int INITIAL_MAX_PATH = 260/2;
+
+ /**
+ * This routine checks the input param "path" whether it begins with root path
+ * prefix.
+ * if not, return 0;
+ * if yes, return the len of root path prefix;
+ * --for Unix-family platform, root path begins with "/" and len is 1
+ * --for Windows platform, root path begins with "drive:\\" and len is 3
+ */
+ public static final int beginWithRootPathPrefix(String path)
+ {
+ if (path.startsWith("/") || path.startsWith("\\"))
+ return 1;
+
+ if (!isWindows)
+ return 0;
+
+ if (path.length() > 2
+ && Character.isLetter(path.charAt(0))
+ && path.charAt(1) == ':'
+ && (path.charAt(2) == '/' || path.charAt(2) == '\\'))
+ return 3;
+
+ return 0;
+ }
+
+ /**
+ * This routine checks the input param "path" whether it's root directory.
+ * --for Unix-family platform, root directory is "/"
+ * --for Windows platform, root directory is "\\" or "drive:\\".
+ */
+ public static final boolean isRootDirectory(String path)
+ {
+ int len = path.length();
+ return len > 0 && beginWithRootPathPrefix(path) == len;
+ }
+
+ /**
+ * This routine checks whether input param "path" ends with separator
+ */
+ public static final boolean endWithSeparator(String path)
+ {
+ if (path.endsWith("\\") || path.endsWith("/"))
+ return true;
+
+ return false;
+ }
+
+ /**
+ * This routine removes from input param "path" the tail separator if it exists,
+ * and return the remain part.
+ */
+ public static final String removeTailSeparator(String path)
+ {
+ if (endWithSeparator(path) && !isRootDirectory(path))
+ return path.substring(0, path.length() - 1);
+
+ return path;
+ }
+
+ /**
+ * This routine returns last index of separator in input param "path",
+ * and return it.
+ */
+ public static final int lastIndexOfSeparator(String path)
+ {
+ return Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\"));
+ }
+
+}
diff --git a/libjava/classpath/gnu/java/io/package.html b/libjava/classpath/gnu/java/io/package.html
new file mode 100644
index 000000000..74da8277f
--- /dev/null
+++ b/libjava/classpath/gnu/java/io/package.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!-- package.html - describes classes in gnu.java.io package.
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. -->
+
+<html>
+<head><title>GNU Classpath - gnu.java.io</title></head>
+
+<body>
+<p></p>
+
+</body>
+</html>