diff options
author | michelou <michelou@epfl.ch> | 2007-05-31 18:43:38 +0000 |
---|---|---|
committer | michelou <michelou@epfl.ch> | 2007-05-31 18:43:38 +0000 |
commit | 96d7374b9bfd9c4917793a55149ac227fabbc3f3 (patch) | |
tree | 56e369a0975fca7376283918f669d937a53dc578 /src/compiler/scala/tools/nsc/io/ZipArchive.scala | |
parent | aac8bba0c25aef3c2e410d1f28818c8b1fe9266f (diff) | |
download | scala-96d7374b9bfd9c4917793a55149ac227fabbc3f3.tar.gz scala-96d7374b9bfd9c4917793a55149ac227fabbc3f3.tar.bz2 scala-96d7374b9bfd9c4917793a55149ac227fabbc3f3.zip |
Capitalized type params in Predef, fixed bug in...
Capitalized type params in Predef, fixed bug in URLZipArchive
Diffstat (limited to 'src/compiler/scala/tools/nsc/io/ZipArchive.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/io/ZipArchive.scala | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/src/compiler/scala/tools/nsc/io/ZipArchive.scala b/src/compiler/scala/tools/nsc/io/ZipArchive.scala index 8fcb553ba3..575e2ec854 100644 --- a/src/compiler/scala/tools/nsc/io/ZipArchive.scala +++ b/src/compiler/scala/tools/nsc/io/ZipArchive.scala @@ -108,7 +108,7 @@ final class ZipArchive(file: File, val archive: ZipFile) extends PlainFile(file) private def load() { this.root = new DirEntry("<root>", "/") // A path to DirEntry map - val dirs: Map[String,DirEntry] = new HashMap() + val dirs: Map[String, DirEntry] = new HashMap() dirs.update("/", root) val entries = archive.entries() while (entries.hasMoreElements()) { @@ -169,12 +169,12 @@ final class ZipArchive(file: File, val archive: ZipFile) extends PlainFile(file) extends Entry(name, path) { - val entries: Map[String,Entry] = new HashMap() + val entries: Map[String, Entry] = new HashMap() var entry: ZipEntry = _ override def isDirectory = true - override def read = throw new Error("cannot read directories") + override def input = throw new Error("cannot read directories") override def lastModified: Long = if (entry ne null) entry.getTime() else super.lastModified @@ -196,7 +196,7 @@ final class ZipArchive(file: File, val archive: ZipFile) extends PlainFile(file) extends Entry(name, path) { def archive = ZipArchive.this.archive override def lastModified: Long = entry.getTime() - override def read = archive.getInputStream(entry) + override def input = archive.getInputStream(entry) override def size = Some(entry.getSize().toInt) } } @@ -225,7 +225,7 @@ final class URLZipArchive(url: URL) extends AbstractFile { try { url.openConnection().getLastModified() } catch { case _ => 0 } - def read: InputStream = url.openStream() + def input: InputStream = url.openStream() override def elements: Iterator[AbstractFile] = { if (root eq null) load() @@ -238,11 +238,21 @@ final class URLZipArchive(url: URL) extends AbstractFile { } private def load() { + def getEntryInputStream(in: InputStream): InputStream = { + val buf = new scala.collection.mutable.ArrayBuffer[Byte] + val data = new Array[Byte](1024) + var n = in.read(data) + while (n > 0) { + buf.++=(data, 0, n) + n = in.read(data) + } + new java.io.ByteArrayInputStream(buf.toArray) + } this.root = new DirEntry("<root>", "/") // A path to DirEntry map val dirs: Map[String, DirEntry] = new HashMap() dirs.update("/", root) - val zis = new ZipInputStream(read) + val zis = new ZipInputStream(input) var entry = zis.getNextEntry() while (entry ne null) { val path = entry.getName() @@ -258,11 +268,12 @@ final class URLZipArchive(url: URL) extends AbstractFile { val home = if (index < 0) "/" else path.substring(0, index + 1) val parent: DirEntry = getDir(dirs, home) assert(!parent.entries.contains(path), this.toString() + " - " + path) - parent.entries.update(name, new FileEntry(name, path, zis)) + val in = getEntryInputStream(zis) + parent.entries.update(name, new FileEntry(name, path, entry, in)) } + zis.closeEntry() entry = zis.getNextEntry() } - zis.close } private def getDir(dirs: Map[String, DirEntry], path: String): DirEntry = @@ -294,7 +305,7 @@ final class URLZipArchive(url: URL) extends AbstractFile { var entry: ZipEntry = _ override def isDirectory = true - override def read = throw new Error("cannot read directories"); + override def input = throw new Error("cannot read directories") override def lastModified: Long = if (entry ne null) entry.getTime() else super.lastModified @@ -308,10 +319,11 @@ final class URLZipArchive(url: URL) extends AbstractFile { } } - final class FileEntry(name: String, path: String, val zis: ZipInputStream) - extends Entry(name, path) { - override def lastModified: Long = 0 - override def read = zis - override def size = Some(0) + final class FileEntry(name: String, path: String, + val entry: ZipEntry, val in: InputStream) + extends Entry(name, path) { + override def lastModified: Long = entry.getTime() + override def input = in + override def size = Some(entry.getSize().toInt) } } |