diff --git a/basis/compression/zlib/zlib.factor b/basis/compression/zlib/zlib.factor index 02a40defcf..4016dde047 100644 --- a/basis/compression/zlib/zlib.factor +++ b/basis/compression/zlib/zlib.factor @@ -1,6 +1,6 @@ ! Copyright (C) 2009 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: alien alien.c-types alien.data alien.syntax byte-arrays +USING: alien alien.c-types alien.data alien.syntax byte-vectors combinators kernel math math.functions sequences system accessors libc ; QUALIFIED: compression.zlib.ffi @@ -36,15 +36,19 @@ ERROR: zlib-failed n string ; : compress ( byte-array -- compressed ) [ - [ compressed-size dup length ulong ] keep [ + [ + compressed-size + [ dup underlying>> ] keep ulong + ] keep [ dup length compression.zlib.ffi:compress zlib-error - ] 3keep drop ulong deref head + ] 2keep drop ulong deref >>length B{ } like ] keep length ; : uncompress ( compressed -- byte-array ) [ - length>> [ ] keep ulong 2dup + length>> [ dup underlying>> ] keep + ulong ] [ - data>> dup length - compression.zlib.ffi:uncompress zlib-error - ] bi ulong deref head ; + data>> dup length pick + [ compression.zlib.ffi:uncompress zlib-error ] dip + ] bi ulong deref >>length B{ } like ;