Home | History | Annotate | Line # | Download | only in savecore
zopen.c revision 1.2
      1  1.2  christos /*	$NetBSD: zopen.c,v 1.2 2005/06/27 01:00:06 christos Exp $	*/
      2  1.1      joda 
      3  1.1      joda /*
      4  1.1      joda  * Public domain stdio wrapper for libz, written by Johan Danielsson.
      5  1.1      joda  */
      6  1.1      joda 
      7  1.1      joda #include <sys/cdefs.h>
      8  1.1      joda #ifndef lint
      9  1.2  christos __RCSID("$NetBSD: zopen.c,v 1.2 2005/06/27 01:00:06 christos Exp $");
     10  1.1      joda #endif
     11  1.1      joda 
     12  1.1      joda #include <stdio.h>
     13  1.1      joda #include <zlib.h>
     14  1.1      joda 
     15  1.1      joda FILE *zopen(const char *fname, const char *mode);
     16  1.1      joda 
     17  1.1      joda /* convert arguments */
     18  1.1      joda static int
     19  1.1      joda xgzread(void *cookie, char *data, int size)
     20  1.1      joda {
     21  1.1      joda     return gzread(cookie, data, size);
     22  1.1      joda }
     23  1.1      joda 
     24  1.1      joda static int
     25  1.1      joda xgzwrite(void *cookie, const char *data, int size)
     26  1.1      joda {
     27  1.2  christos     return gzwrite(cookie, __UNCONST(data), size);
     28  1.1      joda }
     29  1.1      joda 
     30  1.1      joda FILE *
     31  1.1      joda zopen(const char *fname, const char *mode)
     32  1.1      joda {
     33  1.1      joda     gzFile gz = gzopen(fname, mode);
     34  1.1      joda     if(gz == NULL)
     35  1.1      joda 	return NULL;
     36  1.1      joda 
     37  1.1      joda     if(*mode == 'r')
     38  1.1      joda 	return (funopen(gz, xgzread, NULL, NULL, gzclose));
     39  1.1      joda     else
     40  1.1      joda 	return (funopen(gz, NULL, xgzwrite, NULL, gzclose));
     41  1.1      joda }
     42