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