Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen().
  • Loading branch information
madler committed Mar 3, 2012
1 parent 53bfe01 commit 755c41d
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
12 changes: 11 additions & 1 deletion gzlib.c
Expand Up @@ -94,6 +94,7 @@ local gzFile gz_open(path, fd, mode)
const char *mode;
{
gz_statep state;
int cloexec = 0, exclusive = 0;

/* check input */
if (path == NULL)
Expand Down Expand Up @@ -133,6 +134,12 @@ local gzFile gz_open(path, fd, mode)
return NULL;
case 'b': /* ignore -- will request binary anyway */
break;
case 'e':
cloexec = 1;
break;
case 'x':
exclusive = 1;
break;
case 'f':
state->strategy = Z_FILTERED;
break;
Expand Down Expand Up @@ -183,10 +190,13 @@ local gzFile gz_open(path, fd, mode)
#endif
#ifdef O_BINARY
O_BINARY |
#endif
#ifdef O_CLOEXEC
(cloexec ? O_CLOEXEC : 0) |
#endif
(state->mode == GZ_READ ?
O_RDONLY :
(O_WRONLY | O_CREAT | (
(O_WRONLY | O_CREAT | (exclusive ? O_EXCL : 0) | (
state->mode == GZ_WRITE ?
O_TRUNC :
O_APPEND))),
Expand Down
5 changes: 4 additions & 1 deletion zlib.h
Expand Up @@ -1217,7 +1217,10 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
"a" can be used instead of "w" to request that the gzip stream that will
be written be appended to the file. "+" will result in an error, since
reading and writing to the same gzip file is not supported.
reading and writing to the same gzip file is not supported. The addition of
"x" when writing will create the file exclusively, which fails if the file
already exists. On systems that support it, the addition of "e" when
reading or writing will set the flag to close the file on an execve() call.
These functions, as well as gzip, will read and decode a sequence of gzip
streams in a file. The append function of gzopen() can be used to create
Expand Down

0 comments on commit 755c41d

Please sign in to comment.