diff options
author | Mika T. Lindqvist <postmaster@raasu.org> | 2023-02-10 12:06:59 +0200 |
---|---|---|
committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2023-03-17 21:27:56 +0100 |
commit | 814904011ef63b6c53cf307c37e4c0a14ba968f8 (patch) | |
tree | 7f02ad832dbc6117932d387029f05fb69dd4b50b | |
parent | 496eefec9b58429fb8640e8940969eec80c481dc (diff) |
[minigzip] Close gzFile before exiting on error.
-rw-r--r-- | test/minigzip.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/test/minigzip.c b/test/minigzip.c index 29729f3..d1b9e68 100644 --- a/test/minigzip.c +++ b/test/minigzip.c @@ -64,6 +64,7 @@ extern int unlink (const char *); static char *prog; void error (const char *msg); +void gz_fatal (gzFile file); void gz_compress (FILE *in, gzFile out); #ifdef USE_MMAP int gz_compress_mmap (FILE *in, gzFile out); @@ -82,13 +83,23 @@ void error(const char *msg) { } /* =========================================================================== + * Display last error message of gzFile, close it and exit + */ + +void gz_fatal(gzFile file) { + int err; + fprintf(stderr, "%s: %s\n", prog, PREFIX(gzerror)(file, &err)); + PREFIX(gzclose)(file); + exit(1); +} + +/* =========================================================================== * Compress input to output then close both files. */ void gz_compress(FILE *in, gzFile out) { char *buf; int len; - int err; #ifdef USE_MMAP /* Try first compressing with mmap. If mmap fails (minigzip used in a @@ -111,7 +122,7 @@ void gz_compress(FILE *in, gzFile out) { } if (len == 0) break; - if (PREFIX(gzwrite)(out, buf, (unsigned)len) != len) error(PREFIX(gzerror)(out, &err)); + if (PREFIX(gzwrite)(out, buf, (unsigned)len) != len) gz_fatal(out); } free(buf); fclose(in); @@ -125,7 +136,6 @@ void gz_compress(FILE *in, gzFile out) { */ int gz_compress_mmap(FILE *in, gzFile out) { int len; - int err; int ifd = fileno(in); char *buf; /* mmap'ed buffer for the entire input file */ off_t buf_len; /* length of the input file */ @@ -143,7 +153,7 @@ int gz_compress_mmap(FILE *in, gzFile out) { /* Compress the whole file at once: */ len = PREFIX(gzwrite)(out, buf, (unsigned)buf_len); - if (len != (int)buf_len) error(PREFIX(gzerror)(out, &err)); + if (len != (int)buf_len) gz_fatal(out); munmap(buf, buf_len); fclose(in); @@ -158,7 +168,6 @@ int gz_compress_mmap(FILE *in, gzFile out) { void gz_uncompress(gzFile in, FILE *out) { char *buf = (char *)malloc(BUFLENW); int len; - int err; if (buf == NULL) error("out of memory"); @@ -166,7 +175,7 @@ void gz_uncompress(gzFile in, FILE *out) { len = PREFIX(gzread)(in, buf, BUFLENW); if (len < 0) { free(buf); - error(PREFIX(gzerror)(in, &err)); + gz_fatal(in); } if (len == 0) break; |