zopen.c revision 84228
183138Skris/*
283138Skris * Public domain stdio wrapper for libz, written by Johan Danielsson.
383138Skris */
483138Skris
584228Sdillon#include <sys/cdefs.h>
684228Sdillon__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
2683138SkrisFILE *
2783138Skriszopen(const char *fname, const char *mode)
2883138Skris{
2983138Skris    gzFile gz = gzopen(fname, mode);
3083138Skris    if(gz == NULL)
3183138Skris	return NULL;
3283138Skris
3383138Skris    if(*mode == 'r')
3483138Skris	return (funopen(gz, xgzread, NULL, NULL, gzclose));
3583138Skris    else
3683138Skris	return (funopen(gz, NULL, xgzwrite, NULL, gzclose));
3783138Skris}
38