summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2005-08-30 21:47:43 +0000
committerMark Wielaard <mark@klomp.org>2005-08-30 21:47:43 +0000
commit2e59d4de0497b14c545670ed69699126f1998005 (patch)
tree9e92ffdbbc212cf8ab10d94250cf6389030d28ba
parentb2ac6862f6afe40f834d2debebb9b8dc01be91b5 (diff)
downloadclasspath-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--ChangeLog33
-rw-r--r--java/util/zip/ZipEntry.java13
-rw-r--r--java/util/zip/ZipFile.java24
-rw-r--r--java/util/zip/ZipInputStream.java13
-rw-r--r--java/util/zip/ZipOutputStream.java45
5 files changed, 103 insertions, 25 deletions
diff --git a/ChangeLog b/ChangeLog
index d7d11297f..338771d3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.");