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