diff options
author | Mark Wielaard <mark@klomp.org> | 2005-08-30 21:47:43 +0000 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2005-08-30 21:47:43 +0000 |
commit | 2e59d4de0497b14c545670ed69699126f1998005 (patch) | |
tree | 9e92ffdbbc212cf8ab10d94250cf6389030d28ba | |
parent | b2ac6862f6afe40f834d2debebb9b8dc01be91b5 (diff) | |
download | classpath-2e59d4de0497b14c545670ed69699126f1998005.tar.gz |
2005-08-30 Mark Wielaard <mark@klomp.org>
Christian Schlichtherle <christian@schlichtherle.de>
* java/util/zip/ZipEntry.java (setTime): Use
Calendar.setTimeInMillis().
(getTime): First parse extra bytes. Use Calendar.getTimeInMillis().
(parseExtra): Don't return early to make sure that KNOWN_EXTRA is
always set.
* java/util/zip/ZipFile.java (readEntries): Parse name and comment
as UTF-8 string.
(close): Check that raf is not null.
* java/util/zip/ZipInputStream.java (getNextEntry): Set name as
UTF-8 bytes.
* java/util/zip/ZipOutputStream.java (setComment): Set comment as
UTF-8 bytes.
(putNextEntry): Likewise for name.
(finish): Likewise for both.
-rw-r--r-- | ChangeLog | 33 | ||||
-rw-r--r-- | java/util/zip/ZipEntry.java | 13 | ||||
-rw-r--r-- | java/util/zip/ZipFile.java | 24 | ||||
-rw-r--r-- | java/util/zip/ZipInputStream.java | 13 | ||||
-rw-r--r-- | java/util/zip/ZipOutputStream.java | 45 |
5 files changed, 103 insertions, 25 deletions
@@ -1,3 +1,21 @@ +2005-08-30 Mark Wielaard <mark@klomp.org> + Christian Schlichtherle <christian@schlichtherle.de> + + * java/util/zip/ZipEntry.java (setTime): Use + Calendar.setTimeInMillis(). + (getTime): First parse extra bytes. Use Calendar.getTimeInMillis(). + (parseExtra): Don't return early to make sure that KNOWN_EXTRA is + always set. + * java/util/zip/ZipFile.java (readEntries): Parse name and comment + as UTF-8 string. + (close): Check that raf is not null. + * java/util/zip/ZipInputStream.java (getNextEntry): Set name as + UTF-8 bytes. + * java/util/zip/ZipOutputStream.java (setComment): Set comment as + UTF-8 bytes. + (putNextEntry): Likewise for name. + (finish): Likewise for both. + 2005-08-30 David Gilbert <david.gilbert@object-refinery.com> * examples/gnu/classpath/examples/swing/Demo.java @@ -56,13 +74,13 @@ (inHitRegion): Changed region to be text area only (not icon). (createTreeCellEditor): No need to use canEdit here, removed. -2005-08-30 Christian Schlichtherle <christian@schlichtherle.de> +2005-08-30 Christian Schlichtherle <christian@schlichtherle.de> * java/util/zip/DeflaterOutputStream.java (DeflaterOutputStream(OutputStream)): Increase buffer size to 4096. (DeflaterOutputStream(OutputStream,Deflater)): Likewise. -2005-08-30 Christian Schlichtherle <christian@schlichtherle.de> +2005-08-30 Christian Schlichtherle <christian@schlichtherle.de> * java/util/zip/DeflaterHuffman.java (bit4Reverse): Mark final. @@ -98,13 +116,14 @@ * java/beans/Statement.java: (Statement): Use zero length array if argument array is null. - (toString): Use StringBuffer for efficiency reasons, make use of internal - name. - (generateInternalName): New method, generates instance names like the JDK - has. + (toString): Use StringBuffer for efficiency reasons, make use of + internal name. + (generateInternalName): New method, generates instance names like + the JDK has. (doExecute): Removed debugging output that could lead to an exception because wrong loop variable usage. - * java/beans/Expression.java: Static constant 'unset' renamed to 'UNSET´. + * java/beans/Expression.java: Static constant 'unset' renamed to + 'UNSET'. 2005-08-29 Keith Seitz <keiths@redhat.com> diff --git a/java/util/zip/ZipEntry.java b/java/util/zip/ZipEntry.java index ae21997db..9b7afa000 100644 --- a/java/util/zip/ZipEntry.java +++ b/java/util/zip/ZipEntry.java @@ -39,7 +39,6 @@ exception statement from your version. */ package java.util.zip; import java.util.Calendar; -import java.util.Date; /** * This class represents a member of a zip archive. ZipFile and @@ -173,7 +172,7 @@ public class ZipEntry implements ZipConstants, Cloneable Calendar cal = getCalendar(); synchronized (cal) { - cal.setTime(new Date(time)); + cal.setTimeInMillis(time); dostime = (cal.get(Calendar.YEAR) - 1980 & 0x7f) << 25 | (cal.get(Calendar.MONTH) + 1) << 21 | (cal.get(Calendar.DAY_OF_MONTH)) << 16 @@ -190,12 +189,12 @@ public class ZipEntry implements ZipConstants, Cloneable */ public long getTime() { + // The extra bytes might contain the time (posix/unix extension) + parseExtra(); + if ((known & KNOWN_TIME) == 0) return -1; - // The extra bytes might contain the time (posix/unix extension) - parseExtra (); - int sec = 2 * (dostime & 0x1f); int min = (dostime >> 5) & 0x3f; int hrs = (dostime >> 11) & 0x1f; @@ -209,7 +208,7 @@ public class ZipEntry implements ZipConstants, Cloneable synchronized (cal) { cal.set(year, mon, day, hrs, min, sec); - return cal.getTime().getTime(); + return cal.getTimeInMillis(); } } catch (RuntimeException ex) @@ -367,10 +366,10 @@ public class ZipEntry implements ZipConstants, Cloneable catch (ArrayIndexOutOfBoundsException ex) { /* be lenient */ - return; } known |= KNOWN_EXTRA; + return; } /** diff --git a/java/util/zip/ZipFile.java b/java/util/zip/ZipFile.java index 33f67c78b..0243abed1 100644 --- a/java/util/zip/ZipFile.java +++ b/java/util/zip/ZipFile.java @@ -48,6 +48,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; +import java.io.UnsupportedEncodingException; import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; @@ -284,7 +285,15 @@ public class ZipFile implements ZipConstants buffer = new byte[needBuffer]; raf.readFully(buffer, 0, nameLen); - String name = new String(buffer, 0, 0, nameLen); + String name; + try + { + name = new String(buffer, 0, nameLen, "UTF-8"); + } + catch (UnsupportedEncodingException uee) + { + throw new AssertionError(uee); + } ZipEntry entry = new ZipEntry(name); entry.setMethod(method); @@ -301,7 +310,14 @@ public class ZipFile implements ZipConstants if (commentLen > 0) { raf.readFully(buffer, 0, commentLen); - entry.setComment(new String(buffer, 0, commentLen)); + try + { + entry.setComment(new String(buffer, 0, commentLen, "UTF-8")); + } + catch (UnsupportedEncodingException uee) + { + throw new AssertionError(uee); + } } entry.offset = offset; entries.put(name, entry); @@ -317,6 +333,10 @@ public class ZipFile implements ZipConstants */ public void close() throws IOException { + RandomAccessFile raf = this.raf; + if (raf == null) + return; + synchronized (raf) { closed = true; diff --git a/java/util/zip/ZipInputStream.java b/java/util/zip/ZipInputStream.java index 573252323..4539828c2 100644 --- a/java/util/zip/ZipInputStream.java +++ b/java/util/zip/ZipInputStream.java @@ -1,5 +1,5 @@ /* ZipInputStream.java -- - Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -41,6 +41,7 @@ package java.util.zip; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; /** * This is a FilterInputStream that reads the files in an zip archive @@ -171,7 +172,15 @@ public class ZipInputStream extends InflaterInputStream implements ZipConstants byte[] buffer = new byte[nameLen]; readFully(buffer); - String name = new String(buffer); + String name; + try + { + name = new String(buffer, "UTF-8"); + } + catch (UnsupportedEncodingException uee) + { + throw new AssertionError(uee); + } entry = createZipEntry(name); entryAtEOF = false; diff --git a/java/util/zip/ZipOutputStream.java b/java/util/zip/ZipOutputStream.java index 5699ff046..5c593b2c4 100644 --- a/java/util/zip/ZipOutputStream.java +++ b/java/util/zip/ZipOutputStream.java @@ -1,5 +1,5 @@ /* ZipOutputStream.java -- - Copyright (C) 2001, 2004 Free Software Foundation, Inc. + Copyright (C) 2001, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -40,6 +40,7 @@ package java.util.zip; import java.io.IOException; import java.io.OutputStream; +import java.io.UnsupportedEncodingException; import java.util.Enumeration; import java.util.Vector; @@ -102,7 +103,14 @@ public class ZipOutputStream extends DeflaterOutputStream implements ZipConstant public void setComment(String comment) { byte[] commentBytes; - commentBytes = comment.getBytes(); + try + { + commentBytes = comment.getBytes("UTF-8"); + } + catch (UnsupportedEncodingException uee) + { + throw new AssertionError(uee); + } if (commentBytes.length > 0xffff) throw new IllegalArgumentException("Comment too long."); zipComment = commentBytes; @@ -226,7 +234,15 @@ public class ZipOutputStream extends DeflaterOutputStream implements ZipConstant writeLeInt(0); writeLeInt(0); } - byte[] name = entry.getName().getBytes(); + byte[] name; + try + { + name = entry.getName().getBytes("UTF-8"); + } + catch (UnsupportedEncodingException uee) + { + throw new AssertionError(uee); + } if (name.length > 0xffff) throw new ZipException("Name too long."); byte[] extra = entry.getExtra(); @@ -357,15 +373,30 @@ public class ZipOutputStream extends DeflaterOutputStream implements ZipConstant writeLeInt((int)entry.getCompressedSize()); writeLeInt((int)entry.getSize()); - byte[] name = entry.getName().getBytes(); + byte[] name; + try + { + name = entry.getName().getBytes("UTF-8"); + } + catch (UnsupportedEncodingException uee) + { + throw new AssertionError(uee); + } 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]; + String str = entry.getComment(); + byte[] comment; + try + { + comment = str != null ? str.getBytes("UTF-8") : new byte[0]; + } + catch (UnsupportedEncodingException uee) + { + throw new AssertionError(uee); + } if (comment.length > 0xffff) throw new ZipException("Comment too long."); |