Home | History | Annotate | Line # | Download | only in zcat
zcat.c revision 1.3
      1  1.3  thorpej /*	$NetBSD: zcat.c,v 1.3 1998/11/12 16:49:47 thorpej Exp $	*/
      2  1.1      gwr 
      3  1.1      gwr /* mini zcat.c -- a minimal zcat using the zlib compression library
      4  1.1      gwr  * Copyright (C) 1995-1996 Jean-loup Gailly.
      5  1.1      gwr  * For conditions of distribution and use, see copyright notice in zlib.h
      6  1.1      gwr  */
      7  1.1      gwr 
      8  1.1      gwr /*
      9  1.1      gwr  * Credits, History:
     10  1.1      gwr  * This program is a reduced version of the minigzip.c
     11  1.1      gwr  * program originally written by Jean-loup Gailly.
     12  1.1      gwr  * This reduction is the work of Gordon Ross.
     13  1.1      gwr  */
     14  1.1      gwr 
     15  1.1      gwr #include <stdio.h>
     16  1.1      gwr #include <string.h>
     17  1.1      gwr #include <stdlib.h>
     18  1.1      gwr 
     19  1.1      gwr #include "zlib.h"
     20  1.1      gwr 
     21  1.1      gwr #define BUFLEN 4096
     22  1.1      gwr 
     23  1.1      gwr char *prog;
     24  1.1      gwr 
     25  1.1      gwr void error           __P((const char *msg));
     26  1.1      gwr void gz_uncompress   __P((gzFile in, FILE   *out));
     27  1.1      gwr int  main            __P((int argc, char *argv[]));
     28  1.1      gwr 
     29  1.1      gwr /* ===========================================================================
     30  1.1      gwr  * Display error message and exit
     31  1.1      gwr  */
     32  1.1      gwr void error(msg)
     33  1.1      gwr     const char *msg;
     34  1.1      gwr {
     35  1.1      gwr     fprintf(stderr, "%s: %s\n", prog, msg);
     36  1.1      gwr     exit(1);
     37  1.1      gwr }
     38  1.1      gwr 
     39  1.1      gwr /* ===========================================================================
     40  1.1      gwr  * Uncompress input to output then close both files.
     41  1.1      gwr  */
     42  1.1      gwr void gz_uncompress(in, out)
     43  1.1      gwr     gzFile in;
     44  1.1      gwr     FILE   *out;
     45  1.1      gwr {
     46  1.1      gwr     char buf[BUFLEN];
     47  1.1      gwr     int len;
     48  1.1      gwr     int err;
     49  1.1      gwr 
     50  1.1      gwr     for (;;) {
     51  1.1      gwr         len = gzread(in, buf, sizeof(buf));
     52  1.1      gwr         if (len < 0) error (gzerror(in, &err));
     53  1.1      gwr         if (len == 0) break;
     54  1.1      gwr 
     55  1.1      gwr         if ((int)fwrite(buf, 1, (unsigned)len, out) != len) {
     56  1.1      gwr 	    error("failed fwrite");
     57  1.1      gwr 	}
     58  1.1      gwr     }
     59  1.1      gwr     if (fclose(out)) error("failed fclose");
     60  1.1      gwr 
     61  1.1      gwr     if (gzclose(in) != Z_OK) error("failed gzclose");
     62  1.1      gwr }
     63  1.1      gwr 
     64  1.1      gwr 
     65  1.1      gwr /* ===========================================================================
     66  1.2      gwr  * Usage:  zcat [files...]
     67  1.1      gwr  */
     68  1.1      gwr 
     69  1.1      gwr int main(argc, argv)
     70  1.1      gwr     int argc;
     71  1.1      gwr     char *argv[];
     72  1.1      gwr {
     73  1.1      gwr     gzFile zfp;
     74  1.1      gwr 
     75  1.1      gwr 	/* save program name and skip */
     76  1.1      gwr     prog = argv[0];
     77  1.1      gwr     argc--, argv++;
     78  1.1      gwr 
     79  1.1      gwr 	/* ignore any switches */
     80  1.1      gwr 	while (*argv && (**argv == '-')) {
     81  1.1      gwr         argc--, argv++;
     82  1.1      gwr     }
     83  1.1      gwr 
     84  1.1      gwr     if (argc == 0) {
     85  1.1      gwr 		zfp = gzdopen(fileno(stdin), "rb");
     86  1.1      gwr 		if (zfp == NULL)
     87  1.1      gwr 			error("can't gzdopen stdin");
     88  1.1      gwr 		gz_uncompress(zfp, stdout);
     89  1.1      gwr 		return 0;
     90  1.1      gwr     }
     91  1.1      gwr 
     92  1.1      gwr 	do {
     93  1.1      gwr 		/* file_uncompress(*argv); */
     94  1.1      gwr 		zfp = gzopen(*argv, "rb");
     95  1.1      gwr 		if (zfp == NULL) {
     96  1.1      gwr 			fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv);
     97  1.1      gwr 			exit(1);
     98  1.1      gwr 		}
     99  1.1      gwr 		gz_uncompress(zfp, stdout);
    100  1.1      gwr 	} while (argv++, --argc);
    101  1.1      gwr     return 0; /* to avoid warning */
    102  1.2      gwr }
    103  1.2      gwr 
    104  1.2      gwr 
    105  1.2      gwr /*
    106  1.2      gwr  * XXX: hacks to keep gzio.c from pulling in deflate stuff
    107  1.2      gwr  */
    108  1.2      gwr 
    109  1.2      gwr int deflateInit2_ (z_streamp strm, int  level, int  method,
    110  1.2      gwr 				    int windowBits, int memLevel, int strategy,
    111  1.2      gwr 				    const char *version, int stream_size)
    112  1.2      gwr {
    113  1.2      gwr 	return(-1);
    114  1.2      gwr }
    115  1.2      gwr 
    116  1.2      gwr int deflate (z_streamp strm, int flush)
    117  1.2      gwr {
    118  1.2      gwr 	return(-1);
    119  1.2      gwr }
    120  1.2      gwr 
    121  1.2      gwr int deflateEnd (z_streamp strm)
    122  1.2      gwr {
    123  1.2      gwr 	return(-1);
    124  1.3  thorpej }
    125  1.3  thorpej 
    126  1.3  thorpej int deflateParams (z_streamp strm, int level, int strategy)
    127  1.3  thorpej {
    128  1.3  thorpej 	return(Z_STREAM_ERROR);
    129  1.1      gwr }
    130