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