+ z.avail_out = output_size;
+
+ if (limit) {
+ int limit_remaining = limit - bytes_written;
+ if (limit_remaining <= 0) {
+ // we're aborting ahead of time - throw an error?
+ break;
+ }
+ if (limit_remaining < output_size) {
+ z.avail_out = output_size = limit_remaining;
+ }
+ }