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