+# similar to ->translate; use this when we're sure we know we have
+# more data to buffer after this
+sub zmore {
+ my $self = $_[0]; # $_[1] => input
+ my $err = $self->{gz}->deflate($_[1], $self->{zbuf});
+ die "gzip->deflate: $err" if $err != Z_OK;
+ '';
+}
+
+# flushes and returns the final bit of gzipped data
+sub zflush ($;$) {
+ my $self = $_[0]; # $_[1] => final input (optional)
+ my $zbuf = delete $self->{zbuf};
+ my $gz = delete $self->{gz};
+ my $err;
+ if (defined $_[1]) {
+ $err = $gz->deflate($_[1], $zbuf);
+ die "gzip->deflate: $err" if $err != Z_OK;
+ }
+ $err = $gz->flush($zbuf, Z_FINISH);
+ die "gzip->flush: $err" if $err != Z_OK;
+ $zbuf;
+}
+