- const size_t write_size = BUFSIZ - strm->avail_out;
-
- if (fwrite(outbuf, 1, write_size, out) != write_size) {
- // Wouldn't be a surprise if writing to stderr
- // would fail too but at least try to show an
- // error message.
- fprintf(stderr, "Cannot write to output file stream: "
- "%s", strerror(errno));
- exit(EXIT_FAILURE);
+ size_t avail = BUFSIZ - strm->avail_out;
+ ssize_t written = 0;
+ uint8_t *start;
+
+ start = outbuf;
+
+ while (avail > 0) {
+ written = write(out, outbuf, avail);
+ if (written == -1) {
+ /* Wouldn't be a surprise if writing to
+ * stderr would fail too but at least
+ * try to show an error message.
+ */
+ fprintf(stderr, "Cannot write to output"
+ " file stream: %s",
+ strerror(errno));
+ return -1;
+ }
+ avail -= written;
+ start += written;
+ bytes += written;