glocalfileoutputstream: Add a missing O_CLOEXEC flag to replace()

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
(cherry picked from commit 6c6439261b)
This commit is contained in:
Philip Withnall
2021-02-24 17:42:24 +00:00
committed by Simon McVittie
parent 4e64a27f4f
commit 7bfe2dcebe

View File

@@ -56,6 +56,12 @@
#define O_BINARY 0 #define O_BINARY 0
#endif #endif
#ifndef O_CLOEXEC
#define O_CLOEXEC 0
#else
#define HAVE_O_CLOEXEC 1
#endif
struct _GLocalFileOutputStreamPrivate { struct _GLocalFileOutputStreamPrivate {
char *tmp_filename; char *tmp_filename;
char *original_filename; char *original_filename;
@@ -1123,7 +1129,7 @@ _g_local_file_output_stream_replace (const char *filename,
sync_on_close = FALSE; sync_on_close = FALSE;
/* If the file doesn't exist, create it */ /* If the file doesn't exist, create it */
open_flags = O_CREAT | O_EXCL | O_BINARY; open_flags = O_CREAT | O_EXCL | O_BINARY | O_CLOEXEC;
if (readable) if (readable)
open_flags |= O_RDWR; open_flags |= O_RDWR;
else else
@@ -1153,8 +1159,11 @@ _g_local_file_output_stream_replace (const char *filename,
set_error_from_open_errno (filename, error); set_error_from_open_errno (filename, error);
return NULL; return NULL;
} }
#if !defined(HAVE_O_CLOEXEC) && defined(F_SETFD)
else
fcntl (fd, F_SETFD, FD_CLOEXEC);
#endif
stream = g_object_new (G_TYPE_LOCAL_FILE_OUTPUT_STREAM, NULL); stream = g_object_new (G_TYPE_LOCAL_FILE_OUTPUT_STREAM, NULL);
stream->priv->fd = fd; stream->priv->fd = fd;
stream->priv->sync_on_close = sync_on_close; stream->priv->sync_on_close = sync_on_close;