diff --git a/usr.bin/gzip/gzip.c b/usr.bin/gzip/gzip.c index e6f9a2e5e2c4..5658002f09e9 100644 --- a/usr.bin/gzip/gzip.c +++ b/usr.bin/gzip/gzip.c @@ -1429,6 +1429,7 @@ file_uncompress(char *file, char *outfile, size_t outsize) unsigned char header1[4]; enum filetype method; int fd, ofd, zfd = -1; + int err; size_t in_size; #ifndef SMALL ssize_t rv; @@ -1601,14 +1602,21 @@ file_uncompress(char *file, char *outfile, size_t outsize) size = zuncompress(in, out, NULL, 0, NULL); /* need to fclose() if ferror() is true... */ - if (ferror(in) | fclose(in)) { - maybe_warn("failed infile fclose"); - unlink(outfile); + err = ferror(in); + if (err | fclose(in)) { + if (err) + maybe_warn("failed infile"); + else + maybe_warn("failed infile fclose"); + if (cflag == 0) + unlink(outfile); (void)fclose(out); + goto lose; } if (fclose(out) != 0) { maybe_warn("failed outfile fclose"); - unlink(outfile); + if (cflag == 0) + unlink(outfile); goto lose; } break;