[plt-scheme] inflate, jar/zip compatibility?
At Thu, 15 Jul 2004 16:38:04 -0400 (EDT), "David A. Herman" wrote:
> The following code causes an "error in compressed data":
>
> (with-input-from-file "/usr/local/j2sdk1.4.2_04/jre/lib/rt.jar"
> (lambda ()
> (inflate (current-input-port)
> (current-output-port))))
>
> Is this because the rt.jar file doesn't use compression, or maybe that
> it's a newer zip format?
`inflate' will decompress file content from a .jar stream, but first
you must process the header for each file.
More information on the .zip format:
http://www.pkware.com/products/enterprise/white_papers/appnote.txt
The `inflate' function can be used at the point where you get to "[data
descriptor 1]". I think that `inflate' will stop before reading the
bytes for "[local file header 2]", but I'm not sure about that. If I'm
wrong, use `make-limited-input-port' to limit the number of bytes that
`inflate' can extract from the port.
There's a similar header for `gzip', which is handled by the `gunzip'
(or `gunzip-through-ports') function from "inflate.ss". But `gzip' is
different (and there's only one file).
Matthew