]> gcc.gnu.org Git - gcc.git/commitdiff
InflaterInputStream.java: New stub class.
authorPer Bothner <bothner@gcc.gnu.org>
Thu, 6 May 1999 00:15:45 +0000 (17:15 -0700)
committerPer Bothner <bothner@gcc.gnu.org>
Thu, 6 May 1999 00:15:45 +0000 (17:15 -0700)
8
* InflaterInputStream.java:  New stub class.
* ZipInputStream.java:  New class.  Partly works.
* ZipConstants.java:  Add two (internal) constants.
* ZipEntry.java (timeFromDOS):  New static (non-public) method.
* ZipFile.java:  Make it mostly work, except for compression.
* ZipOutputStream.java:  Start implementation.

From-SVN: r26794

libjava/java/util/zip/ZipEntry.java

index d472de50cd93d69f01e19c442dff9fe0893c714d..9eb34bab4dbb4999b10f95330129f11b5c6bd469 100644 (file)
@@ -33,6 +33,7 @@ public class ZipEntry
   String name;
   long size = -1;
   long time = -1;
+  long relativeOffset = -1;
 
   ZipEntry next;
 
@@ -80,5 +81,36 @@ public class ZipEntry
 
   public void setTime (long time) { this.time = time; }
 
+  private final static short[] daysToMonthStart = {
+    //Jan Feb Mar    Apr      May         Jun         Jul
+    0,    31, 31+28, 2*31+28, 2*31+28+30, 3*31+28+30, 3*31+28+2*30,
+    // Aug        Sep           Oct           Nov           Dec
+    4*31+28+2*30, 5*31+28+2*30, 5*31+28+3*30, 6*31+28+3*30, 6*31+28+4*30};
+
+  /** Convert a DOS-style type value to milliseconds since 1970. */
+  static long timeFromDOS (int date, int time)
+  {
+    int sec = 2 * (time & 0x1f);
+    int min = (time >> 5) & 0x3f;
+    int hrs = (time >> 11) & 0x1f;
+    int day = date & 0x1f;
+    int mon = ((date >> 5) & 0xf) - 1;
+    int year = ((date >> 9) & 0x7f) + 10;  /* Since 1970. */
+
+    // Guard against invalid or missing date causing IndexOutOfBoundsException.
+    if (mon < 0 || mon > 11)
+      return -1;
+
+    long mtime = (((hrs * 60) + min) * 60 + sec) * 1000;
+
+    // Leap year calculations are rather trivial in this case ...
+    int days = 365 * year + ((year+1)>>2);
+    days += daysToMonthStart[mon];
+    if ((year & 3) == 0 && mon > 1)
+      days++;
+    days += day;
+    return (days * 24*60*60L + ((hrs * 60) + min) * 60 + sec) * 1000L;
+  }
+
   public String toString () { return name; }
 }
This page took 0.061368 seconds and 5 git commands to generate.