const char *mode;
{
gz_statep state;
+ int cloexec = 0, exclusive = 0;
/* check input */
if (path == NULL)
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;
#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))),
"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