From a21e391f15491986955ad7b33f7995fc81266705 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Tue, 3 Jun 2014 23:09:44 +0900 Subject: [PATCH] Adding maybe-gunzip utility for optionally compressed inputs. --- lib/chibi/zlib.scm | 10 ++++++++++ lib/chibi/zlib.sld | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) 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"))