;; Temporary hack, need to rewrite in pure Scheme. ;;> Gzip compress a file in place, renaming with a .gz suffix. (define (gzip-file path) (system "gzip" path)) ;;> Gunzip decompress a file in place, removing any .gz suffix. (define (gunzip-file path) (system "gzip" "-d" path)) ;; Utility to filter a bytevector to a process and return the ;; accumulated output as a new bytevector. (define (process-pipe-bytevector cmd bvec) (call-with-process-io cmd (lambda (pid proc-in proc-out proc-err) ;; This could overflow the pipe. (write-bytevector bvec proc-in) (close-output-port proc-in) (let ((res (port->bytevector proc-out))) (waitpid pid 0) res)))) ;;> Gzip compress a string or bytevector in memory. (define (gzip x) (if (string? x) (gzip (string->utf8 x)) (process-pipe-bytevector '("gzip" "-c") x))) ;;> Gunzip decompress a bytevector in memory. (define (gunzip bvec) (process-pipe-bytevector '("gzip" "-c" "-d") bvec))