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