You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2009/02/26 14:38:23 UTC
svn commit: r748147 - in /ant/core/trunk/src/main/org/apache/tools/zip: ./
AbstractUnicodeExtraField.java ExtraFieldUtils.java
UnicodeCommentExtraField.java UnicodePathExtraField.java
ZipEncodingHelper.java ZipEntry.java ZipFile.java ZipOutputStream.java
Author: bodewig
Date: Thu Feb 26 13:38:23 2009
New Revision: 748147
URL: http://svn.apache.org/viewvc?rev=748147&view=rev
Log:
optionally read/write InfoZIP unicode fields, merge from commons-compress
Modified:
ant/core/trunk/src/main/org/apache/tools/zip/ (props changed)
ant/core/trunk/src/main/org/apache/tools/zip/AbstractUnicodeExtraField.java (contents, props changed)
ant/core/trunk/src/main/org/apache/tools/zip/ExtraFieldUtils.java (props changed)
ant/core/trunk/src/main/org/apache/tools/zip/UnicodeCommentExtraField.java (contents, props changed)
ant/core/trunk/src/main/org/apache/tools/zip/UnicodePathExtraField.java (contents, props changed)
ant/core/trunk/src/main/org/apache/tools/zip/ZipEncodingHelper.java (contents, props changed)
ant/core/trunk/src/main/org/apache/tools/zip/ZipEntry.java (contents, props changed)
ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java (contents, props changed)
ant/core/trunk/src/main/org/apache/tools/zip/ZipOutputStream.java (contents, props changed)
Propchange: ant/core/trunk/src/main/org/apache/tools/zip/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 26 13:38:23 2009
@@ -1 +1 @@
-/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip:746933
+/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip:746933,748133
Modified: ant/core/trunk/src/main/org/apache/tools/zip/AbstractUnicodeExtraField.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/zip/AbstractUnicodeExtraField.java?rev=748147&r1=748146&r2=748147&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/zip/AbstractUnicodeExtraField.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/zip/AbstractUnicodeExtraField.java Thu Feb 26 13:38:23 2009
@@ -34,23 +34,32 @@
}
/**
- * Assemble as unicode path extension form the name and encoding
- * of the orginal zip entry.
+ * Assemble as unicode extension from the name/comment and
+ * encoding of the orginal zip entry.
*
- * @param name The file name or comment.
+ * @param text The file name or comment.
* @param zipEncoding The encoding of the filenames in the zip
* file, usually <code>"CP437"</code>.
*/
- protected AbstractUnicodeExtraField(String name, String zipEncoding) {
-
- byte[] filename = ZipEncodingHelper.encodeName(name, zipEncoding);
+ protected AbstractUnicodeExtraField(String text, String zipEncoding) {
+ this(text, ZipEncodingHelper.encodeName(text, zipEncoding));
+ }
+ /**
+ * Assemble as unicode extension from the name/comment and
+ * encoding of the orginal zip entry.
+ *
+ * @param text The file name or comment.
+ * @param zipEncoding The encoding of the filenames in the zip
+ * file, usually <code>"CP437"</code>.
+ */
+ protected AbstractUnicodeExtraField(String text, byte[] bytes) {
CRC32 crc32 = new CRC32();
- crc32.update(filename);
+ crc32.update(bytes);
nameCRC32 = crc32.getValue();
try {
- unicodeName = name.getBytes("UTF-8");
+ unicodeName = text.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("FATAL: UTF-8 encoding not supported.",
e);
Propchange: ant/core/trunk/src/main/org/apache/tools/zip/AbstractUnicodeExtraField.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 26 13:38:23 2009
@@ -1,2 +1,2 @@
/ant/core/trunk/src/main/org/apache/tools/zip/AbstractUnicodeExtraField.java:738844,739300,741089
-/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/AbstractUnicodeExtraField.java:746933
+/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/AbstractUnicodeExtraField.java:746933,748063,748133
Propchange: ant/core/trunk/src/main/org/apache/tools/zip/ExtraFieldUtils.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 26 13:38:23 2009
@@ -1 +1 @@
-/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java:745528,746933
+/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java:745528,746933,748133
Modified: ant/core/trunk/src/main/org/apache/tools/zip/UnicodeCommentExtraField.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/zip/UnicodeCommentExtraField.java?rev=748147&r1=748146&r2=748147&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/zip/UnicodeCommentExtraField.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/zip/UnicodeCommentExtraField.java Thu Feb 26 13:38:23 2009
@@ -42,15 +42,26 @@
}
/**
- * Assemble as unicode comment extension form the comment and
+ * Assemble as unicode comment extension from the comment and
* encoding of the orginal zip entry.
*
- * @param name The file name
+ * @param comment The file comment
* @param zipEncoding The encoding of the comment in the zip file,
* usually <code>"CP437"</code>.
*/
- public UnicodeCommentExtraField(String name, String zipEncoding) {
- super(name, zipEncoding);
+ public UnicodeCommentExtraField(String comment, String zipEncoding) {
+ super(comment, zipEncoding);
+ }
+
+ /**
+ * Assemble as unicode comment extension from the comment given as
+ * text as well as the bytes actually written to the archive.
+ *
+ * @param comment The file comment
+ * @param bytes the bytes actually written to the archive
+ */
+ public UnicodeCommentExtraField(String comment, byte[] bytes) {
+ super(comment, bytes);
}
public ZipShort getHeaderId() {
Propchange: ant/core/trunk/src/main/org/apache/tools/zip/UnicodeCommentExtraField.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 26 13:38:23 2009
@@ -1,2 +1,2 @@
/ant/core/trunk/src/main/org/apache/tools/zip/UnicodeCommentExtraField.java:738844,739300,741089
-/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java:746933
+/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java:746933,748063,748133
Modified: ant/core/trunk/src/main/org/apache/tools/zip/UnicodePathExtraField.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/zip/UnicodePathExtraField.java?rev=748147&r1=748146&r2=748147&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/zip/UnicodePathExtraField.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/zip/UnicodePathExtraField.java Thu Feb 26 13:38:23 2009
@@ -42,7 +42,7 @@
}
/**
- * Assemble as unicode path extension form the name and encoding
+ * Assemble as unicode path extension from the name and encoding
* of the orginal zip entry.
*
* @param name The file name
@@ -53,6 +53,17 @@
super(name, zipEncoding);
}
+ /**
+ * Assemble as unicode path extension from the name given as
+ * text as well as the bytes actually written to the archive.
+ *
+ * @param name The file name
+ * @param bytes the bytes actually written to the archive
+ */
+ public UnicodePathExtraField(String name, byte[] bytes) {
+ super(name, bytes);
+ }
+
public ZipShort getHeaderId() {
return UPATH_ID;
}
Propchange: ant/core/trunk/src/main/org/apache/tools/zip/UnicodePathExtraField.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 26 13:38:23 2009
@@ -1,2 +1,2 @@
/ant/core/trunk/src/main/org/apache/tools/zip/UnicodePathExtraField.java:738844,739300,741089
-/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java:746933
+/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java:746933,748063,748133
Modified: ant/core/trunk/src/main/org/apache/tools/zip/ZipEncodingHelper.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/zip/ZipEncodingHelper.java?rev=748147&r1=748146&r2=748147&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/zip/ZipEncodingHelper.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/zip/ZipEncodingHelper.java Thu Feb 26 13:38:23 2009
@@ -75,17 +75,23 @@
* </pre>
*
* @param name The filename or comment with possible non-ASCII
- * unicode characters.
+ * unicode characters. Must not be null.
* @param encoding A valid encoding name. The standard zip
* encoding is <code>"CP437"</code>,
* <code>"UTF-8"</code> is supported in ZIP file
- * version <code>6.3</code> or later.
+ * version <code>6.3</code> or later. If null,
+ * will use the platform's {@link
+ * java.lang.String#getBytes default encoding}.
* @return A byte array containing the mapped file
* name. Unmappable characters or malformed character
* sequences are mapped to a sequence of utf-16 words
* encoded in the format <code>%Uxxxx</code>.
*/
static final byte[] encodeName(String name, String encoding) {
+ if (encoding == null) {
+ return name.getBytes();
+ }
+
Charset cs = Charset.forName(encoding);
CharsetEncoder enc = cs.newEncoder();
@@ -178,8 +184,12 @@
* <code>"UTF-8"</code> is supported in ZIP file
* version <code>6.3</code> or later.
*/
- static final String decodeName(byte[] name, String encoding) {
+ static final String decodeName(byte[] name, String encoding)
+ throws java.nio.charset.CharacterCodingException {
Charset cs = Charset.forName(encoding);
- return cs.decode(ByteBuffer.wrap(name)).toString();
+ return cs.newDecoder()
+ .onMalformedInput(CodingErrorAction.REPORT)
+ .onUnmappableCharacter(CodingErrorAction.REPORT)
+ .decode(ByteBuffer.wrap(name)).toString();
}
}
Propchange: ant/core/trunk/src/main/org/apache/tools/zip/ZipEncodingHelper.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 26 13:38:23 2009
@@ -1,2 +1,2 @@
/ant/core/trunk/src/main/org/apache/tools/zip/ZipEncodingHelper.java:738844,739300,741089
-/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipEncodingHelper.java:746933
+/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipEncodingHelper.java:746933,747841,748133
Modified: ant/core/trunk/src/main/org/apache/tools/zip/ZipEntry.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/zip/ZipEntry.java?rev=748147&r1=748146&r2=748147&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/zip/ZipEntry.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/zip/ZipEntry.java Thu Feb 26 13:38:23 2009
@@ -264,6 +264,18 @@
}
/**
+ * Looks up an extra field by its header id.
+ *
+ * @return null if no such field exists.
+ */
+ public ZipExtraField getExtraField(ZipShort type) {
+ if (extraFields != null) {
+ return (ZipExtraField) extraFields.get(type);
+ }
+ return null;
+ }
+
+ /**
* Throws an Exception if extra data cannot be parsed into extra fields.
* @param extra an array of bytes to be parsed into extra fields
* @throws RuntimeException if the bytes cannot be parsed
Propchange: ant/core/trunk/src/main/org/apache/tools/zip/ZipEntry.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Thu Feb 26 13:38:23 2009
@@ -0,0 +1,2 @@
+/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java:747850
+/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipEntry.java:746933,748133
Modified: ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java?rev=748147&r1=748146&r2=748147&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java Thu Feb 26 13:38:23 2009
@@ -23,12 +23,14 @@
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
+import java.nio.charset.CharacterCodingException;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
+import java.util.zip.CRC32;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
import java.util.zip.ZipException;
@@ -102,6 +104,11 @@
private RandomAccessFile archive;
/**
+ * Whether to look for and use Unicode extra fields.
+ */
+ private final boolean useUnicodeExtraFields;
+
+ /**
* Opens the given file for reading, assuming the platform's
* native encoding for file names.
*
@@ -127,7 +134,7 @@
/**
* Opens the given file for reading, assuming the specified
- * encoding for file names.
+ * encoding for file names and ignoring unicode extra fields.
*
* @param name name of the archive.
* @param encoding the encoding to use for file names
@@ -135,7 +142,21 @@
* @throws IOException if an error occurs while reading the file.
*/
public ZipFile(String name, String encoding) throws IOException {
- this(new File(name), encoding);
+ this(new File(name), encoding, false);
+ }
+
+ /**
+ * Opens the given file for reading, assuming the specified
+ * encoding for file names and ignoring unicode extra fields.
+ *
+ * @param f the archive.
+ * @param encoding the encoding to use for file names, use null
+ * for the platform's default encoding
+ *
+ * @throws IOException if an error occurs while reading the file.
+ */
+ public ZipFile(File f, String encoding) throws IOException {
+ this(f, encoding, false);
}
/**
@@ -144,16 +165,20 @@
*
* @param f the archive.
* @param encoding the encoding to use for file names
+ * @param whether to use InfoZIP Unicode Extra Fields (if present)
+ * to set the file names.
*
* @throws IOException if an error occurs while reading the file.
*/
- public ZipFile(File f, String encoding) throws IOException {
+ public ZipFile(File f, String encoding, boolean useUnicodeExtraFields)
+ throws IOException {
this.encoding = encoding;
+ this.useUnicodeExtraFields = useUnicodeExtraFields;
archive = new RandomAccessFile(f, "r");
boolean success = false;
try {
- populateFromCentralDirectory();
- resolveLocalFileHeaderData();
+ Map entriesWithoutEFS = populateFromCentralDirectory();
+ resolveLocalFileHeaderData(entriesWithoutEFS);
success = true;
} finally {
if (!success) {
@@ -270,9 +295,15 @@
* <p>The ZipEntrys will know all data that can be obtained from
* the central directory alone, but not the data that requires the
* local file header or additional data to be read.</p>
+ *
+ * @return a Map<ZipEntry, NameAndComment>> of
+ * zipentries that didn't have the language encoding flag set when
+ * read.
*/
- private void populateFromCentralDirectory()
+ private Map populateFromCentralDirectory()
throws IOException {
+ HashMap noEFS = new HashMap();
+
positionAtCentralDirectory();
byte[] cfh = new byte[CFH_LEN];
@@ -297,10 +328,10 @@
off += SHORT; // skip version info
final int generalPurposeFlag = ZipShort.getValue(cfh, off);
- final String entryEncoding =
- (generalPurposeFlag & ZipOutputStream.EFS_FLAG) != 0
- ? ZipOutputStream.UTF8
- : encoding;
+ final boolean hasEFS =
+ (generalPurposeFlag & ZipOutputStream.EFS_FLAG) != 0;
+ final String entryEncoding =
+ hasEFS ? ZipOutputStream.UTF8 : encoding;
off += SHORT;
@@ -368,7 +399,12 @@
archive.readFully(signatureBytes);
sig = ZipLong.getValue(signatureBytes);
+
+ if (!hasEFS && useUnicodeExtraFields) {
+ noEFS.put(ze, new NameAndComment(fileName, comment));
+ }
}
+ return noEFS;
}
private static final int MIN_EOCD_SIZE =
@@ -463,7 +499,7 @@
* <p>Also records the offsets for the data to read from the
* entries.</p>
*/
- private void resolveLocalFileHeaderData()
+ private void resolveLocalFileHeaderData(Map entriesWithoutEFS)
throws IOException {
Enumeration e = getEntries();
while (e.hasMoreElements()) {
@@ -494,6 +530,12 @@
*/
offsetEntry.dataOffset = offset + LFH_OFFSET_FOR_FILENAME_LENGTH
+ SHORT + SHORT + fileNameLen + extraFieldLen;
+
+ if (entriesWithoutEFS.containsKey(ze)) {
+ setNameAndCommentFromExtraFields(ze,
+ (NameAndComment)
+ entriesWithoutEFS.get(ze));
+ }
}
}
@@ -551,7 +593,11 @@
return new String(bytes);
} else {
try {
- return ZipEncodingHelper.decodeName(bytes, enc);
+ try {
+ return ZipEncodingHelper.decodeName(bytes, enc);
+ } catch (CharacterCodingException ex) {
+ throw new ZipException(ex.getMessage());
+ }
} catch (java.nio.charset.UnsupportedCharsetException ex) {
// Java 1.4's NIO doesn't recognize a few names that
// String.getBytes does
@@ -581,6 +627,64 @@
}
/**
+ * If the entry has Unicode*ExtraFields and the CRCs of the
+ * names/comments match those of the extra fields, transfer the
+ * known Unicode values from the extra field.
+ */
+ private void setNameAndCommentFromExtraFields(ZipEntry ze,
+ NameAndComment nc) {
+ UnicodePathExtraField name = (UnicodePathExtraField)
+ ze.getExtraField(UnicodePathExtraField.UPATH_ID);
+ String originalName = ze.getName();
+ String newName = getUnicodeStringIfOriginalMatches(name, nc.name);
+ if (newName != null && !originalName.equals(newName)) {
+ ze.setName(newName);
+ nameMap.remove(originalName);
+ nameMap.put(newName, ze);
+ }
+
+ if (nc.comment != null && nc.comment.length > 0) {
+ UnicodeCommentExtraField cmt = (UnicodeCommentExtraField)
+ ze.getExtraField(UnicodeCommentExtraField.UCOM_ID);
+ String newComment =
+ getUnicodeStringIfOriginalMatches(cmt, nc.comment);
+ if (newComment != null) {
+ ze.setComment(newComment);
+ }
+ }
+ }
+
+ /**
+ * If the stored CRC matches the one of the given name, return the
+ * Unicode name of the given field.
+ *
+ * <p>If the field is null or the CRCs don't match, return null
+ * instead.</p>
+ */
+ private String getUnicodeStringIfOriginalMatches(AbstractUnicodeExtraField f,
+ byte[] orig) {
+ if (f != null) {
+ CRC32 crc32 = new CRC32();
+ crc32.update(orig);
+ long origCRC32 = crc32.getValue();
+
+ if (origCRC32 == f.getNameCRC32()) {
+ try {
+ return ZipEncodingHelper
+ .decodeName(f.getUnicodeName(), ZipOutputStream.UTF8);
+ } catch (CharacterCodingException ex) {
+ // UTF-8 unsupported? should be impossible the
+ // Unicode*ExtraField must contain some bad bytes
+
+ // TODO log this anywhere?
+ return null;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
* InputStream that delegates requests to the underlying
* RandomAccessFile, making sure that only bytes from a certain
* range can be read.
@@ -647,4 +751,12 @@
}
}
+ private static final class NameAndComment {
+ private final byte[] name;
+ private final byte[] comment;
+ private NameAndComment(byte[] name, byte[] comment) {
+ this.name = name;
+ this.comment = comment;
+ }
+ }
}
Propchange: ant/core/trunk/src/main/org/apache/tools/zip/ZipFile.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 26 13:38:23 2009
@@ -1 +1 @@
-/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java:745920,746933
+/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java:745920,746933,748133
Modified: ant/core/trunk/src/main/org/apache/tools/zip/ZipOutputStream.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/zip/ZipOutputStream.java?rev=748147&r1=748146&r2=748147&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/zip/ZipOutputStream.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/zip/ZipOutputStream.java Thu Feb 26 13:38:23 2009
@@ -261,6 +261,11 @@
private boolean useEFS = true;
/**
+ * whether to create UnicodePathExtraField-s for each entry.
+ */
+ private boolean createUnicodeExtraFields = false;
+
+ /**
* Creates a new ZIP OutputStream filtering the underlying stream.
* @param out the outputstream to zip
* @since 1.1
@@ -335,15 +340,25 @@
}
/**
- * Whether to set the EFS flag if the file name encoding is UTF-8.
+ * Whether to set the language encoding flag if the file name
+ * encoding is UTF-8.
*
* <p>Defaults to true.</p>
*/
- public void setUseEFS(boolean b) {
+ public void setUseLanguageEncodingFlag(boolean b) {
useEFS = b && isUTF8(encoding);
}
/**
+ * Whether to create Unicode Extra Fields for all entries.
+ *
+ * <p>Defaults to false.</p>
+ */
+ public void setCreateUnicodeExtraFields(boolean b) {
+ createUnicodeExtraFields = b;
+ }
+
+ /**
* Finishs writing the contents and closes this as well as the
* underlying stream.
*
@@ -638,6 +653,17 @@
* @since 1.1
*/
protected void writeLocalFileHeader(ZipEntry ze) throws IOException {
+
+ byte[] name = getBytes(ze.getName());
+ if (createUnicodeExtraFields) {
+ ze.addExtraField(new UnicodePathExtraField(ze.getName(), name));
+ String comm = ze.getComment();
+ if (comm != null && !"".equals(comm)) {
+ byte[] commentB = getBytes(comm);
+ ze.addExtraField(new UnicodeCommentExtraField(comm, commentB));
+ }
+ }
+
offsets.put(ze, ZipLong.getBytes(written));
writeOut(LFH_SIG);
@@ -675,7 +701,6 @@
// CheckStyle:MagicNumber ON
// file name length
- byte[] name = getBytes(ze.getName());
writeOut(ZipShort.getBytes(name.length));
written += SHORT;
Propchange: ant/core/trunk/src/main/org/apache/tools/zip/ZipOutputStream.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 26 13:38:23 2009
@@ -1 +1 @@
-/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java:745920
+/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java:745920,747810,747841,748063