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