You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sj...@apache.org on 2009/01/29 14:27:39 UTC
svn commit: r738855 -
/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/Segment.java
Author: sjanuary
Date: Thu Jan 29 13:27:38 2009
New Revision: 738855
URL: http://svn.apache.org/viewvc?rev=738855&view=rev
Log:
Unpack200 - Fix bug where Jar entries were always deflated instead of obeying settings
Modified:
harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/Segment.java
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/Segment.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/Segment.java?rev=738855&r1=738854&r2=738855&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/Segment.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/Segment.java Thu Jan 29 13:27:38 2009
@@ -31,6 +31,7 @@
import java.util.TimeZone;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
+import java.util.zip.CRC32;
import java.util.zip.GZIPInputStream;
import java.util.zip.ZipEntry;
@@ -528,7 +529,6 @@
long[] fileSize = fileBands.getFileSize();
byte[][] fileBits = fileBands.getFileBits();
- // out.setLevel(JarEntry.DEFLATED)
// now write the files out
int classNum = 0;
int numberOfFiles = header.getNumberOfFiles();
@@ -546,23 +546,32 @@
boolean deflate = fileDeflate[i];
JarEntry entry = new JarEntry(name);
- if (deflate)
+ if (deflate) {
entry.setMethod(ZipEntry.DEFLATED);
+ } else {
+ entry.setMethod(ZipEntry.STORED);
+ CRC32 crc = new CRC32();
+ if(fileIsClass[i]) {
+ crc.update(classFilesContents[classNum]);
+ entry.setSize(classFilesContents[classNum].length);
+ } else {
+ crc.update(fileBits[i]);
+ entry.setSize(fileSize[i]);
+ }
+ entry.setCrc(crc.getValue());
+ }
// On Windows at least, need to correct for timezone
entry.setTime(modtime - TimeZone.getDefault().getRawOffset());
out.putNextEntry(entry);
+ // write to output stream
if (fileIsClass[i]) {
- // write to dos
entry.setSize(classFilesContents[classNum].length);
out.write(classFilesContents[classNum]);
classNum++;
} else {
- long size = fileSize[i];
- entry.setSize(size);
-
- byte[] data = fileBits[i];
- out.write(data);
+ entry.setSize(fileSize[i]);
+ out.write(fileBits[i]);
}
}
}