1 /* 2 * Public domain stdio wrapper for libz, written by Johan Danielsson. 3 */ 4 5 #ifndef lint 6 static const char rcsid[] = 7 "$FreeBSD$"; 8 #endif /* not lint */ 9 10 #include <stdio.h> 11 #include <zlib.h> 12 13 FILE *zopen(const char *fname, const char *mode); 14 15 /* convert arguments */ 16 static int 17 xgzread(void *cookie, char *data, int size) 18 { 19 return gzread(cookie, data, size); 20 } 21 22 static int 23 xgzwrite(void *cookie, const char *data, int size) 24 { 25 return gzwrite(cookie, (void*)data, size); 26 } 27 28 FILE * 29 zopen(const char *fname, const char *mode) 30 { 31 gzFile gz = gzopen(fname, mode); 32 if(gz == NULL) 33 return NULL; 34 35 if(*mode == 'r') 36 return (funopen(gz, xgzread, NULL, NULL, gzclose)); 37 else 38 return (funopen(gz, NULL, xgzwrite, NULL, gzclose)); 39 } 40