PatchSet 7723 Date: 2008/01/31 20:49:45 Author: robilad Branch: HEAD Tag: (none) Log: updated zlib-zip
2008-01-31 Dalibor Topic <[EMAIL PROTECTED]> * TODO: Updated. * libraries/javalib/zlib-zip/java/util/zip/ZipEntry.java, libraries/javalib/zlib-zip/java/util/zip/ZipInputStream.java, libraries/javalib/zlib-zip/java/util/zip/ZipOutputStream.java: Removed. * kaffe/kaffevm/debug.c (kaffe_dprintf): Changed prototype of max to size_t. * libraries/clib/zip/ZipFile.c: Include native.h amd zzip/zzip.h. (makeZipEntry, java_util_zip_ZipFile_openZipFile0, java_util_zip_ZipFile_closeZipFile0, java_util_zip_ZipFile_getZipFileSize0, java_util_zip_ZipFile_getZipEntry0, java_util_zip_ZipFile_getZipData0, java_util_zip_ZipFile_getZipEntries0) Rewritten to use zziplib. (getZipEntry) New helper function. * libraries/javalib/zlib-zip/Makefile.am (dist_zlib_JAVA): Removed /java/util/zip/ZipEntry.java, java/util/zip/ZipInputStream.java and java/util/zip/ZipOutputStream.java. * libraries/javalib/zlib-zip/java/util/zip/ZipFile.java (getZipEntry): New private helper method. (getEntry, getInputStream) Use getZipEntry to avoid infinte recursion with overridden getEntry. Members: ChangeLog:1.5224->1.5225 TODO:1.47->1.48 kaffe/kaffevm/debug.c:1.67->1.68 libraries/clib/zip/ZipFile.c:1.1->1.2 libraries/javalib/zlib-zip/Makefile.am:1.7->1.8 libraries/javalib/zlib-zip/Makefile.in:1.27->1.28 libraries/javalib/zlib-zip/java/util/zip/ZipEntry.java:1.1->1.2(DEAD) libraries/javalib/zlib-zip/java/util/zip/ZipFile.java:1.1->1.2 libraries/javalib/zlib-zip/java/util/zip/ZipInputStream.java:1.1->1.2(DEAD) libraries/javalib/zlib-zip/java/util/zip/ZipOutputStream.java:1.1->1.2(DEAD) Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.5224 kaffe/ChangeLog:1.5225 --- kaffe/ChangeLog:1.5224 Mon Jan 28 00:59:32 2008 +++ kaffe/ChangeLog Thu Jan 31 20:49:45 2008 @@ -1,3 +1,30 @@ +2008-01-31 Dalibor Topic <[EMAIL PROTECTED]> + + * TODO: Updated. + + * libraries/javalib/zlib-zip/java/util/zip/ZipEntry.java, + libraries/javalib/zlib-zip/java/util/zip/ZipInputStream.java, + libraries/javalib/zlib-zip/java/util/zip/ZipOutputStream.java: + Removed. + + * kaffe/kaffevm/debug.c (kaffe_dprintf): Changed prototype of + max to size_t. + + * libraries/clib/zip/ZipFile.c: Include native.h amd zzip/zzip.h. + (makeZipEntry, java_util_zip_ZipFile_openZipFile0, + java_util_zip_ZipFile_closeZipFile0, java_util_zip_ZipFile_getZipFileSize0, + java_util_zip_ZipFile_getZipEntry0, java_util_zip_ZipFile_getZipData0, + java_util_zip_ZipFile_getZipEntries0) Rewritten to use zziplib. + (getZipEntry) New helper function. + + * libraries/javalib/zlib-zip/Makefile.am (dist_zlib_JAVA): + Removed /java/util/zip/ZipEntry.java, java/util/zip/ZipInputStream.java + and java/util/zip/ZipOutputStream.java. + + * libraries/javalib/zlib-zip/java/util/zip/ZipFile.java (getZipEntry): + New private helper method. (getEntry, getInputStream) Use getZipEntry + to avoid infinte recursion with overridden getEntry. + 2008-01-27 Dalibor Topic <[EMAIL PROTECTED]> * config/arm/netbsd1/md.c, Index: kaffe/TODO diff -u kaffe/TODO:1.47 kaffe/TODO:1.48 --- kaffe/TODO:1.47 Tue Jan 22 14:42:16 2008 +++ kaffe/TODO Thu Jan 31 20:49:45 2008 @@ -13,6 +13,7 @@ * libjit could use a vmgenned interpreter, too. * Cleanup + * Don't use __USE_GNU use _GNU_SOURCE instead * cleanup JNI library loading to use libltdl exclusively. * Remove unused instructions from jits (nop, unimplemented) Index: kaffe/kaffe/kaffevm/debug.c diff -u kaffe/kaffe/kaffevm/debug.c:1.67 kaffe/kaffe/kaffevm/debug.c:1.68 --- kaffe/kaffe/kaffevm/debug.c:1.67 Tue Nov 7 00:59:10 2006 +++ kaffe/kaffe/kaffevm/debug.c Thu Jan 31 20:49:47 2008 @@ -429,7 +429,7 @@ { int n; - int max; + size_t max; va_list args; ssize_t w = 0; int rc; @@ -441,7 +441,7 @@ #ifdef HAVE_VSNPRINTF max = bufferSz - bufferBegin - 1; assert(max > 0); - n = vsnprintf(debugBuffer + bufferBegin, (unsigned int)max, fmt, args); + n = vsnprintf(debugBuffer + bufferBegin, max, fmt, args); /* The return value is bytes *needed* not bytes *used* */ if (n > max) Index: kaffe/libraries/clib/zip/ZipFile.c diff -u kaffe/libraries/clib/zip/ZipFile.c:1.1 kaffe/libraries/clib/zip/ZipFile.c:1.2 --- kaffe/libraries/clib/zip/ZipFile.c:1.1 Sun Jul 23 15:48:26 2006 +++ kaffe/libraries/clib/zip/ZipFile.c Thu Jan 31 20:49:47 2008 @@ -18,17 +18,38 @@ #include "gtypes.h" #include "itypes.h" #include "jar.h" +#include "native.h" + +#include <zzip/zzip.h> #include "java_util_zip_ZipEntry.h" #include "java_util_zip_ZipFile.h" #include "java_util_Vector.h" -static Hjava_util_zip_ZipEntry* makeZipEntry(jarEntry*); +static +Hjava_util_zip_ZipEntry* +makeZipEntry(ZZIP_FILE * entry, Hjava_lang_String* zname) +{ + Hjava_util_zip_ZipEntry* zentry; + ZZIP_STAT stat; + zzip_fstat(entry, &stat); + + zentry = (Hjava_util_zip_ZipEntry*) + execute_java_constructor("java.util.zip.ZipEntry", NULL, NULL, + "(Ljava/lang/String;)V", zname); + unhand(zentry)->size = stat.st_size; + unhand(zentry)->known |= java_util_zip_ZipEntry_KNOWN_SIZE; + unhand(zentry)->method = stat.d_compr; + unhand(zentry)->compressedSize = stat.d_csize; + unhand(zentry)->dostime = -1; + + return (zentry); +} struct Horg_kaffe_util_Ptr* java_util_zip_ZipFile_openZipFile0(Hjava_lang_String* fname) { - jarFile* zip; + ZZIP_DIR* zip; char* str; str = checkPtr(stringJava2C(fname)); @@ -40,36 +61,52 @@ void java_util_zip_ZipFile_closeZipFile0(struct Horg_kaffe_util_Ptr* zip) { - closeJarFile((jarFile*)zip); + closeJarFile((ZZIP_DIR*)zip); } jint java_util_zip_ZipFile_getZipFileSize0(struct Horg_kaffe_util_Ptr* zip) { - return ((jarFile*)zip)->count; + jint size = 0; + + zzip_rewinddir((ZZIP_DIR *) zip); + + while(zzip_readdir((ZZIP_DIR *) zip) != NULL) + ++size; + + return size; } -struct Hjava_util_zip_ZipEntry* -java_util_zip_ZipFile_getZipEntry0(struct Horg_kaffe_util_Ptr* zip, Hjava_lang_String* zname) +static +ZZIP_FILE* getZipEntry(struct Horg_kaffe_util_Ptr* zip, Hjava_lang_String* zname) { - jarEntry* entry; + ZZIP_FILE* entry; char* str; - Hjava_util_zip_ZipEntry* zentry; str = checkPtr(stringJava2C(zname)); - entry = lookupJarFile((jarFile*)zip, str); + entry = lookupJarFile((ZZIP_DIR*)zip, str); gc_free(str); - if (entry == NULL) { - return (NULL); - } - zentry = makeZipEntry(entry); - return (zentry); + + return entry; +} + +struct Hjava_util_zip_ZipEntry* +java_util_zip_ZipFile_getZipEntry0(struct Horg_kaffe_util_Ptr* zip, Hjava_lang_String* zname) +{ + ZZIP_FILE* entry; + Hjava_util_zip_ZipEntry* zentry = NULL; + + entry = getZipEntry(zip, zname); + + if (entry != NULL) + zentry = makeZipEntry(entry, zname); + + return (zentry); } HArrayOfByte* java_util_zip_ZipFile_getZipData0(struct Horg_kaffe_util_Ptr* zip, struct Hjava_util_zip_ZipEntry* zentry) { - jarEntry entry; HArrayOfByte* array; uint8* buf = NULL; jlong size; @@ -81,16 +118,13 @@ } if( size > 0 ) { - entry.fileName = NULL; - entry.uncompressedSize = size; - entry.compressionMethod = unhand(zentry)->method; - entry.compressedSize = unhand(zentry)->csize; - entry.localHeaderOffset = unhand(zentry)->offset; - - buf = getDataJarFile((jarFile*)zip, &entry); - if (buf == 0) { - return (NULL); - } + ZZIP_FILE *entry = getZipEntry( zip, unhand(zentry)->name); + if (entry != NULL) + buf = getDataJarFile(entry); + + if (buf == 0) { + return (NULL); + } } array = (HArrayOfByte*)AllocArray((jsize)size, TYPE_Byte); if( buf ) @@ -105,50 +139,31 @@ java_util_zip_ZipFile_getZipEntries0(struct Horg_kaffe_util_Ptr* zip) { Hjava_util_Vector* vec; - jarFile* zfile; - jarEntry* entry; + ZZIP_DIR* zfile; + ZZIP_FILE* entry; + ZZIP_DIRENT * zip_entry = NULL; HObject** elems; int i = 0; - unsigned int j; - - zfile = (jarFile*)zip; - vec = (Hjava_util_Vector*)execute_java_constructor("java.util.Vector", - NULL, NULL, "(I)V", zfile->count); + jint num_entries = java_util_zip_ZipFile_getZipFileSize0(zip); + zfile = (ZZIP_DIR*)zip; + + vec = (Hjava_util_Vector*) + execute_java_constructor("java.util.Vector", + NULL, NULL, "(I)V", + num_entries); elems = unhand_array(unhand(vec)->elementData)->body; - for (j = 0; j < zfile->tableSize; j++) { - entry = zfile->table[j]; - while( entry ) - { - elems[i] = (HObject*)makeZipEntry(entry); - i++; - entry = entry->next; - } - } - unhand(vec)->elementCount = zfile->count; - return (vec); -} + zzip_rewinddir(zfile); + do { + zip_entry = zzip_readdir(zfile); + if (NULL != zip_entry) { + entry = lookupJarFile(zfile, zip_entry->d_name); + elems[i] = (HObject*)makeZipEntry(entry, stringC2Java(zip_entry->d_name)); + i++; + } + }while (zip_entry != NULL); -static -Hjava_util_zip_ZipEntry* -makeZipEntry(jarEntry* entry) -{ - Hjava_util_zip_ZipEntry* zentry; + unhand(vec)->elementCount = num_entries; - zentry = (Hjava_util_zip_ZipEntry*) - execute_java_constructor("java.util.zip.ZipEntry", NULL, NULL, "()V"); - unhand(zentry)->name = - checkPtr(stringC2Java(entry->fileName)); - unhand(zentry)->crc = 0; - unhand(zentry)->size = entry->uncompressedSize; - unhand(zentry)->method = entry->compressionMethod; - unhand(zentry)->extra = NULL; - unhand(zentry)->comment = NULL; - unhand(zentry)->flag = 0; - unhand(zentry)->version = 0; - unhand(zentry)->csize = entry->compressedSize; - unhand(zentry)->offset = entry->localHeaderOffset; - unhand(zentry)->dosTime = entry->dosTime; - - return (zentry); + return (vec); } Index: kaffe/libraries/javalib/zlib-zip/Makefile.am diff -u kaffe/libraries/javalib/zlib-zip/Makefile.am:1.7 kaffe/libraries/javalib/zlib-zip/Makefile.am:1.8 --- kaffe/libraries/javalib/zlib-zip/Makefile.am:1.7 Sun Dec 9 20:47:21 2007 +++ kaffe/libraries/javalib/zlib-zip/Makefile.am Thu Jan 31 20:49:48 2008 @@ -27,10 +27,7 @@ java/util/zip/Deflater.java \ java/util/zip/DeflaterOutputStream.java \ java/util/zip/Inflater.java \ - java/util/zip/ZipEntry.java \ java/util/zip/ZipFile.java \ - java/util/zip/ZipInputStream.java \ - java/util/zip/ZipOutputStream.java \ org/kaffe/util/Assert.java \ org/kaffe/util/UTF8.java \ org/kaffe/util/zip/SwitchInflater.java Index: kaffe/libraries/javalib/zlib-zip/Makefile.in diff -u kaffe/libraries/javalib/zlib-zip/Makefile.in:1.27 kaffe/libraries/javalib/zlib-zip/Makefile.in:1.28 --- kaffe/libraries/javalib/zlib-zip/Makefile.in:1.27 Tue Jan 22 23:21:47 2008 +++ kaffe/libraries/javalib/zlib-zip/Makefile.in Thu Jan 31 20:49:48 2008 @@ -292,10 +292,7 @@ java/util/zip/Deflater.java \ java/util/zip/DeflaterOutputStream.java \ java/util/zip/Inflater.java \ - java/util/zip/ZipEntry.java \ java/util/zip/ZipFile.java \ - java/util/zip/ZipInputStream.java \ - java/util/zip/ZipOutputStream.java \ org/kaffe/util/Assert.java \ org/kaffe/util/UTF8.java \ org/kaffe/util/zip/SwitchInflater.java =================================================================== Checking out kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipEntry.java RCS: /home/cvs/kaffe/kaffe/libraries/javalib/zlib-zip/java/util/zip/Attic/ZipEntry.java,v VERS: 1.1 *************** --- kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipEntry.java Thu Jan 31 20:51:15 2008 +++ /dev/null Sun Aug 4 19:57:58 2002 @@ -1,246 +0,0 @@ -/* - * Java core library component. - * - * Copyright (c) 1997, 1998 - * Transvirtual Technologies, Inc. All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution - * of this file. - */ - -package java.util.zip; - -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; - -public class ZipEntry implements Cloneable, ZipConstants { - - /* Clone method taken from GNU Classpath: - * Copyright (C) 2001, 2002, 2004, 2005 Free Software Foundation, Inc. - */ - /** - * Creates a copy of this zip entry. - */ - /** - * Clones the entry. - */ - public Object clone() - { - try - { - // The JCL says that the `extra' field is also copied. - ZipEntry clone = (ZipEntry) super.clone(); - if (extra != null) - clone.extra = (byte[]) extra.clone(); - return clone; - } - catch (CloneNotSupportedException ex) - { - throw new InternalError(); - } - } - - public static final int STORED = Deflater.NO_COMPRESSION; - public static final int DEFLATED = Deflater.DEFLATED; - - private String name; - private long time = -1; - int dosTime; - private long crc; - private long size; - private int method; - private byte[] extra; - private String comment; - int flag; - int version; - private long csize; - long offset; - - /** - * this constructor is for internal library use only (makeZipEntry) - */ - ZipEntry() - { - } - - public ZipEntry(String nm) - { - if (nm == null) { - throw new NullPointerException(); - } - if (nm.length() > 0xFFFF) { - throw new IllegalArgumentException("name length > 0xFFFF"); - } - name = nm; - time = new Date().getTime(); - dosTime = computeDosTime(time); - crc = -1; - size = -1; - method = -1; - extra = null; - comment = null; - flag = 0; - version = 0; - csize = -1; - offset = 0; - } - - /** - * Create a new ZipEntry with fields taken from the specified zip entry. - */ - public ZipEntry(ZipEntry entry) - { - name = entry.name; - time = entry.time; - dosTime = entry.dosTime; - crc = entry.crc; - size = entry.size; - method = entry.method; - extra = entry.extra; - comment = entry.comment; - flag = entry.flag; - version = entry.version; - csize = entry.csize; - offset = entry.offset; - } - - public String getName() - { - return (name); - } - - public void setTime(long tm) - { - time = tm; - dosTime = computeDosTime(tm); - } - - public long getTime() - { - if (time == -1 && dosTime != 0) - setDosTime(dosTime); - return (time); - } - - public void setSize(long size) - { - if (size < 0 || size > 0xFFFFFFFFL) { - throw new IllegalArgumentException("size < 0 or size > 0xFFFFFFFF"); - } - this.size = size; - } - - public long getSize() - { - return (size); - } - - public void setCrc(long crcx) - { - if (crcx < 0 || crcx > 0xFFFFFFFFL) { - throw new IllegalArgumentException("crc < 0 or > 0xFFFFFFFF: " + crcx); - } - crc = crcx; - } - - public long getCrc() - { - return (crc); - } - - public void setMethod(int meth) - { - if (meth != STORED && meth != DEFLATED) { - throw new IllegalArgumentException("unsupported compression method"); - } - method = meth; - } - - public int getMethod() - { - return (method); - } - - public void setExtra(byte extra[]) - { - if ((extra != null) && (extra.length > 0xFFFFF)) { - throw new IllegalArgumentException("extra length > 0xFFFFF"); - } - this.extra = extra; - } - - public byte[] getExtra() - { - return (extra); - } - - public void setComment(String comment) - { - if ((comment != null) && (comment.length() > 0xFFFF)) { - throw new IllegalArgumentException("comment length > 0xFFFF"); - } - this.comment = comment; - } - - public String getComment() - { - return (comment); - } - - public void setCompressedSize(long csize) - { - if (csize < 0 || csize > 0xFFFFFFFFL) { - throw new IllegalArgumentException("csize < 0 or csize > 0xFFFFFFFF"); - } - - this.csize = csize; - } - - public long getCompressedSize() - { - return (csize); - } - - public boolean isDirectory() - { - return (name.endsWith("/")); - } - - public String toString() - { - return (getName()); - } - - // Encode timestamp in DOS format - int computeDosTime(long time) { - time = (time + 1) & ~1L; // Round up to even seconds. - Calendar cal = new GregorianCalendar(); - cal.setTime(new Date(time)); - return encodeDosTime( - cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, - cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), - cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); - } - - int encodeDosTime(int year, int month, int day, int hour, - int minute, int second) { - return (year < 1980) ? encodeDosTime(1980, 1, 1, 0, 0, 0) : - ((year - 1980) << 25) | (month << 21) | (day << 16) | - (hour << 11) | (minute << 5) | (second >>> 1); - } - - void setDosTime(int date) { - Calendar cal = new GregorianCalendar(); - cal.clear(); - cal.set (((date >> 25) & 0x7F) + 1980, - ((date >> 21) & 0xF) - 1, - (date >> 16) & 0x1F, - (date >> 11) & 0x1F, - (date >> 5) & 0x3F, - (date << 1) & 0x3E); - time = cal.getTime().getTime(); - dosTime = date; - } - -} Index: kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipFile.java diff -u kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipFile.java:1.1 kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipFile.java:1.2 --- kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipFile.java:1.1 Wed Aug 9 21:28:00 2006 +++ kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipFile.java Thu Jan 31 20:49:48 2008 @@ -90,12 +90,17 @@ return (all.elements()); } -public ZipEntry getEntry(String zname) +private final ZipEntry getZipEntry(String zname) { checkIfClosed(); return (getZipEntry0(zip, zname)); } +public ZipEntry getEntry(String zname) +{ + return (getZipEntry(zname)); +} + public InputStream getInputStream(ZipEntry ze) throws IOException { if (ze == null) { @@ -103,7 +108,7 @@ } if (ze.getSize() == -1) { - ze = getEntry(ze.getName()); + ze = getZipEntry(ze.getName()); } if (ze == null) { =================================================================== Checking out kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipInputStream.java RCS: /home/cvs/kaffe/kaffe/libraries/javalib/zlib-zip/java/util/zip/Attic/ZipInputStream.java,v VERS: 1.1 *************** --- kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipInputStream.java Thu Jan 31 20:51:15 2008 +++ /dev/null Sun Aug 4 19:57:58 2002 @@ -1,228 +0,0 @@ - -/* - * Java core library component. - * - * Copyright (c) 1997, 1998 - * Transvirtual Technologies, Inc. All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution - * of this file. - */ - -package java.util.zip; - -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; - -import org.kaffe.util.UTF8; -import org.kaffe.util.zip.SwitchInflater; - -public class ZipInputStream extends InflaterInputStream - implements ZipConstants { - - private byte sigbuf[] = new byte[4]; - private byte zheader[] = new byte[LOCHDR]; - private byte dheader[] = new byte[EXTHDR]; - private boolean gotSig; - private SwitchInflater sinf; - private ZipEntry entry; - - public ZipInputStream(InputStream in) { - super(in, new SwitchInflater(true, true)); - sinf = (SwitchInflater)inf; - sinf.reset(); - sinf.setMode(true); - sinf.setLength(Integer.MAX_VALUE); - } - - public ZipEntry getNextEntry() throws IOException { - - closeEntry(); - - synchronized (this) { - - // First, open the stream. - sinf.setLength(Integer.MAX_VALUE); - - // Read next signature - int sig = readSig(); - switch (sig) { - case (int)CENSIG: // central dir: no more entries - return null; - case (int)LOCSIG: // another entry - break; - default: // unexpected - return null; - } - - // Read remainder of local header - readFully(zheader, sigbuf.length, zheader.length - sigbuf.length); - - // Read filename; assume UTF-8 encoding - byte[] nameBuf = new byte[get16(zheader, LOCNAM)]; - readFully(nameBuf, 0, nameBuf.length); - - // Read extra field - byte[] extra = new byte[get16(zheader, LOCEXT)]; - readFully(extra, 0, extra.length); - - // Setup new entry - entry = createZipEntry(UTF8.decode(nameBuf)); - entry.version = get16(zheader, LOCVER); - entry.flag = get16(zheader, LOCFLG); - - entry.setMethod(get16(zheader, LOCHOW)); - entry.setDosTime(get32(zheader, LOCTIM)); - entry.setCrc(get32(zheader, LOCCRC) & 0xffffffffL); - - entry.setCompressedSize(get32(zheader, LOCSIZ) & 0xffffffffL); - entry.setSize(get32(zheader, LOCLEN) & 0xffffffffL); - - entry.setExtra( extra ); - entry.setComment(""); - entry.offset = 0; - - // Select the loader, simple or inflater. - if (entry.getMethod() == ZipEntry.STORED) { - sinf.setMode(true); - sinf.setLength((int)entry.getCompressedSize()); - } - else { - sinf.setMode(false); - } - - //System.out.println("ZipEntry (Post LOC): " + entry + ", meth=" - // + entry.method + ", size=" + entry.size + ", csize=" + entry.csize - // + ", crc=" + entry.crc); - - return entry; - } - } - - public void closeEntry() throws IOException { - synchronized (this) { - - // Don't do this twice - if (entry == null) - return; - - // Cleanup - try { - - // Skip remaining compressed data - byte[] buf = new byte[512]; - while (read(buf, 0, buf.length) != -1); - - // Reset inflate state machine - sinf.reset(); - sinf.setMode(true); - sinf.setLength(Integer.MAX_VALUE); - - // In the case where closeEntry() is called after reading - // a compressed entry, we need to read the DATA header that - // follows, if any, and update the ZipEntry with the info - // from the DATA header. This is so that users can find out - // the compressed and uncompressed sizes of data written in - // a compressed entry. - if (entry.getMethod() == ZipEntry.DEFLATED && peekSig() == (int)EXTSIG) { - - // Consume signature - readSig(); - - // Read remainder of data header - readFully(dheader, sigbuf.length, dheader.length - sigbuf.length); - - // Read CRC - int data_crc = get32(dheader, EXTCRC); - entry.setCrc(data_crc & 0xffffffffL); - - // Read compressed size - int data_csize = get32(dheader, EXTSIZ); - entry.setCompressedSize(data_csize & 0xffffffffL); - - // Read uncompressed size - int data_size = get32(dheader, EXTLEN); - if (data_crc == 0 && data_size != 0) { - throw new IOException( - "CRC error: data_crc=0, data_csize=" + data_csize + ",data_size=" + data_size); - } - entry.setSize(data_size & 0xffffffffL); - - //System.out.println("ZipEntry (Post DATA): " + entry - // + ", meth=" + entry.method + ", size=" + entry.size - // + ", csize=" + entry.csize + ", crc=" + entry.crc); - } - - // Close the input stream for the rest of the world. - sinf.setLength(0); - } finally { - entry = null; - } - } - } - - public int read(byte[] b, int off, int len) throws IOException { - return super.read(b, off, len); - } - - public long skip(long n) throws IOException { - return super.skip(n); - } - - public void close() throws IOException { - closeEntry(); - super.close(); - // Now completely close the byte stream. There may be some - // bytes left in the buffer. - sinf.setInput(null, 0, 0); - } - - private int get16(byte[] buf, int base) { - int val = (int)buf[base] & 0xFF; - val |= ((int)buf[base+1] & 0xFF) << 8; - return (val); - } - - private int get32(byte[] buf, int base) { - return buf[base] & 0xFF - | ((buf[base+1] & 0xFF) << 8) - | ((buf[base+2] & 0xFF) << 16) - | ((buf[base+3] & 0xFF) << 24); - } - - private void readFully(byte[] buf, int off, int len) throws IOException { - int nread; - - for (int remain = len; remain > 0; remain -= nread) { - nread = read(buf, off, remain); - if (nread == -1) { - if (remain != 0) { - throw new IOException("truncated file (only read " - + (len - remain) + "/" + len + ")"); - } - return; - } - off += nread; - } - } - - private int readSig() throws IOException { - int sig = peekSig(); - gotSig = false; - return sig; - } - - private int peekSig() throws IOException { - if (!gotSig) { - readFully(sigbuf, 0, sigbuf.length); - gotSig = true; - } - return get32(sigbuf, 0); - } - - protected ZipEntry createZipEntry(String name) { - return new ZipEntry(name); - } -} - =================================================================== Checking out kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipOutputStream.java RCS: /home/cvs/kaffe/kaffe/libraries/javalib/zlib-zip/java/util/zip/Attic/ZipOutputStream.java,v VERS: 1.1 *************** --- kaffe/libraries/javalib/zlib-zip/java/util/zip/ZipOutputStream.java Thu Jan 31 20:51:15 2008 +++ /dev/null Sun Aug 4 19:57:58 2002 @@ -1,349 +0,0 @@ -/* - * Java core library component. - * - * Copyright (c) 1997, 1998 - * Transvirtual Technologies, Inc. All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution - * of this file. - */ - -package java.util.zip; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.util.Enumeration; -import java.util.Vector; - -import org.kaffe.util.UTF8; - -// Reference: ftp://ftp.uu.net/pub/archiving/zip/doc/appnote-970311-iz.zip - -public class ZipOutputStream extends DeflaterOutputStream - implements ZipConstants { - - public static final int STORED = Deflater.NO_COMPRESSION; - public static final int DEFLATED = Deflater.DEFLATED; - -private static final int ZIPVER_1_0 = 0x000a; -private static final int ZIPVER_2_0 = 0x0014; - - /* Copied the fields over from GNU Claspath to make it compile again */ - /* The following two fields are missing in SUN JDK */ - private final int ENDNRD = 4; - private final int ENDDCD = 6; - -private int method = Deflater.DEFLATED; -private int level = Deflater.DEFAULT_COMPRESSION; -private ZipEntry curr; -private Vector dir; -private OutputStream strm; -private int dout; -private CRC32 crc; - -class Storer - extends Deflater { - -private int total; -private byte[] buf; -private int off; -private int len; - -Storer() { - total = 0; - off = 0; - len = 0; -} - -public int deflate(byte[] b, int p, int l) { - if (l >= len) { - l = len; - } - System.arraycopy(buf, off, b, p, l); - total += l; - off += l; - len -= l; - return (l); -} - -public synchronized void setInput(byte b[], int o, int l) -{ - buf = b; - off = o; - len = l; -} - -public boolean needsInput() { - return (len > 0 ? false : true); -} - -public boolean finished() { - return (len > 0 ? false : true); -} - -public int getTotalIn() { - return (total); -} - -public int getTotalOut() { - return (total); -} - -public void reset() { -} - -} - -public ZipOutputStream(OutputStream out) -{ - super(out); - strm = out; - curr = null; - dir = new Vector(); - dout = 0; - crc = new CRC32(); -} - -public void close() throws IOException -{ - finish(); - super.close(); -} - -public void closeEntry() throws IOException -{ - if (curr == null) { - return; *** Patch too long, truncated *** _______________________________________________ kaffe mailing list kaffe@kaffe.org http://kaffe.org/cgi-bin/mailman/listinfo/kaffe