183138Skris/* 283138Skris * Public domain stdio wrapper for libz, written by Johan Danielsson. 383138Skris */ 483138Skris 584228Sdillon#include <sys/cdefs.h> 6257462Semaste__FBSDID("$FreeBSD: releng/11.0/lib/libz/zopen.c 257462 2013-10-31 18:44:40Z emaste $"); 783138Skris 883138Skris#include <stdio.h> 983138Skris#include <zlib.h> 1083138Skris 1183138SkrisFILE *zopen(const char *fname, const char *mode); 1283138Skris 1383138Skris/* convert arguments */ 1483138Skrisstatic int 1583138Skrisxgzread(void *cookie, char *data, int size) 1683138Skris{ 1783138Skris return gzread(cookie, data, size); 1883138Skris} 1983138Skris 2083138Skrisstatic int 2183138Skrisxgzwrite(void *cookie, const char *data, int size) 2283138Skris{ 2383138Skris return gzwrite(cookie, (void*)data, size); 2483138Skris} 2583138Skris 26237410Sdelphijstatic int 27237410Sdelphijxgzclose(void *cookie) 28237410Sdelphij{ 29237410Sdelphij return gzclose(cookie); 30237410Sdelphij} 31237410Sdelphij 32256644Sdelphijstatic fpos_t 33256644Sdelphijxgzseek(void *cookie, fpos_t offset, int whence) 34256644Sdelphij{ 35256644Sdelphij return gzseek(cookie, (z_off_t)offset, whence); 36256644Sdelphij} 37256644Sdelphij 3883138SkrisFILE * 3983138Skriszopen(const char *fname, const char *mode) 4083138Skris{ 4183138Skris gzFile gz = gzopen(fname, mode); 4283138Skris if(gz == NULL) 4383138Skris return NULL; 4483138Skris 4583138Skris if(*mode == 'r') 46256644Sdelphij return (funopen(gz, xgzread, NULL, xgzseek, xgzclose)); 4783138Skris else 48256644Sdelphij return (funopen(gz, NULL, xgzwrite, xgzseek, xgzclose)); 4983138Skris} 50