Home | History | Annotate | Line # | Download | only in savecore
zopen.c revision 1.2.52.1
      1  1.2.52.1       tls /*	$NetBSD: zopen.c,v 1.2.52.1 2013/02/25 00:28:11 tls 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.52.1       tls __RCSID("$NetBSD: zopen.c,v 1.2.52.1 2013/02/25 00:28:11 tls 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.2.52.1       tls 	return funopen(gz, xgzread, NULL, NULL, gzclose);
     39       1.1      joda     else
     40  1.2.52.1       tls 	return funopen(gz, NULL, xgzwrite, NULL, gzclose);
     41       1.1      joda }
     42