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