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);
exit(1);
}
+/* ===========================================================================
+ * 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
}
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);
*/
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 */
/* 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);
void gz_uncompress(gzFile in, FILE *out) {
char *buf = (char *)malloc(BUFLENW);
int len;
- int err;
if (buf == NULL) error("out of memory");
len = PREFIX(gzread)(in, buf, BUFLENW);
if (len < 0) {
free(buf);
- error(PREFIX(gzerror)(in, &err));
+ gz_fatal(in);
}
if (len == 0) break;