Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen().
This commit is contained in:
12
gzlib.c
12
gzlib.c
@@ -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))),
|
||||
|
||||
Reference in New Issue
Block a user