Mercurial > nand-ecoscentric
diff packages/redboot/current/src/decompress.c @ 330:2525052c5d76
Fix compressed file loads.
| author | msalter |
|---|---|
| date | Thu, 12 Sep 2002 21:23:10 +0000 |
| parents | 906a5d289c6d |
| children | 83cd88af1211 |
line wrap: on
line diff
--- a/packages/redboot/current/src/decompress.c +++ b/packages/redboot/current/src/decompress.c @@ -271,19 +271,37 @@ gzip_init(_pipe_t* p) static int gzip_inflate(_pipe_t* p) { - int err; + int err, bytes_out; stream.next_in = p->in_buf; stream.avail_in = p->in_avail; stream.next_out = p->out_buf; stream.avail_out = p->out_max; err = inflate(&stream, Z_SYNC_FLUSH); - p->out_size += (stream.next_out - p->out_buf); + bytes_out = stream.next_out - p->out_buf; + p->out_size += bytes_out; p->out_buf = stream.next_out; p->msg = stream.msg; p->in_avail = stream.avail_in; p->in_buf = stream.next_in; + switch (err) { + case Z_STREAM_END: + p->in_avail = 0; + err = 0; + break; + case Z_OK: + if (bytes_out == 0) { + // Decompression didn't complete + err = -1; + p->msg = "premature end of input"; + } else + err = 0; + break; + default: + err = -1; + break; + } return err; } @@ -295,19 +313,6 @@ gzip_inflate(_pipe_t* p) static int gzip_close(_pipe_t* p, int err) { - switch (err) { - case Z_STREAM_END: - err = 0; - break; - case Z_OK: - // Decompression didn't complete - p->msg = "premature end of input"; - // fall-through - default: - err = -1; - break; - } - inflateEnd(&stream); return err;
