Date: Thu, 6 Dec 2018 20:03:06 +0000 (UTC) From: Mark Johnston <markj@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r341648 - head/lib/libz Message-ID: <201812062003.wB6K36NC035810@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: markj Date: Thu Dec 6 20:03:06 2018 New Revision: 341648 URL: https://svnweb.freebsd.org/changeset/base/341648 Log: Add zdopen(3) to complement zopen(3). zdopen() can be used in capability mode. Update zopen.3 accordingly and fix some grammar nits while I'm here. Reviewed by: delphij MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D18456 Modified: head/lib/libz/Makefile head/lib/libz/Symbol.map head/lib/libz/Versions.def head/lib/libz/zopen.3 head/lib/libz/zopen.c Modified: head/lib/libz/Makefile ============================================================================== --- head/lib/libz/Makefile Thu Dec 6 19:49:08 2018 (r341647) +++ head/lib/libz/Makefile Thu Dec 6 20:03:06 2018 (r341648) @@ -7,6 +7,7 @@ LIB= z SHLIBDIR?= /lib SHLIB_MAJOR= 6 MAN= zlib.3 zopen.3 +MLINKS+= zopen.3 zdopen.3 ZLIBSRC= ${SRCTOP}/contrib/zlib Modified: head/lib/libz/Symbol.map ============================================================================== --- head/lib/libz/Symbol.map Thu Dec 6 19:49:08 2018 (r341647) +++ head/lib/libz/Symbol.map Thu Dec 6 20:03:06 2018 (r341648) @@ -103,6 +103,10 @@ FBSD_1.2 { zopen; }; +FBSD_1.6 { + zdopen; +}; + ZLIBprivate_1.0 { _tr_align; _tr_flush_block; Modified: head/lib/libz/Versions.def ============================================================================== --- head/lib/libz/Versions.def Thu Dec 6 19:49:08 2018 (r341647) +++ head/lib/libz/Versions.def Thu Dec 6 20:03:06 2018 (r341648) @@ -15,6 +15,9 @@ ZLIB_1.2.9 { FBSD_1.2 { } ZLIB_1.2.4.0; +FBSD_1.6 { +} FBSD_1.2; + ZLIBprivate_1.0 { } ZLIB_1.2.4.0; Modified: head/lib/libz/zopen.3 ============================================================================== --- head/lib/libz/zopen.3 Thu Dec 6 19:49:08 2018 (r341647) +++ head/lib/libz/zopen.3 Thu Dec 6 20:03:06 2018 (r341648) @@ -23,7 +23,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 5, 2014 +.Dd December 6, 2018 .Dt ZOPEN 3 .Os .Sh NAME @@ -34,33 +34,44 @@ .Sh SYNOPSIS .Ft FILE * .Fn zopen "const char *path" "const char *mode" +.Ft FILE * +.Fn zdopen "int fd" "const char *mode" .Sh DESCRIPTION The .Fn zopen -opens a gzip file whose name is the string pointed to by +function opens a gzip file whose name is the string pointed to by .Fa path -and associates a stream with it. -It is a wrapper around +and returns a stream which can be used to access the uncompressed contents +of the file. +The +.Fn zdopen +variant takes a gzip file referenced by the file descriptor +.Fa fd , +analogous to +.Xr fdopen 3 . +They are wrappers around .Xr zlib 3 -and standard stream I/O APIs. +and the standard stream I/O APIs. .Pp The argument .Fa mode -have the same meaning as it does in +has the same meaning as it does in .Xr fopen 3 . .Pp The -.Nm -function will associate read, write, seek and close +.Fn zopen +and +.Fn zdopen +functions will associate the read, write, seek and close functions of .Xr zlib 3 -after successfully opened a file with -.Xr funopen 3 -so that they will be used to read or write the new stream. +with the returned stream. .Sh RETURN VALUES Upon successful completion -.Nm -returns a +.Fn zopen +and +.Fn zdopen +return a .Tn FILE pointer. Otherwise, @@ -70,26 +81,28 @@ is returned and the global variable is set to indicate the error. .Sh ERRORS In addition to the errors documented for -.Xr fopen 3 , -the -.Nm -function may also fail for: +.Xr fopen 3 +and +.Xr fdopen 3 , +the functions may also fail for: .Bl -tag -width Er .It Bq Er ENOMEM Insufficient memory is available. .El .Sh COMPATIBILITY -This implementation of -.Nm +The implementation of +.Fn zopen function first appeared in .Nx 1.6 and .Fx 4.5 . -The -.Nm -function may not be portable to systems other than +.Fn zdopen +first appeared in +.Fx 13.0 . +These functions may not be portable to systems other than .Fx . .Sh SEE ALSO +.Xr fdopen 3 , .Xr fopen 3 , .Xr funopen 3 , .Xr zlib 3 Modified: head/lib/libz/zopen.c ============================================================================== --- head/lib/libz/zopen.c Thu Dec 6 19:49:08 2018 (r341647) +++ head/lib/libz/zopen.c Thu Dec 6 20:03:06 2018 (r341648) @@ -9,6 +9,7 @@ __FBSDID("$FreeBSD$"); #include <zlib.h> FILE *zopen(const char *fname, const char *mode); +FILE *zdopen(int fd, const char *mode); /* convert arguments */ static int @@ -46,4 +47,19 @@ zopen(const char *fname, const char *mode) return (funopen(gz, xgzread, NULL, xgzseek, xgzclose)); else return (funopen(gz, NULL, xgzwrite, xgzseek, xgzclose)); +} + +FILE * +zdopen(int fd, const char *mode) +{ + gzFile gz; + + gz = gzdopen(fd, mode); + if (gz == NULL) + return (NULL); + + if (*mode == 'r') + return (funopen(gz, xgzread, NULL, xgzseek, xgzclose)); + else + return (funopen(gz, NULL, xgzwrite, xgzseek, xgzclose)); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201812062003.wB6K36NC035810>