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