svn commit: r341648 - head/lib/libz
Mark Johnston
markj at FreeBSD.org
Thu Dec 6 20:03:08 UTC 2018
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));
}
More information about the svn-src-all
mailing list