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 2008/09/08 17:47:03 UTC

svn commit: r693139 - /harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/Segment.java

Author: sjanuary
Date: Mon Sep  8 08:47:02 2008
New Revision: 693139

URL: http://svn.apache.org/viewvc?rev=693139&view=rev
Log:
Apply patch for HARMONY-5970 ([pack200][classlib] SegmentHeader.archiveModtime is incorrect)

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=693139&r1=693138&r2=693139&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 Mon Sep  8 08:47:02 2008
@@ -28,6 +28,7 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.TimeZone;
 import java.util.jar.JarEntry;
 import java.util.jar.JarOutputStream;
 import java.util.zip.GZIPInputStream;
@@ -532,13 +533,20 @@
 
         for (int i = 0; i < numberOfFiles; i++) {
             String name = fileName[i];
-            long modtime = archiveModtime + fileModtime[i];
+            // For Pack200 archives, modtime is in seconds
+            // from the epoch. JarEntries need it to be in
+            // milliseconds from the epoch.
+            // Even though we're adding two longs and multiplying
+            // by 1000, we won't overflow because both longs are
+            // always under 2^32.
+            long modtime = 1000 * (archiveModtime + fileModtime[i]);
             boolean deflate = fileDeflate[i];
 
             JarEntry entry = new JarEntry(name);
             if (deflate)
                 entry.setMethod(ZipEntry.DEFLATED);
-            entry.setTime(modtime);
+            // On Windows at least, need to correct for timezone
+            entry.setTime(modtime - TimeZone.getDefault().getRawOffset());
             out.putNextEntry(entry);
 
             if (fileIsClass[i]) {