Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen().

This commit is contained in:
Mark Adler
2012-03-03 10:24:44 -08:00
parent 53bfe01cea
commit 755c41dc4b
2 changed files with 15 additions and 2 deletions

12
gzlib.c
View File

@@ -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)
@@ -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;
@@ -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))),