2016-12-09 15:43:38 +00:00
|
|
|
--- libinterp/dldfcn/gzip.cc.orig 2016-11-13 08:16:10.000000000 -0700
|
|
|
|
+++ libinterp/dldfcn/gzip.cc 2016-12-03 07:30:58.000000000 -0700
|
|
|
|
@@ -348,14 +348,18 @@
|
|
|
|
unsigned char buf_in[buf_len];
|
|
|
|
unsigned char buf_out[buf_len];
|
|
|
|
|
|
|
|
- while ((strm->avail_in = std::fread (buf_in, sizeof (buf_in[0]),
|
|
|
|
- buf_len, source.fp)) != 0)
|
|
|
|
+ int flush;
|
|
|
|
+
|
|
|
|
+ do
|
|
|
|
{
|
|
|
|
+ strm->avail_in = std::fread (buf_in, sizeof (buf_in[0]),
|
|
|
|
+ buf_len, source.fp);
|
|
|
|
+
|
|
|
|
if (std::ferror (source.fp))
|
|
|
|
throw std::runtime_error ("failed to read source file");
|
|
|
|
|
|
|
|
strm->next_in = buf_in;
|
|
|
|
- const int flush = std::feof (source.fp) ? Z_FINISH : Z_NO_FLUSH;
|
|
|
|
+ flush = std::feof (source.fp) ? Z_FINISH : Z_NO_FLUSH;
|
|
|
|
|
|
|
|
// If deflate returns Z_OK and with zero avail_out, it must be
|
|
|
|
// called again after making room in the output buffer because
|
|
|
|
@@ -376,8 +380,11 @@
|
2016-12-09 14:56:31 +00:00
|
|
|
while (strm->avail_out == 0);
|
|
|
|
|
|
|
|
if (strm->avail_in != 0)
|
|
|
|
- throw std::runtime_error ("failed to wrote file");
|
2016-12-09 15:43:38 +00:00
|
|
|
- }
|
2016-12-09 14:56:31 +00:00
|
|
|
+ throw std::runtime_error ("failed to write file");
|
2016-12-09 15:43:38 +00:00
|
|
|
+ } while (flush != Z_FINISH);
|
|
|
|
+
|
|
|
|
+ if (status != Z_STREAM_END)
|
|
|
|
+ throw std::runtime_error ("failed to write file");
|
2016-12-09 14:56:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|