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