183138Skris/*
283138Skris * Public domain stdio wrapper for libz, written by Johan Danielsson.
383138Skris */
483138Skris
584228Sdillon#include <sys/cdefs.h>
6237410Sdelphij__FBSDID("$FreeBSD: head/lib/libz/zopen.c 84228 2001-09-30 22:39:00Z dillon $");
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
3283138SkrisFILE *
3383138Skriszopen(const char *fname, const char *mode)
3483138Skris{
3583138Skris    gzFile gz = gzopen(fname, mode);
3683138Skris    if(gz == NULL)
3783138Skris	return NULL;
3883138Skris
3983138Skris    if(*mode == 'r')
40237410Sdelphij	return (funopen(gz, xgzread, NULL, NULL, xgzclose));
4183138Skris    else
42237410Sdelphij	return (funopen(gz, NULL, xgzwrite, NULL, xgzclose));
4383138Skris}
44