You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2013/07/17 16:39:10 UTC
svn commit: r1504155 - in /commons/proper/compress/branches/LZMA: ./
src/changes/ src/main/java/org/apache/commons/compress/archivers/tar/
src/main/java/org/apache/commons/compress/archivers/zip/
Author: bodewig
Date: Wed Jul 17 14:39:09 2013
New Revision: 1504155
URL: http://svn.apache.org/r1504155
Log:
merge from trunk
Modified:
commons/proper/compress/branches/LZMA/ (props changed)
commons/proper/compress/branches/LZMA/NOTICE.txt
commons/proper/compress/branches/LZMA/src/changes/changes.xml
commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/ (props changed)
commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarBuffer.java (contents, props changed)
commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/ (props changed)
commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java
commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java
commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java
commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
Propchange: commons/proper/compress/branches/LZMA/
------------------------------------------------------------------------------
Merged /commons/proper/compress/trunk:r1500025-1504154
Modified: commons/proper/compress/branches/LZMA/NOTICE.txt
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/NOTICE.txt?rev=1504155&r1=1504154&r2=1504155&view=diff
==============================================================================
--- commons/proper/compress/branches/LZMA/NOTICE.txt (original)
+++ commons/proper/compress/branches/LZMA/NOTICE.txt Wed Jul 17 14:39:09 2013
@@ -4,8 +4,6 @@ Copyright 2002-2013 The Apache Software
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
-====================
-
The files in the package org.apache.commons.compress.archivers.sevenz
were derived from the LZMA SDK, version 9.20 (C/ and CPP/7zip/),
which has been placed in the public domain:
Modified: commons/proper/compress/branches/LZMA/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/src/changes/changes.xml?rev=1504155&r1=1504154&r2=1504155&view=diff
==============================================================================
--- commons/proper/compress/branches/LZMA/src/changes/changes.xml (original)
+++ commons/proper/compress/branches/LZMA/src/changes/changes.xml Wed Jul 17 14:39:09 2013
@@ -76,6 +76,14 @@ The <action> type attribute can be add,u
The class now also provides two new methods to obtain all
entries of a given name rather than just the first one.
</action>
+ <action type="update" date="2013-07-08" issue="COMPRESS-232"
+ due-to="BELUGA BEHR">
+ Readabilty patch to TarArchiveInputStream.
+ </action>
+ <action type="update" date="2013-07-08" issue="COMPRESS-233"
+ due-to="BELUGA BEHR">
+ Performance and readability patch to TarBuffer.
+ </action>
</release>
<release version="1.5" date="2013-03-14"
description="Release 1.5">
Propchange: commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/
------------------------------------------------------------------------------
Merged /commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar:r1500025-1504154
Modified: commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java?rev=1504155&r1=1504154&r2=1504155&view=diff
==============================================================================
--- commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java (original)
+++ commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java Wed Jul 17 14:39:09 2013
@@ -233,7 +233,8 @@ public class TarArchiveInputStream exten
byte[] headerBuf = getRecord();
- if (hasHitEOF) {
+ if (headerBuf == null) {
+ /* hit EOF */
currEntry = null;
return null;
}
@@ -324,28 +325,27 @@ public class TarArchiveInputStream exten
* over any remaining data in the current entry, if there
* is one, and place the input stream at the header of the
* next entry.
- * If there are no more entries in the archive, null will
- * be returned to indicate that the end of the archive has
- * been reached.
+ *
+ * <p>If there are no more entries in the archive, null will be
+ * returned to indicate that the end of the archive has been
+ * reached. At the same time the {@code hasHitEOF} marker will be
+ * set to true.</p>
*
* @return The next header in the archive, or null.
* @throws IOException on error
*/
private byte[] getRecord() throws IOException {
- if (hasHitEOF) {
- return null;
- }
-
- byte[] headerBuf = buffer.readRecord();
-
- if (buffer.isEOFRecord(headerBuf)) {
- hasHitEOF = true;
- if (headerBuf != null) {
+ byte[] headerBuf = null;
+ if (!hasHitEOF) {
+ headerBuf = buffer.readRecord();
+ hasHitEOF = buffer.isEOFRecord(headerBuf);
+ if (hasHitEOF && headerBuf != null) {
buffer.tryToConsumeSecondEOFRecord();
+ headerBuf = null;
}
}
- return hasHitEOF ? null : headerBuf;
+ return headerBuf;
}
private void paxHeaders() throws IOException{
@@ -456,7 +456,7 @@ public class TarArchiveInputStream exten
TarArchiveSparseEntry entry;
do {
byte[] headerBuf = getRecord();
- if (hasHitEOF) {
+ if (headerBuf == null) {
currEntry = null;
break;
}
Modified: commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarBuffer.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarBuffer.java?rev=1504155&r1=1504154&r2=1504155&view=diff
==============================================================================
--- commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarBuffer.java (original)
+++ commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarBuffer.java Wed Jul 17 14:39:09 2013
@@ -44,6 +44,8 @@ class TarBuffer { // Not public, because
/** Default block size */
public static final int DEFAULT_BLKSIZE = (DEFAULT_RCDSIZE * 20);
+ private static final byte[] DEFAULT_EOF_RECORD = new byte[DEFAULT_RCDSIZE];
+
// TODO make these final? (would need to change close() method)
private InputStream inStream;
private OutputStream outStream;
@@ -51,6 +53,7 @@ class TarBuffer { // Not public, because
private final int recordSize;
private final int recsPerBlock;
private final byte[] blockBuffer;
+ private final byte[] eofRecord;
private int currBlkIdx;
private int currRecIdx;
@@ -119,6 +122,8 @@ class TarBuffer { // Not public, because
this.recordSize = recordSize;
this.recsPerBlock = (this.blockSize / this.recordSize);
this.blockBuffer = new byte[this.blockSize];
+ this.eofRecord = recordSize == DEFAULT_RCDSIZE
+ ? DEFAULT_EOF_RECORD : new byte[recordSize];
if (this.inStream != null) {
this.currBlkIdx = -1;
@@ -153,14 +158,7 @@ class TarBuffer { // Not public, because
* @return true if the record data is an End of Archive
*/
public boolean isEOFRecord(byte[] record) {
- if (record != null) {
- for (int i = 0, sz = getRecordSize(); i < sz; ++i) {
- if (record[i] != 0) {
- return false;
- }
- }
- }
- return true;
+ return record == null || Arrays.equals(record, eofRecord);
}
/**
Propchange: commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/tar/TarBuffer.java
------------------------------------------------------------------------------
Merged /commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarBuffer.java:r1500025-1504154
Propchange: commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/
------------------------------------------------------------------------------
Merged /commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip:r1500025-1504154
Modified: commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java?rev=1504155&r1=1504154&r2=1504155&view=diff
==============================================================================
--- commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java (original)
+++ commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.java Wed Jul 17 14:39:09 2013
@@ -24,15 +24,10 @@ package org.apache.commons.compress.arch
* <p>Stores the UTF-8 version of the file comment as stored in the
* central directory header.</p>
*
- * <pre>
- * Value Size Description
- * ----- ---- -----------
- * (UCom) 0x6375 Short tag for this extra block type ("uc")
- * TSize Short total data size for this block
- * Version 1 byte version of this extra field, currently 1
- * ComCRC32 4 bytes Comment Field CRC32 Checksum
- * UnicodeCom Variable UTF-8 version of the entry comment
- * </pre>
+ * <p>See {@link
+ * "http://www.pkware.com/documents/casestudies/APPNOTE.TXT PKWARE's
+ * APPNOTE.TXT, section 4.6.8"}.</p>
+ *
* @NotThreadSafe super-class is not thread-safe
*/
public class UnicodeCommentExtraField extends AbstractUnicodeExtraField {
Modified: commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java?rev=1504155&r1=1504154&r2=1504155&view=diff
==============================================================================
--- commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java (original)
+++ commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/UnicodePathExtraField.java Wed Jul 17 14:39:09 2013
@@ -24,15 +24,9 @@ package org.apache.commons.compress.arch
* <p>Stores the UTF-8 version of the file name field as stored in the
* local header and central directory header.</p>
*
- * <pre>
- * Value Size Description
- * ----- ---- -----------
- * (UPath) 0x7075 Short tag for this extra block type ("up")
- * TSize Short total data size for this block
- * Version 1 byte version of this extra field, currently 1
- * NameCRC32 4 bytes File Name Field CRC32 Checksum
- * UnicodeName Variable UTF-8 version of the entry File Name
- * </pre>
+ * <p>See {@link
+ * "http://www.pkware.com/documents/casestudies/APPNOTE.TXT PKWARE's
+ * APPNOTE.TXT, section 4.6.9"}.</p>
* @NotThreadSafe super-class is not thread-safe
*/
public class UnicodePathExtraField extends AbstractUnicodeExtraField {
Modified: commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java?rev=1504155&r1=1504154&r2=1504155&view=diff
==============================================================================
--- commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java (original)
+++ commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java Wed Jul 17 14:39:09 2013
@@ -27,42 +27,9 @@ import static org.apache.commons.compres
* Holds size and other extended information for entries that use Zip64
* features.
*
- * <p>From {@link "http://www.pkware.com/documents/casestudies/APPNOTE.TXT PKWARE's APPNOTE.TXT"}
- * <pre>
- * Zip64 Extended Information Extra Field (0x0001):
- *
- * The following is the layout of the zip64 extended
- * information "extra" block. If one of the size or
- * offset fields in the Local or Central directory
- * record is too small to hold the required data,
- * a Zip64 extended information record is created.
- * The order of the fields in the zip64 extended
- * information record is fixed, but the fields will
- * only appear if the corresponding Local or Central
- * directory record field is set to 0xFFFF or 0xFFFFFFFF.
- *
- * Note: all fields stored in Intel low-byte/high-byte order.
- *
- * Value Size Description
- * ----- ---- -----------
- * (ZIP64) 0x0001 2 bytes Tag for this "extra" block type
- * Size 2 bytes Size of this "extra" block
- * Original
- * Size 8 bytes Original uncompressed file size
- * Compressed
- * Size 8 bytes Size of compressed data
- * Relative Header
- * Offset 8 bytes Offset of local header record
- * Disk Start
- * Number 4 bytes Number of the disk on which
- * this file starts
- *
- * This entry in the Local header must include BOTH original
- * and compressed file size fields. If encrypting the
- * central directory and bit 13 of the general purpose bit
- * flag is set indicating masking, the value stored in the
- * Local Header for the original file size will be zero.
- * </pre></p>
+ * <p>See {@link
+ * "http://www.pkware.com/documents/casestudies/APPNOTE.TXT PKWARE's
+ * APPNOTE.TXT, section 4.5.3"}.</p>
*
* <p>Currently Commons Compress doesn't support encrypting the
* central directory so the note about masking doesn't apply.</p>
Modified: commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java?rev=1504155&r1=1504154&r2=1504155&view=diff
==============================================================================
--- commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java (original)
+++ commons/proper/compress/branches/LZMA/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java Wed Jul 17 14:39:09 2013
@@ -113,38 +113,38 @@ public class ZipArchiveInputStream exten
private static final int LFH_LEN = 30;
/*
- local file header signature 4 bytes (0x04034b50)
- version needed to extract 2 bytes
- general purpose bit flag 2 bytes
- compression method 2 bytes
- last mod file time 2 bytes
- last mod file date 2 bytes
- crc-32 4 bytes
- compressed size 4 bytes
- uncompressed size 4 bytes
- file name length 2 bytes
- extra field length 2 bytes
+ local file header signature WORD
+ version needed to extract SHORT
+ general purpose bit flag SHORT
+ compression method SHORT
+ last mod file time SHORT
+ last mod file date SHORT
+ crc-32 WORD
+ compressed size WORD
+ uncompressed size WORD
+ file name length SHORT
+ extra field length SHORT
*/
private static final int CFH_LEN = 46;
/*
- central file header signature 4 bytes (0x02014b50)
- version made by 2 bytes
- version needed to extract 2 bytes
- general purpose bit flag 2 bytes
- compression method 2 bytes
- last mod file time 2 bytes
- last mod file date 2 bytes
- crc-32 4 bytes
- compressed size 4 bytes
- uncompressed size 4 bytes
- file name length 2 bytes
- extra field length 2 bytes
- file comment length 2 bytes
- disk number start 2 bytes
- internal file attributes 2 bytes
- external file attributes 4 bytes
- relative offset of local header 4 bytes
+ central file header signature WORD
+ version made by SHORT
+ version needed to extract SHORT
+ general purpose bit flag SHORT
+ compression method SHORT
+ last mod file time SHORT
+ last mod file date SHORT
+ crc-32 WORD
+ compressed size WORD
+ uncompressed size WORD
+ file name length SHORT
+ extra field length SHORT
+ file comment length SHORT
+ disk number start SHORT
+ internal file attributes SHORT
+ external file attributes WORD
+ relative offset of local header WORD
*/
private static final long TWO_EXP_32 = ZIP64_MAGIC + 1;
@@ -860,20 +860,20 @@ public class ZipArchiveInputStream exten
}
// End of Central Directory Record
- // end of central dir signature 4 bytes (0x06054b50)
- // number of this disk 2 bytes
+ // end of central dir signature WORD
+ // number of this disk SHORT
// number of the disk with the
- // start of the central directory 2 bytes
+ // start of the central directory SHORT
// total number of entries in the
- // central directory on this disk 2 bytes
+ // central directory on this disk SHORT
// total number of entries in
- // the central directory 2 bytes
- // size of the central directory 4 bytes
+ // the central directory SHORT
+ // size of the central directory WORD
// offset of start of central
// directory with respect to
- // the starting disk number 4 bytes
- // .ZIP file comment length 2 bytes
- // .ZIP file comment (variable size)
+ // the starting disk number WORD
+ // .ZIP file comment length SHORT
+ // .ZIP file comment up to 64KB
//
/**