diff options
author | Kris Kennaway <kris@FreeBSD.org> | 2001-09-06 09:14:49 +0000 |
---|---|---|
committer | Kris Kennaway <kris@FreeBSD.org> | 2001-09-06 09:14:49 +0000 |
commit | 131ee164c73c647e4ff13d9ba790c162b203a322 (patch) | |
tree | fa72792a338572b82ac9f5fbda0389e93a82df73 /lib/libz | |
parent | 19372e6db728a96bf8b72ac50e0f0721c9c20143 (diff) | |
download | src-131ee164c73c647e4ff13d9ba790c162b203a322.tar.gz src-131ee164c73c647e4ff13d9ba790c162b203a322.zip |
Add zopen(), a stdio wrapper for gzipped data streams.
Obtained from: NetBSD
Notes
Notes:
svn path=/head/; revision=83138
Diffstat (limited to 'lib/libz')
-rw-r--r-- | lib/libz/Makefile | 3 | ||||
-rw-r--r-- | lib/libz/zopen.c | 39 |
2 files changed, 41 insertions, 1 deletions
diff --git a/lib/libz/Makefile b/lib/libz/Makefile index c467e8b7ef7e..34ac28f9ac4b 100644 --- a/lib/libz/Makefile +++ b/lib/libz/Makefile @@ -17,7 +17,8 @@ CFLAGS+= -DHAS_snprintf -DHAS_vsnprintf CLEANFILES+= example.o example foo.gz minigzip.o minigzip SRCS = adler32.c compress.c crc32.c gzio.c uncompr.c deflate.c trees.c \ - zutil.c inflate.c infblock.c inftrees.c infcodes.c infutil.c inffast.c + zutil.c inflate.c infblock.c inftrees.c infcodes.c infutil.c \ + inffast.c zopen.c INCS= zconf.h zlib.h minigzip: all minigzip.o diff --git a/lib/libz/zopen.c b/lib/libz/zopen.c new file mode 100644 index 000000000000..33e6c7619a18 --- /dev/null +++ b/lib/libz/zopen.c @@ -0,0 +1,39 @@ +/* + * Public domain stdio wrapper for libz, written by Johan Danielsson. + */ + +#ifndef lint +static const char rcsid[] = + "$FreeBSD$"; +#endif /* not lint */ + +#include <stdio.h> +#include <zlib.h> + +FILE *zopen(const char *fname, const char *mode); + +/* convert arguments */ +static int +xgzread(void *cookie, char *data, int size) +{ + return gzread(cookie, data, size); +} + +static int +xgzwrite(void *cookie, const char *data, int size) +{ + return gzwrite(cookie, (void*)data, size); +} + +FILE * +zopen(const char *fname, const char *mode) +{ + gzFile gz = gzopen(fname, mode); + if(gz == NULL) + return NULL; + + if(*mode == 'r') + return (funopen(gz, xgzread, NULL, NULL, gzclose)); + else + return (funopen(gz, NULL, xgzwrite, NULL, gzclose)); +} |