Mercurial > flash_v2
changeset 330:2525052c5d76
Fix compressed file loads.
| author | msalter |
|---|---|
| date | Thu, 12 Sep 2002 21:23:10 +0000 |
| parents | 85c0eb753287 |
| children | 83cd88af1211 |
| files | packages/redboot/current/ChangeLog packages/redboot/current/src/decompress.c packages/redboot/current/src/load.c |
| diffstat | 3 files changed, 29 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/redboot/current/ChangeLog +++ b/packages/redboot/current/ChangeLog @@ -1,3 +1,11 @@ +2002-09-12 Mark Salter <msalter@redhat.com> + + * src/decompress.c (gzip_inflate): Fix error return so that upper + doesn't quit on Z_STREAM_END. + (gzip_close): Move error handling into gzip_inflate. + + * src/load.c (do_load): Fix printing of address range for raw loads. + 2002-09-11 Mark Salter <msalter@redhat.com> * src/main.c (do_go): Turn on line flushes before jumping to function.
--- 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;
--- a/packages/redboot/current/src/load.c +++ b/packages/redboot/current/src/load.c @@ -733,7 +733,7 @@ do_load(int argc, char *argv[]) redboot_getc_terminate(false); if (0 == err) diag_printf("Raw file loaded %p-%p, assumed entry at %p\n", - (void *)base, (void *)end, (void*)base); + (void *)base, (void *)(end - 1), (void*)base); } else { // Read initial header - to determine file [image] type for (i = 0; i < sizeof(type); i++) {
