aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/util/zip
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2005-07-16 01:27:14 +0000
committerTom Tromey <tromey@gcc.gnu.org>2005-07-16 01:27:14 +0000
commitb0fa81eea9a270f23d6ad67ca7a6d25c18d20da1 (patch)
tree8762d1f992e2f725a6bde1ff966ed6f1e5f4f823 /libjava/java/util/zip
parentea54b29342c8506acb4f858c68340c44b72e3532 (diff)
downloadgcc-b0fa81eea9a270f23d6ad67ca7a6d25c18d20da1.zip
gcc-b0fa81eea9a270f23d6ad67ca7a6d25c18d20da1.tar.gz
gcc-b0fa81eea9a270f23d6ad67ca7a6d25c18d20da1.tar.bz2
Major merge with Classpath.
Removed many duplicate files. * HACKING: Updated.x * classpath: Imported new directory. * standard.omit: New file. * Makefile.in, aclocal.m4, configure: Rebuilt. * sources.am: New file. * configure.ac: Run Classpath configure script. Moved code around to support. Disable xlib AWT peers (temporarily). * Makefile.am (SUBDIRS): Added 'classpath' (JAVAC): Removed. (AM_CPPFLAGS): Added more -I options. (BOOTCLASSPATH): Simplified. Completely redid how sources are built. Include sources.am. * include/Makefile.am (tool_include__HEADERS): Removed jni.h. * include/jni.h: Removed (in Classpath). * scripts/classes.pl: Updated to look at built classes. * scripts/makemake.tcl: New file. * testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Added -I options. (gcj_jni_invocation_compile_c_to_binary): Likewise. From-SVN: r102082
Diffstat (limited to 'libjava/java/util/zip')
-rw-r--r--libjava/java/util/zip/Adler32.java205
-rw-r--r--libjava/java/util/zip/CRC32.java132
-rw-r--r--libjava/java/util/zip/CheckedInputStream.java135
-rw-r--r--libjava/java/util/zip/CheckedOutputStream.java100
-rw-r--r--libjava/java/util/zip/Checksum.java86
-rw-r--r--libjava/java/util/zip/DataFormatException.java71
-rw-r--r--libjava/java/util/zip/ZipConstants.java97
-rw-r--r--libjava/java/util/zip/ZipException.java72
-rw-r--r--libjava/java/util/zip/ZipInputStream.java371
-rw-r--r--libjava/java/util/zip/ZipOutputStream.java399
10 files changed, 0 insertions, 1668 deletions
diff --git a/libjava/java/util/zip/Adler32.java b/libjava/java/util/zip/Adler32.java
deleted file mode 100644
index 7c41138..0000000
--- a/libjava/java/util/zip/Adler32.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/* Adler32.java - Computes Adler32 data checksum of a data stream
- Copyright (C) 1999, 2000, 2001 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 java.util.zip;
-
-/*
- * Written using on-line Java Platform 1.2 API Specification, as well
- * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
- * The actual Adler32 algorithm is taken from RFC 1950.
- * Status: Believed complete and correct.
- */
-
-/**
- * Computes Adler32 checksum for a stream of data. An Adler32
- * checksum is not as reliable as a CRC32 checksum, but a lot faster to
- * compute.
- *<p>
- * The specification for Adler32 may be found in RFC 1950.
- * (ZLIB Compressed Data Format Specification version 3.3)
- *<p>
- *<p>
- * From that document:
- *<p>
- * "ADLER32 (Adler-32 checksum)
- * This contains a checksum value of the uncompressed data
- * (excluding any dictionary data) computed according to Adler-32
- * algorithm. This algorithm is a 32-bit extension and improvement
- * of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073
- * standard.
- *<p>
- * Adler-32 is composed of two sums accumulated per byte: s1 is
- * the sum of all bytes, s2 is the sum of all s1 values. Both sums
- * are done modulo 65521. s1 is initialized to 1, s2 to zero. The
- * Adler-32 checksum is stored as s2*65536 + s1 in most-
- * significant-byte first (network) order."
- *<p>
- * "8.2. The Adler-32 algorithm
- *<p>
- * The Adler-32 algorithm is much faster than the CRC32 algorithm yet
- * still provides an extremely low probability of undetected errors.
- *<p>
- * The modulo on unsigned long accumulators can be delayed for 5552
- * bytes, so the modulo operation time is negligible. If the bytes
- * are a, b, c, the second sum is 3a + 2b + c + 3, and so is position
- * and order sensitive, unlike the first sum, which is just a
- * checksum. That 65521 is prime is important to avoid a possible
- * large class of two-byte errors that leave the check unchanged.
- * (The Fletcher checksum uses 255, which is not prime and which also
- * makes the Fletcher check insensitive to single byte changes 0 <->
- * 255.)
- *<p>
- * The sum s1 is initialized to 1 instead of zero to make the length
- * of the sequence part of s2, so that the length does not have to be
- * checked separately. (Any sequence of zeroes has a Fletcher
- * checksum of zero.)"
- *
- * @author John Leuner, Per Bothner
- * @since JDK 1.1
- *
- * @see InflaterInputStream
- * @see DeflaterOutputStream
- */
-public class Adler32 implements Checksum
-{
-
- /** largest prime smaller than 65536 */
- private static final int BASE = 65521;
-
- private int checksum; //we do all in int.
-
- //Note that java doesn't have unsigned integers,
- //so we have to be careful with what arithmetic
- //we do. We return the checksum as a long to
- //avoid sign confusion.
-
- /**
- * Creates a new instance of the <code>Adler32</code> class.
- * The checksum starts off with a value of 1.
- */
- public Adler32 ()
- {
- reset();
- }
-
- /**
- * Resets the Adler32 checksum to the initial value.
- */
- public void reset ()
- {
- checksum = 1; //Initialize to 1
- }
-
- /**
- * Updates the checksum with the byte b.
- *
- * @param bval the data value to add. The high byte of the int is ignored.
- */
- public void update (int bval)
- {
- //We could make a length 1 byte array and call update again, but I
- //would rather not have that overhead
- int s1 = checksum & 0xffff;
- int s2 = checksum >>> 16;
-
- s1 = (s1 + (bval & 0xFF)) % BASE;
- s2 = (s1 + s2) % BASE;
-
- checksum = (s2 << 16) + s1;
- }
-
- /**
- * Updates the checksum with the bytes taken from the array.
- *
- * @param buffer an array of bytes
- */
- public void update (byte[] buffer)
- {
- update(buffer, 0, buffer.length);
- }
-
- /**
- * Updates the checksum with the bytes taken from the array.
- *
- * @param buf an array of bytes
- * @param off the start of the data used for this update
- * @param len the number of bytes to use for this update
- */
- public void update (byte[] buf, int off, int len)
- {
- //(By Per Bothner)
- int s1 = checksum & 0xffff;
- int s2 = checksum >>> 16;
-
- while (len > 0)
- {
- // We can defer the modulo operation:
- // s1 maximally grows from 65521 to 65521 + 255 * 3800
- // s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31
- int n = 3800;
- if (n > len)
- n = len;
- len -= n;
- while (--n >= 0)
- {
- s1 = s1 + (buf[off++] & 0xFF);
- s2 = s2 + s1;
- }
- s1 %= BASE;
- s2 %= BASE;
- }
-
- /*Old implementation, borrowed from somewhere:
- int n;
-
- while (len-- > 0) {
-
- s1 = (s1 + (bs[offset++] & 0xff)) % BASE;
- s2 = (s2 + s1) % BASE;
- }*/
-
- checksum = (s2 << 16) | s1;
- }
-
- /**
- * Returns the Adler32 data checksum computed so far.
- */
- public long getValue()
- {
- return (long) checksum & 0xffffffffL;
- }
-}
diff --git a/libjava/java/util/zip/CRC32.java b/libjava/java/util/zip/CRC32.java
deleted file mode 100644
index 1c2b397..0000000
--- a/libjava/java/util/zip/CRC32.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/* CRC32.java - Computes CRC32 data checksum of a data stream
- Copyright (C) 1999. 2000, 2001 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 java.util.zip;
-
-/*
- * Written using on-line Java Platform 1.2 API Specification, as well
- * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
- * The actual CRC32 algorithm is taken from RFC 1952.
- * Status: Believed complete and correct.
- */
-
-/**
- * Computes CRC32 data checksum of a data stream.
- * The actual CRC32 algorithm is described in RFC 1952
- * (GZIP file format specification version 4.3).
- * Can be used to get the CRC32 over a stream if used with checked input/output
- * streams.
- *
- * @see InflaterInputStream
- * @see DeflaterOutputStream
- *
- * @author Per Bothner
- * @date April 1, 1999.
- */
-public class CRC32 implements Checksum
-{
- /** The crc data checksum so far. */
- private int crc = 0;
-
- /** The fast CRC table. Computed once when the CRC32 class is loaded. */
- private static int[] crc_table = make_crc_table();
-
- /** Make the table for a fast CRC. */
- private static int[] make_crc_table ()
- {
- int[] crc_table = new int[256];
- for (int n = 0; n < 256; n++)
- {
- int c = n;
- for (int k = 8; --k >= 0; )
- {
- if ((c & 1) != 0)
- c = 0xedb88320 ^ (c >>> 1);
- else
- c = c >>> 1;
- }
- crc_table[n] = c;
- }
- return crc_table;
- }
-
- /**
- * Returns the CRC32 data checksum computed so far.
- */
- public long getValue ()
- {
- return (long) crc & 0xffffffffL;
- }
-
- /**
- * Resets the CRC32 data checksum as if no update was ever called.
- */
- public void reset () { crc = 0; }
-
- /**
- * Updates the checksum with the int bval.
- *
- * @param bval (the byte is taken as the lower 8 bits of bval)
- */
-
- public void update (int bval)
- {
- int c = ~crc;
- c = crc_table[(c ^ bval) & 0xff] ^ (c >>> 8);
- crc = ~c;
- }
-
- /**
- * Adds the byte array to the data checksum.
- *
- * @param buf the buffer which contains the data
- * @param off the offset in the buffer where the data starts
- * @param len the length of the data
- */
- public void update (byte[] buf, int off, int len)
- {
- int c = ~crc;
- while (--len >= 0)
- c = crc_table[(c ^ buf[off++]) & 0xff] ^ (c >>> 8);
- crc = ~c;
- }
-
- /**
- * Adds the complete byte array to the data checksum.
- */
- public void update (byte[] buf) { update(buf, 0, buf.length); }
-}
diff --git a/libjava/java/util/zip/CheckedInputStream.java b/libjava/java/util/zip/CheckedInputStream.java
deleted file mode 100644
index d743fbb..0000000
--- a/libjava/java/util/zip/CheckedInputStream.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/* CheckedInputStream.java - Compute checksum of data being read
- Copyright (C) 1999, 2000, 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 java.util.zip;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/* Written using on-line Java Platform 1.2 API Specification
- * and JCL book.
- * Believed complete and correct.
- */
-
-/**
- * InputStream that computes a checksum of the data being read using a
- * supplied Checksum object.
- *
- * @see Checksum
- *
- * @author Tom Tromey
- * @date May 17, 1999
- */
-public class CheckedInputStream extends FilterInputStream
-{
- /**
- * Creates a new CheckInputStream on top of the supplied OutputStream
- * using the supplied Checksum.
- */
- public CheckedInputStream (InputStream in, Checksum sum)
- {
- super (in);
- this.sum = sum;
- }
-
- /**
- * Returns the Checksum object used. To get the data checksum computed so
- * far call <code>getChecksum.getValue()</code>.
- */
- public Checksum getChecksum ()
- {
- return sum;
- }
-
- /**
- * Reads one byte, updates the checksum and returns the read byte
- * (or -1 when the end of file was reached).
- */
- public int read () throws IOException
- {
- int x = in.read();
- if (x != -1)
- sum.update(x);
- return x;
- }
-
- /**
- * Reads at most len bytes in the supplied buffer and updates the checksum
- * with it. Returns the number of bytes actually read or -1 when the end
- * of file was reached.
- */
- public int read (byte[] buf, int off, int len) throws IOException
- {
- int r = in.read(buf, off, len);
- if (r != -1)
- sum.update(buf, off, r);
- return r;
- }
-
- /**
- * Skips n bytes by reading them in a temporary buffer and updating the
- * the checksum with that buffer. Returns the actual number of bytes skiped
- * which can be less then requested when the end of file is reached.
- */
- public long skip (long n) throws IOException
- {
- if (n == 0)
- return 0;
-
- int min = (int) Math.min(n, 1024);
- byte[] buf = new byte[min];
-
- long s = 0;
- while (n > 0)
- {
- int r = in.read(buf, 0, min);
- if (r == -1)
- break;
- n -= r;
- s += r;
- min = (int) Math.min(n, 1024);
- sum.update(buf, 0, r);
- }
-
- return s;
- }
-
- /** The checksum object. */
- private Checksum sum;
-}
diff --git a/libjava/java/util/zip/CheckedOutputStream.java b/libjava/java/util/zip/CheckedOutputStream.java
deleted file mode 100644
index a3c1929..0000000
--- a/libjava/java/util/zip/CheckedOutputStream.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/* CheckedOutputStream.java - Compute checksum of data being written.
- Copyright (C) 1999, 2000 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 java.util.zip;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/* Written using on-line Java Platform 1.2 API Specification
- * and JCL book.
- * Believed complete and correct.
- */
-
-/**
- * OutputStream that computes a checksum of data being written using a
- * supplied Checksum object.
- *
- * @see Checksum
- *
- * @author Tom Tromey
- * @date May 17, 1999
- */
-public class CheckedOutputStream extends FilterOutputStream
-{
- /**
- * Creates a new CheckInputStream on top of the supplied OutputStream
- * using the supplied Checksum.
- */
- public CheckedOutputStream (OutputStream out, Checksum cksum)
- {
- super (out);
- this.sum = cksum;
- }
-
- /**
- * Returns the Checksum object used. To get the data checksum computed so
- * far call <code>getChecksum.getValue()</code>.
- */
- public Checksum getChecksum ()
- {
- return sum;
- }
-
- /**
- * Writes one byte to the OutputStream and updates the Checksum.
- */
- public void write (int bval) throws IOException
- {
- out.write(bval);
- sum.update(bval);
- }
-
- /**
- * Writes the byte array to the OutputStream and updates the Checksum.
- */
- public void write (byte[] buf, int off, int len) throws IOException
- {
- out.write(buf, off, len);
- sum.update(buf, off, len);
- }
-
- /** The checksum object. */
- private Checksum sum;
-}
diff --git a/libjava/java/util/zip/Checksum.java b/libjava/java/util/zip/Checksum.java
deleted file mode 100644
index 3342ba3..0000000
--- a/libjava/java/util/zip/Checksum.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Checksum.java - Interface to compute a data checksum
- Copyright (C) 1999, 2000, 2001 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 java.util.zip;
-
-/*
- * Written using on-line Java Platform 1.2 API Specification, as well
- * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
- * Status: Believed complete and correct.
- */
-
-/**
- * Interface to compute a data checksum used by checked input/output streams.
- * A data checksum can be updated by one byte or with a byte array. After each
- * update the value of the current checksum can be returned by calling
- * <code>getValue</code>. The complete checksum object can also be reset
- * so it can be used again with new data.
- *
- * @see CheckedInputStream
- * @see CheckedOutputStream
- *
- * @author Per Bothner
- * @author Jochen Hoenicke
- */
-public interface Checksum
-{
- /**
- * Returns the data checksum computed so far.
- */
- long getValue();
-
- /**
- * Resets the data checksum as if no update was ever called.
- */
- void reset();
-
- /**
- * Adds one byte to the data checksum.
- *
- * @param bval the data value to add. The high byte of the int is ignored.
- */
- void update (int bval);
-
- /**
- * Adds the byte array to the data checksum.
- *
- * @param buf the buffer which contains the data
- * @param off the offset in the buffer where the data starts
- * @param len the length of the data
- */
- void update (byte[] buf, int off, int len);
-}
diff --git a/libjava/java/util/zip/DataFormatException.java b/libjava/java/util/zip/DataFormatException.java
deleted file mode 100644
index dc5b10d..0000000
--- a/libjava/java/util/zip/DataFormatException.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/* DataformatException.java -- thrown when compressed data is corrupt
- Copyright (C) 1999, 2000, 2001, 2002 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 java.util.zip;
-
-/**
- * Exception thrown when compressed data is corrupt.
- *
- * @author Tom Tromey
- * @author John Leuner
- * @since 1.1
- * @status updated to 1.4
- */
-public class DataFormatException extends Exception
-{
- /**
- * Compatible with JDK 1.1+.
- */
- private static final long serialVersionUID = 2219632870893641452L;
-
- /**
- * Create an exception without a message.
- */
- public DataFormatException()
- {
- }
-
- /**
- * Create an exception with a message.
- *
- * @param msg the message
- */
- public DataFormatException(String msg)
- {
- super(msg);
- }
-}
diff --git a/libjava/java/util/zip/ZipConstants.java b/libjava/java/util/zip/ZipConstants.java
deleted file mode 100644
index 952a44d..0000000
--- a/libjava/java/util/zip/ZipConstants.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/* java.util.zip.ZipConstants
- Copyright (C) 2001 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 java.util.zip;
-
-interface ZipConstants
-{
- /* The local file header */
- int LOCHDR = 30;
- int LOCSIG = 'P'|('K'<<8)|(3<<16)|(4<<24);
-
- int LOCVER = 4;
- int LOCFLG = 6;
- int LOCHOW = 8;
- int LOCTIM = 10;
- int LOCCRC = 14;
- int LOCSIZ = 18;
- int LOCLEN = 22;
- int LOCNAM = 26;
- int LOCEXT = 28;
-
- /* The Data descriptor */
- int EXTSIG = 'P'|('K'<<8)|(7<<16)|(8<<24);
- int EXTHDR = 16;
-
- int EXTCRC = 4;
- int EXTSIZ = 8;
- int EXTLEN = 12;
-
- /* The central directory file header */
- int CENSIG = 'P'|('K'<<8)|(1<<16)|(2<<24);
- int CENHDR = 46;
-
- int CENVEM = 4;
- int CENVER = 6;
- int CENFLG = 8;
- int CENHOW = 10;
- int CENTIM = 12;
- int CENCRC = 16;
- int CENSIZ = 20;
- int CENLEN = 24;
- int CENNAM = 28;
- int CENEXT = 30;
- int CENCOM = 32;
- int CENDSK = 34;
- int CENATT = 36;
- int CENATX = 38;
- int CENOFF = 42;
-
- /* The entries in the end of central directory */
- int ENDSIG = 'P'|('K'<<8)|(5<<16)|(6<<24);
- int ENDHDR = 22;
-
- /* The following two fields are missing in SUN JDK */
- int ENDNRD = 4;
- int ENDDCD = 6;
- int ENDSUB = 8;
- int ENDTOT = 10;
- int ENDSIZ = 12;
- int ENDOFF = 16;
- int ENDCOM = 20;
-}
-
diff --git a/libjava/java/util/zip/ZipException.java b/libjava/java/util/zip/ZipException.java
deleted file mode 100644
index c5bfc1e..0000000
--- a/libjava/java/util/zip/ZipException.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/* ZipException.java - exception representing a zip related error
- Copyright (C) 1998, 1999, 2000, 2001, 2002 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 java.util.zip;
-
-import java.io.IOException;
-
-/**
- * Thrown during the creation or input of a zip file.
- *
- * @author Jochen Hoenicke
- * @author Per Bothner
- * @status updated to 1.4
- */
-public class ZipException extends IOException
-{
- /**
- * Compatible with JDK 1.0+.
- */
- private static final long serialVersionUID = 8000196834066748623L;
-
- /**
- * Create an exception without a message.
- */
- public ZipException()
- {
- }
-
- /**
- * Create an exception with a message.
- *
- * @param msg the message
- */
- public ZipException (String msg)
- {
- super(msg);
- }
-}
diff --git a/libjava/java/util/zip/ZipInputStream.java b/libjava/java/util/zip/ZipInputStream.java
deleted file mode 100644
index 5732523..0000000
--- a/libjava/java/util/zip/ZipInputStream.java
+++ /dev/null
@@ -1,371 +0,0 @@
-/* ZipInputStream.java --
- Copyright (C) 2001, 2002, 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 java.util.zip;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * This is a FilterInputStream that reads the files in an zip archive
- * one after another. It has a special method to get the zip entry of
- * the next file. The zip entry contains information about the file name
- * size, compressed size, CRC, etc.
- *
- * It includes support for STORED and DEFLATED entries.
- *
- * @author Jochen Hoenicke
- */
-public class ZipInputStream extends InflaterInputStream implements ZipConstants
-{
- private CRC32 crc = new CRC32();
- private ZipEntry entry = null;
-
- private int csize;
- private int size;
- private int method;
- private int flags;
- private int avail;
- private boolean entryAtEOF;
-
- /**
- * Creates a new Zip input stream, reading a zip archive.
- */
- public ZipInputStream(InputStream in)
- {
- super(in, new Inflater(true));
- }
-
- private void fillBuf() throws IOException
- {
- avail = len = in.read(buf, 0, buf.length);
- }
-
- private int readBuf(byte[] out, int offset, int length) throws IOException
- {
- if (avail <= 0)
- {
- fillBuf();
- if (avail <= 0)
- return -1;
- }
- if (length > avail)
- length = avail;
- System.arraycopy(buf, len - avail, out, offset, length);
- avail -= length;
- return length;
- }
-
- private void readFully(byte[] out) throws IOException
- {
- int off = 0;
- int len = out.length;
- while (len > 0)
- {
- int count = readBuf(out, off, len);
- if (count == -1)
- throw new EOFException();
- off += count;
- len -= count;
- }
- }
-
- private int readLeByte() throws IOException
- {
- if (avail <= 0)
- {
- fillBuf();
- if (avail <= 0)
- throw new ZipException("EOF in header");
- }
- return buf[len - avail--] & 0xff;
- }
-
- /**
- * Read an unsigned short in little endian byte order.
- */
- private int readLeShort() throws IOException
- {
- return readLeByte() | (readLeByte() << 8);
- }
-
- /**
- * Read an int in little endian byte order.
- */
- private int readLeInt() throws IOException
- {
- return readLeShort() | (readLeShort() << 16);
- }
-
- /**
- * Open the next entry from the zip archive, and return its description.
- * If the previous entry wasn't closed, this method will close it.
- */
- public ZipEntry getNextEntry() throws IOException
- {
- if (crc == null)
- throw new IOException("Stream closed.");
- if (entry != null)
- closeEntry();
-
- int header = readLeInt();
- if (header == CENSIG)
- {
- /* Central Header reached. */
- close();
- return null;
- }
- if (header != LOCSIG)
- throw new ZipException("Wrong Local header signature: "
- + Integer.toHexString(header));
- /* skip version */
- readLeShort();
- flags = readLeShort();
- method = readLeShort();
- int dostime = readLeInt();
- int crc = readLeInt();
- csize = readLeInt();
- size = readLeInt();
- int nameLen = readLeShort();
- int extraLen = readLeShort();
-
- if (method == ZipOutputStream.STORED && csize != size)
- throw new ZipException("Stored, but compressed != uncompressed");
-
-
- byte[] buffer = new byte[nameLen];
- readFully(buffer);
- String name = new String(buffer);
-
- entry = createZipEntry(name);
- entryAtEOF = false;
- entry.setMethod(method);
- if ((flags & 8) == 0)
- {
- entry.setCrc(crc & 0xffffffffL);
- entry.setSize(size & 0xffffffffL);
- entry.setCompressedSize(csize & 0xffffffffL);
- }
- entry.setDOSTime(dostime);
- if (extraLen > 0)
- {
- byte[] extra = new byte[extraLen];
- readFully(extra);
- entry.setExtra(extra);
- }
-
- if (method == ZipOutputStream.DEFLATED && avail > 0)
- {
- System.arraycopy(buf, len - avail, buf, 0, avail);
- len = avail;
- avail = 0;
- inf.setInput(buf, 0, len);
- }
- return entry;
- }
-
- private void readDataDescr() throws IOException
- {
- if (readLeInt() != EXTSIG)
- throw new ZipException("Data descriptor signature not found");
- entry.setCrc(readLeInt() & 0xffffffffL);
- csize = readLeInt();
- size = readLeInt();
- entry.setSize(size & 0xffffffffL);
- entry.setCompressedSize(csize & 0xffffffffL);
- }
-
- /**
- * Closes the current zip entry and moves to the next one.
- */
- public void closeEntry() throws IOException
- {
- if (crc == null)
- throw new IOException("Stream closed.");
- if (entry == null)
- return;
-
- if (method == ZipOutputStream.DEFLATED)
- {
- if ((flags & 8) != 0)
- {
- /* We don't know how much we must skip, read until end. */
- byte[] tmp = new byte[2048];
- while (read(tmp) > 0)
- ;
- /* read will close this entry */
- return;
- }
- csize -= inf.getTotalIn();
- avail = inf.getRemaining();
- }
-
- if (avail > csize && csize >= 0)
- avail -= csize;
- else
- {
- csize -= avail;
- avail = 0;
- while (csize != 0)
- {
- long skipped = in.skip(csize & 0xffffffffL);
- if (skipped <= 0)
- throw new ZipException("zip archive ends early.");
- csize -= skipped;
- }
- }
-
- size = 0;
- crc.reset();
- if (method == ZipOutputStream.DEFLATED)
- inf.reset();
- entry = null;
- entryAtEOF = true;
- }
-
- public int available() throws IOException
- {
- return entryAtEOF ? 0 : 1;
- }
-
- /**
- * Reads a byte from the current zip entry.
- * @return the byte or -1 on EOF.
- * @exception IOException if a i/o error occured.
- * @exception ZipException if the deflated stream is corrupted.
- */
- public int read() throws IOException
- {
- byte[] b = new byte[1];
- if (read(b, 0, 1) <= 0)
- return -1;
- return b[0] & 0xff;
- }
-
- /**
- * Reads a block of bytes from the current zip entry.
- * @return the number of bytes read (may be smaller, even before
- * EOF), or -1 on EOF.
- * @exception IOException if a i/o error occured.
- * @exception ZipException if the deflated stream is corrupted.
- */
- public int read(byte[] b, int off, int len) throws IOException
- {
- if (len == 0)
- return 0;
- if (crc == null)
- throw new IOException("Stream closed.");
- if (entry == null)
- return -1;
- boolean finished = false;
- switch (method)
- {
- case ZipOutputStream.DEFLATED:
- len = super.read(b, off, len);
- if (len < 0)
- {
- if (!inf.finished())
- throw new ZipException("Inflater not finished!?");
- avail = inf.getRemaining();
- if ((flags & 8) != 0)
- readDataDescr();
-
- if (inf.getTotalIn() != csize
- || inf.getTotalOut() != size)
- throw new ZipException("size mismatch: "+csize+";"+size+" <-> "+inf.getTotalIn()+";"+inf.getTotalOut());
- inf.reset();
- finished = true;
- }
- break;
-
- case ZipOutputStream.STORED:
-
- if (len > csize && csize >= 0)
- len = csize;
-
- len = readBuf(b, off, len);
- if (len > 0)
- {
- csize -= len;
- size -= len;
- }
-
- if (csize == 0)
- finished = true;
- else if (len < 0)
- throw new ZipException("EOF in stored block");
- break;
- }
-
- if (len > 0)
- crc.update(b, off, len);
-
- if (finished)
- {
- if ((crc.getValue() & 0xffffffffL) != entry.getCrc())
- throw new ZipException("CRC mismatch");
- crc.reset();
- entry = null;
- entryAtEOF = true;
- }
- return len;
- }
-
- /**
- * Closes the zip file.
- * @exception IOException if a i/o error occured.
- */
- public void close() throws IOException
- {
- super.close();
- crc = null;
- entry = null;
- entryAtEOF = true;
- }
-
- /**
- * Creates a new zip entry for the given name. This is equivalent
- * to new ZipEntry(name).
- * @param name the name of the zip entry.
- */
- protected ZipEntry createZipEntry(String name)
- {
- return new ZipEntry(name);
- }
-}
diff --git a/libjava/java/util/zip/ZipOutputStream.java b/libjava/java/util/zip/ZipOutputStream.java
deleted file mode 100644
index 5699ff0..0000000
--- a/libjava/java/util/zip/ZipOutputStream.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/* ZipOutputStream.java --
- Copyright (C) 2001, 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 java.util.zip;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Enumeration;
-import java.util.Vector;
-
-/**
- * This is a FilterOutputStream that writes the files into a zip
- * archive one after another. It has a special method to start a new
- * zip entry. The zip entries contains information about the file name
- * size, compressed size, CRC, etc.
- *
- * It includes support for STORED and DEFLATED entries.
- *
- * This class is not thread safe.
- *
- * @author Jochen Hoenicke
- */
-public class ZipOutputStream extends DeflaterOutputStream implements ZipConstants
-{
- private Vector entries = new Vector();
- private CRC32 crc = new CRC32();
- private ZipEntry curEntry = null;
-
- private int curMethod;
- private int size;
- private int offset = 0;
-
- private byte[] zipComment = new byte[0];
- private int defaultMethod = DEFLATED;
-
- /**
- * Our Zip version is hard coded to 1.0 resp. 2.0
- */
- private static final int ZIP_STORED_VERSION = 10;
- private static final int ZIP_DEFLATED_VERSION = 20;
-
- /**
- * Compression method. This method doesn't compress at all.
- */
- public static final int STORED = 0;
-
- /**
- * Compression method. This method uses the Deflater.
- */
- public static final int DEFLATED = 8;
-
- /**
- * Creates a new Zip output stream, writing a zip archive.
- * @param out the output stream to which the zip archive is written.
- */
- public ZipOutputStream(OutputStream out)
- {
- super(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true));
- }
-
- /**
- * Set the zip file comment.
- * @param comment the comment.
- * @exception IllegalArgumentException if encoding of comment is
- * longer than 0xffff bytes.
- */
- public void setComment(String comment)
- {
- byte[] commentBytes;
- commentBytes = comment.getBytes();
- if (commentBytes.length > 0xffff)
- throw new IllegalArgumentException("Comment too long.");
- zipComment = commentBytes;
- }
-
- /**
- * Sets default compression method. If the Zip entry specifies
- * another method its method takes precedence.
- * @param method the method.
- * @exception IllegalArgumentException if method is not supported.
- * @see #STORED
- * @see #DEFLATED
- */
- public void setMethod(int method)
- {
- if (method != STORED && method != DEFLATED)
- throw new IllegalArgumentException("Method not supported.");
- defaultMethod = method;
- }
-
- /**
- * Sets default compression level. The new level will be activated
- * immediately.
- * @exception IllegalArgumentException if level is not supported.
- * @see Deflater
- */
- public void setLevel(int level)
- {
- def.setLevel(level);
- }
-
- /**
- * Write an unsigned short in little endian byte order.
- */
- private void writeLeShort(int value) throws IOException
- {
- out.write(value & 0xff);
- out.write((value >> 8) & 0xff);
- }
-
- /**
- * Write an int in little endian byte order.
- */
- private void writeLeInt(int value) throws IOException
- {
- writeLeShort(value);
- writeLeShort(value >> 16);
- }
-
- /**
- * Starts a new Zip entry. It automatically closes the previous
- * entry if present. If the compression method is stored, the entry
- * must have a valid size and crc, otherwise all elements (except
- * name) are optional, but must be correct if present. If the time
- * is not set in the entry, the current time is used.
- * @param entry the entry.
- * @exception IOException if an I/O error occured.
- * @exception ZipException if stream was finished.
- */
- public void putNextEntry(ZipEntry entry) throws IOException
- {
- if (entries == null)
- throw new ZipException("ZipOutputStream was finished");
-
- int method = entry.getMethod();
- int flags = 0;
- if (method == -1)
- method = defaultMethod;
-
- if (method == STORED)
- {
- if (entry.getCompressedSize() >= 0)
- {
- if (entry.getSize() < 0)
- entry.setSize(entry.getCompressedSize());
- else if (entry.getSize() != entry.getCompressedSize())
- throw new ZipException
- ("Method STORED, but compressed size != size");
- }
- else
- entry.setCompressedSize(entry.getSize());
-
- if (entry.getSize() < 0)
- throw new ZipException("Method STORED, but size not set");
- if (entry.getCrc() < 0)
- throw new ZipException("Method STORED, but crc not set");
- }
- else if (method == DEFLATED)
- {
- if (entry.getCompressedSize() < 0
- || entry.getSize() < 0 || entry.getCrc() < 0)
- flags |= 8;
- }
-
- if (curEntry != null)
- closeEntry();
-
- if (entry.getTime() < 0)
- entry.setTime(System.currentTimeMillis());
-
- entry.flags = flags;
- entry.offset = offset;
- entry.setMethod(method);
- curMethod = method;
- /* Write the local file header */
- writeLeInt(LOCSIG);
- writeLeShort(method == STORED
- ? ZIP_STORED_VERSION : ZIP_DEFLATED_VERSION);
- writeLeShort(flags);
- writeLeShort(method);
- writeLeInt(entry.getDOSTime());
- if ((flags & 8) == 0)
- {
- writeLeInt((int)entry.getCrc());
- writeLeInt((int)entry.getCompressedSize());
- writeLeInt((int)entry.getSize());
- }
- else
- {
- writeLeInt(0);
- writeLeInt(0);
- writeLeInt(0);
- }
- byte[] name = entry.getName().getBytes();
- if (name.length > 0xffff)
- throw new ZipException("Name too long.");
- byte[] extra = entry.getExtra();
- if (extra == null)
- extra = new byte[0];
- writeLeShort(name.length);
- writeLeShort(extra.length);
- out.write(name);
- out.write(extra);
-
- offset += LOCHDR + name.length + extra.length;
-
- /* Activate the entry. */
-
- curEntry = entry;
- crc.reset();
- if (method == DEFLATED)
- def.reset();
- size = 0;
- }
-
- /**
- * Closes the current entry.
- * @exception IOException if an I/O error occured.
- * @exception ZipException if no entry is active.
- */
- public void closeEntry() throws IOException
- {
- if (curEntry == null)
- throw new ZipException("No open entry");
-
- /* First finish the deflater, if appropriate */
- if (curMethod == DEFLATED)
- super.finish();
-
- int csize = curMethod == DEFLATED ? def.getTotalOut() : size;
-
- if (curEntry.getSize() < 0)
- curEntry.setSize(size);
- else if (curEntry.getSize() != size)
- throw new ZipException("size was "+size
- +", but I expected "+curEntry.getSize());
-
- if (curEntry.getCompressedSize() < 0)
- curEntry.setCompressedSize(csize);
- else if (curEntry.getCompressedSize() != csize)
- throw new ZipException("compressed size was "+csize
- +", but I expected "+curEntry.getSize());
-
- if (curEntry.getCrc() < 0)
- curEntry.setCrc(crc.getValue());
- else if (curEntry.getCrc() != crc.getValue())
- throw new ZipException("crc was " + Long.toHexString(crc.getValue())
- + ", but I expected "
- + Long.toHexString(curEntry.getCrc()));
-
- offset += csize;
-
- /* Now write the data descriptor entry if needed. */
- if (curMethod == DEFLATED && (curEntry.flags & 8) != 0)
- {
- writeLeInt(EXTSIG);
- writeLeInt((int)curEntry.getCrc());
- writeLeInt((int)curEntry.getCompressedSize());
- writeLeInt((int)curEntry.getSize());
- offset += EXTHDR;
- }
-
- entries.addElement(curEntry);
- curEntry = null;
- }
-
- /**
- * Writes the given buffer to the current entry.
- * @exception IOException if an I/O error occured.
- * @exception ZipException if no entry is active.
- */
- public void write(byte[] b, int off, int len) throws IOException
- {
- if (curEntry == null)
- throw new ZipException("No open entry.");
-
- switch (curMethod)
- {
- case DEFLATED:
- super.write(b, off, len);
- break;
-
- case STORED:
- out.write(b, off, len);
- break;
- }
-
- crc.update(b, off, len);
- size += len;
- }
-
- /**
- * Finishes the stream. This will write the central directory at the
- * end of the zip file and flush the stream.
- * @exception IOException if an I/O error occured.
- */
- public void finish() throws IOException
- {
- if (entries == null)
- return;
- if (curEntry != null)
- closeEntry();
-
- int numEntries = 0;
- int sizeEntries = 0;
-
- Enumeration e = entries.elements();
- while (e.hasMoreElements())
- {
- ZipEntry entry = (ZipEntry) e.nextElement();
-
- int method = entry.getMethod();
- writeLeInt(CENSIG);
- writeLeShort(method == STORED
- ? ZIP_STORED_VERSION : ZIP_DEFLATED_VERSION);
- writeLeShort(method == STORED
- ? ZIP_STORED_VERSION : ZIP_DEFLATED_VERSION);
- writeLeShort(entry.flags);
- writeLeShort(method);
- writeLeInt(entry.getDOSTime());
- writeLeInt((int)entry.getCrc());
- writeLeInt((int)entry.getCompressedSize());
- writeLeInt((int)entry.getSize());
-
- byte[] name = entry.getName().getBytes();
- if (name.length > 0xffff)
- throw new ZipException("Name too long.");
- byte[] extra = entry.getExtra();
- if (extra == null)
- extra = new byte[0];
- String strComment = entry.getComment();
- byte[] comment = strComment != null
- ? strComment.getBytes() : new byte[0];
- if (comment.length > 0xffff)
- throw new ZipException("Comment too long.");
-
- writeLeShort(name.length);
- writeLeShort(extra.length);
- writeLeShort(comment.length);
- writeLeShort(0); /* disk number */
- writeLeShort(0); /* internal file attr */
- writeLeInt(0); /* external file attr */
- writeLeInt(entry.offset);
-
- out.write(name);
- out.write(extra);
- out.write(comment);
- numEntries++;
- sizeEntries += CENHDR + name.length + extra.length + comment.length;
- }
-
- writeLeInt(ENDSIG);
- writeLeShort(0); /* disk number */
- writeLeShort(0); /* disk with start of central dir */
- writeLeShort(numEntries);
- writeLeShort(numEntries);
- writeLeInt(sizeEntries);
- writeLeInt(offset);
- writeLeShort(zipComment.length);
- out.write(zipComment);
- out.flush();
- entries = null;
- }
-}