zopen.c revision 83138
183138Skris/*
283138Skris * Public domain stdio wrapper for libz, written by Johan Danielsson.
383138Skris */
483138Skris
583138Skris#ifndef lint
683138Skrisstatic const char rcsid[] =
783138Skris  "$FreeBSD: head/lib/libz/zopen.c 83138 2001-09-06 09:14:49Z kris $";
883138Skris#endif /* not lint */
983138Skris
1083138Skris#include <stdio.h>
1183138Skris#include <zlib.h>
1283138Skris
1383138SkrisFILE *zopen(const char *fname, const char *mode);
1483138Skris
1583138Skris/* convert arguments */
1683138Skrisstatic int
1783138Skrisxgzread(void *cookie, char *data, int size)
1883138Skris{
1983138Skris    return gzread(cookie, data, size);
2083138Skris}
2183138Skris
2283138Skrisstatic int
2383138Skrisxgzwrite(void *cookie, const char *data, int size)
2483138Skris{
2583138Skris    return gzwrite(cookie, (void*)data, size);
2683138Skris}
2783138Skris
2883138SkrisFILE *
2983138Skriszopen(const char *fname, const char *mode)
3083138Skris{
3183138Skris    gzFile gz = gzopen(fname, mode);
3283138Skris    if(gz == NULL)
3383138Skris	return NULL;
3483138Skris
3583138Skris    if(*mode == 'r')
3683138Skris	return (funopen(gz, xgzread, NULL, NULL, gzclose));
3783138Skris    else
3883138Skris	return (funopen(gz, NULL, xgzwrite, NULL, gzclose));
3983138Skris}
40