| Clazz.declarePackage ("java.util.zip"); | |
| Clazz.load (["java.util.zip.InflaterInputStream", "$.ZipConstants", "$.CRC32"], "java.util.zip.ZipInputStream", ["java.io.EOFException", "$.IOException", "$.PushbackInputStream", "java.lang.IllegalArgumentException", "$.IndexOutOfBoundsException", "$.Long", "$.NullPointerException", "java.util.zip.Inflater", "$.ZipEntry", "$.ZipException"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.entry = null; | |
| this.flag = 0; | |
| this.crc = null; | |
| this.remaining = 0; | |
| this.tmpbuf = null; | |
| this.$closed = false; | |
| this.entryEOF = false; | |
| this.zc = null; | |
| this.byteTest = null; | |
| this.$b = null; | |
| Clazz.instantialize (this, arguments); | |
| }, java.util.zip, "ZipInputStream", java.util.zip.InflaterInputStream, java.util.zip.ZipConstants); | |
| Clazz.prepareFields (c$, function () { | |
| this.crc = new java.util.zip.CRC32 (); | |
| this.tmpbuf = Clazz.newByteArray (512, 0); | |
| this.byteTest = Clazz.newByteArray (-1, [0x20]); | |
| this.$b = Clazz.newByteArray (256, 0); | |
| }); | |
| Clazz.defineMethod (c$, "ensureOpen", | |
| function () { | |
| if (this.$closed) { | |
| throw new java.io.IOException ("Stream closed"); | |
| }}); | |
| Clazz.makeConstructor (c$, | |
| function ($in) { | |
| Clazz.superConstructor (this, java.util.zip.ZipInputStream, [ new java.io.PushbackInputStream ($in, 1024), java.util.zip.ZipInputStream.newInflater (), 512]); | |
| var charset = "UTF-8"; | |
| try { | |
| String.instantialize (this.byteTest, charset); | |
| } catch (e) { | |
| if (Clazz.exceptionOf (e, java.io.UnsupportedEncodingException)) { | |
| throw new NullPointerException ("charset is invalid"); | |
| } else { | |
| throw e; | |
| } | |
| } | |
| this.zc = charset; | |
| }, "java.io.InputStream"); | |
| c$.newInflater = Clazz.defineMethod (c$, "newInflater", | |
| function () { | |
| return new java.util.zip.Inflater ().init (0, true); | |
| }); | |
| Clazz.defineMethod (c$, "getNextEntry", | |
| function () { | |
| this.ensureOpen (); | |
| if (this.entry != null) { | |
| this.closeEntry (); | |
| }this.crc.reset (); | |
| this.inflater = this.inf = java.util.zip.ZipInputStream.newInflater (); | |
| if ((this.entry = this.readLOC ()) == null) { | |
| return null; | |
| }if (this.entry.method == 0) { | |
| this.remaining = this.entry.size; | |
| }this.entryEOF = false; | |
| return this.entry; | |
| }); | |
| Clazz.defineMethod (c$, "closeEntry", | |
| function () { | |
| this.ensureOpen (); | |
| while (this.read (this.tmpbuf, 0, this.tmpbuf.length) != -1) { | |
| } | |
| this.entryEOF = true; | |
| }); | |
| Clazz.overrideMethod (c$, "available", | |
| function () { | |
| this.ensureOpen (); | |
| return (this.entryEOF ? 0 : 1); | |
| }); | |
| Clazz.defineMethod (c$, "read", | |
| function (b, off, len) { | |
| this.ensureOpen (); | |
| if (off < 0 || len < 0 || off > b.length - len) { | |
| throw new IndexOutOfBoundsException (); | |
| } else if (len == 0) { | |
| return 0; | |
| }if (this.entry == null) { | |
| return -1; | |
| }switch (this.entry.method) { | |
| case 8: | |
| len = this.readInf (b, off, len); | |
| if (len == -1) { | |
| this.readEnd (this.entry); | |
| this.entryEOF = true; | |
| this.entry = null; | |
| } else { | |
| this.crc.update (b, off, len); | |
| }return len; | |
| case 0: | |
| if (this.remaining <= 0) { | |
| this.entryEOF = true; | |
| this.entry = null; | |
| return -1; | |
| }if (len > this.remaining) { | |
| len = this.remaining; | |
| }len = this.$in.read (b, off, len); | |
| if (len == -1) { | |
| throw new java.util.zip.ZipException ("unexpected EOF"); | |
| }this.crc.update (b, off, len); | |
| this.remaining -= len; | |
| if (this.remaining == 0 && this.entry.crc != this.crc.getValue ()) { | |
| throw new java.util.zip.ZipException ("invalid entry CRC (expected 0x" + Long.toHexString (this.entry.crc) + " but got 0x" + Long.toHexString (this.crc.getValue ()) + ")"); | |
| }return len; | |
| default: | |
| throw new java.util.zip.ZipException ("invalid compression method"); | |
| } | |
| }, "~A,~N,~N"); | |
| Clazz.overrideMethod (c$, "skip", | |
| function (n) { | |
| if (n < 0) { | |
| throw new IllegalArgumentException ("negative skip length"); | |
| }this.ensureOpen (); | |
| var max = Math.min (n, 2147483647); | |
| var total = 0; | |
| while (total < max) { | |
| var len = max - total; | |
| if (len > this.tmpbuf.length) { | |
| len = this.tmpbuf.length; | |
| }len = this.read (this.tmpbuf, 0, len); | |
| if (len == -1) { | |
| this.entryEOF = true; | |
| break; | |
| }total += len; | |
| } | |
| return total; | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "close", | |
| function () { | |
| if (!this.$closed) { | |
| Clazz.superCall (this, java.util.zip.ZipInputStream, "close", []); | |
| this.$closed = true; | |
| }}); | |
| Clazz.defineMethod (c$, "readLOC", | |
| function () { | |
| try { | |
| this.readFully (this.tmpbuf, 0, 30); | |
| } catch (e) { | |
| if (Clazz.exceptionOf (e, java.io.EOFException)) { | |
| return null; | |
| } else { | |
| throw e; | |
| } | |
| } | |
| if (java.util.zip.ZipInputStream.get32 (this.tmpbuf, 0) != 67324752) { | |
| return null; | |
| }this.flag = java.util.zip.ZipInputStream.get16 (this.tmpbuf, 6); | |
| var len = java.util.zip.ZipInputStream.get16 (this.tmpbuf, 26); | |
| var blen = this.$b.length; | |
| if (len > blen) { | |
| do blen = blen * 2; | |
| while (len > blen); | |
| this.$b = Clazz.newByteArray (blen, 0); | |
| }this.readFully (this.$b, 0, len); | |
| var e = this.createZipEntry (((this.flag & 2048) != 0) ? this.toStringUTF8 (this.$b, len) : this.toStringb2 (this.$b, len)); | |
| if ((this.flag & 1) == 1) { | |
| throw new java.util.zip.ZipException ("encrypted ZIP entry not supported"); | |
| }e.method = java.util.zip.ZipInputStream.get16 (this.tmpbuf, 8); | |
| e.time = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 10); | |
| if ((this.flag & 8) == 8) { | |
| if (e.method != 8) { | |
| throw new java.util.zip.ZipException ("only DEFLATED entries can have EXT descriptor"); | |
| }} else { | |
| e.crc = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 14); | |
| e.csize = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 18); | |
| e.size = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 22); | |
| }len = java.util.zip.ZipInputStream.get16 (this.tmpbuf, 28); | |
| if (len > 0) { | |
| var bb = Clazz.newByteArray (len, 0); | |
| this.readFully (bb, 0, len); | |
| e.setExtra (bb); | |
| if (e.csize == 4294967295 || e.size == 4294967295) { | |
| var off = 0; | |
| while (off + 4 < len) { | |
| var sz = java.util.zip.ZipInputStream.get16 (bb, off + 2); | |
| if (java.util.zip.ZipInputStream.get16 (bb, off) == 1) { | |
| off += 4; | |
| if (sz < 16 || (off + sz) > len) { | |
| return e; | |
| }e.size = java.util.zip.ZipInputStream.get64 (bb, off); | |
| e.csize = java.util.zip.ZipInputStream.get64 (bb, off + 8); | |
| break; | |
| }off += (sz + 4); | |
| } | |
| }}return e; | |
| }); | |
| Clazz.defineMethod (c$, "toStringUTF8", | |
| function (b2, len) { | |
| try { | |
| return String.instantialize (b2, 0, len, this.zc); | |
| } catch (e) { | |
| if (Clazz.exceptionOf (e, java.io.UnsupportedEncodingException)) { | |
| return this.toStringb2 (b2, len); | |
| } else { | |
| throw e; | |
| } | |
| } | |
| }, "~A,~N"); | |
| Clazz.defineMethod (c$, "toStringb2", | |
| function (b2, len) { | |
| return String.instantialize (b2, 0, len); | |
| }, "~A,~N"); | |
| Clazz.defineMethod (c$, "createZipEntry", | |
| function (name) { | |
| return new java.util.zip.ZipEntry (name); | |
| }, "~S"); | |
| Clazz.defineMethod (c$, "readEnd", | |
| function (e) { | |
| var n = this.inf.getAvailIn (); | |
| if (n > 0) { | |
| (this.$in).unread (this.buf, this.len - n, n); | |
| this.eof = false; | |
| }if ((this.flag & 8) == 8) { | |
| if (this.inf.getTotalOut () > 4294967295 || this.inf.getTotalIn () > 4294967295) { | |
| this.readFully (this.tmpbuf, 0, 24); | |
| var sig = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 0); | |
| if (sig != 134695760) { | |
| e.crc = sig; | |
| e.csize = java.util.zip.ZipInputStream.get64 (this.tmpbuf, 4); | |
| e.size = java.util.zip.ZipInputStream.get64 (this.tmpbuf, 12); | |
| (this.$in).unread (this.tmpbuf, 19, 4); | |
| } else { | |
| e.crc = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 4); | |
| e.csize = java.util.zip.ZipInputStream.get64 (this.tmpbuf, 8); | |
| e.size = java.util.zip.ZipInputStream.get64 (this.tmpbuf, 16); | |
| }} else { | |
| this.readFully (this.tmpbuf, 0, 16); | |
| var sig = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 0); | |
| if (sig != 134695760) { | |
| e.crc = sig; | |
| e.csize = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 4); | |
| e.size = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 8); | |
| (this.$in).unread (this.tmpbuf, 11, 4); | |
| } else { | |
| e.crc = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 4); | |
| e.csize = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 8); | |
| e.size = java.util.zip.ZipInputStream.get32 (this.tmpbuf, 12); | |
| }}}if (e.size != this.inf.getTotalOut ()) { | |
| throw new java.util.zip.ZipException ("invalid entry size (expected " + e.size + " but got " + this.inf.getTotalOut () + " bytes)"); | |
| }if (e.csize != this.inf.getTotalIn ()) { | |
| throw new java.util.zip.ZipException ("invalid entry compressed size (expected " + e.csize + " but got " + this.inf.getTotalIn () + " bytes)"); | |
| }if (e.crc != this.crc.getValue ()) { | |
| throw new java.util.zip.ZipException ("invalid entry CRC (expected 0x" + Long.toHexString (e.crc) + " but got 0x" + Long.toHexString (this.crc.getValue ()) + ")"); | |
| }}, "java.util.zip.ZipEntry"); | |
| Clazz.defineMethod (c$, "readFully", | |
| function (b, off, len) { | |
| while (len > 0) { | |
| var n = this.$in.read (b, off, len); | |
| if (n == -1) { | |
| throw new java.io.EOFException (); | |
| }off += n; | |
| len -= n; | |
| } | |
| }, "~A,~N,~N"); | |
| c$.get16 = Clazz.defineMethod (c$, "get16", | |
| function (b, off) { | |
| return (b[off] & 0xff) | ((b[off + 1] & 0xff) << 8); | |
| }, "~A,~N"); | |
| c$.get32 = Clazz.defineMethod (c$, "get32", | |
| function (b, off) { | |
| return (java.util.zip.ZipInputStream.get16 (b, off) | (java.util.zip.ZipInputStream.get16 (b, off + 2) << 16)) & 0xffffffff; | |
| }, "~A,~N"); | |
| c$.get64 = Clazz.defineMethod (c$, "get64", | |
| function (b, off) { | |
| return java.util.zip.ZipInputStream.get32 (b, off) | (java.util.zip.ZipInputStream.get32 (b, off + 4) << 32); | |
| }, "~A,~N"); | |
| Clazz.defineStatics (c$, | |
| "STORED", 0, | |
| "DEFLATED", 8); | |
| }); | |