summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMika T. Lindqvist <postmaster@raasu.org>2023-02-10 12:06:59 +0200
committerHans Kristian Rosbach <hk-github@circlestorm.org>2023-03-17 21:27:56 +0100
commit814904011ef63b6c53cf307c37e4c0a14ba968f8 (patch)
tree7f02ad832dbc6117932d387029f05fb69dd4b50b
parent496eefec9b58429fb8640e8940969eec80c481dc (diff)
[minigzip] Close gzFile before exiting on error.
-rw-r--r--test/minigzip.c21
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;