diff --git a/lib/chibi/zlib.scm b/lib/chibi/zlib.scm index 3baa0c7b..c2cf44e2 100644 --- a/lib/chibi/zlib.scm +++ b/lib/chibi/zlib.scm @@ -35,3 +35,13 @@ (define (gunzip bvec) (process-pipe-bytevector '("gzip" "-c" "-d") bvec)) + +;;> Gunzip decompress a bytevector in memory if it has been +;;> compressed, or return as-is otherwise. + +(define (maybe-gunzip bvec) + (if (and (>= (bytevector-length bvec) 10) + (eqv? #x1f (bytevector-u8-ref bvec 0)) + (eqv? #x8b (bytevector-u8-ref bvec 1))) + (gunzip bvec) + bvec)) diff --git a/lib/chibi/zlib.sld b/lib/chibi/zlib.sld index 576b4515..252b46a0 100644 --- a/lib/chibi/zlib.sld +++ b/lib/chibi/zlib.sld @@ -1,5 +1,5 @@ (define-library (chibi zlib) - (export gzip-file gunzip-file gzip gunzip) + (export gzip-file gunzip-file gzip gunzip maybe-gunzip) (import (scheme base) (chibi io) (chibi process)) (include "zlib.scm"))