diff options
author | Thomas Haller <thaller@redhat.com> | 2022-10-12 23:30:37 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2022-10-20 08:16:52 +0200 |
commit | d6790aeccaf7c680c29a34f8094fa098038e8499 (patch) | |
tree | 7f5ae4ebaa50f32be92c39344b6c09e89b4f7d80 | |
parent | 3ed7f4d1ed7e49b5d38d837d3edba69f5b7eaaf6 (diff) | |
download | glib-d6790aeccaf7c680c29a34f8094fa098038e8499.tar.gz |
gspawn: use g_close()
g_close() now is async-signal-safe, as long as we don't request a GError
and pass a valid file descriptor.
Update "gspawn.c" to drop its safe_close() function and use
g_close() instead.
-rw-r--r-- | glib/gspawn.c | 33 |
1 files changed, 5 insertions, 28 deletions
diff --git a/glib/gspawn.c b/glib/gspawn.c index c644cebb1..4f4c55d99 100644 --- a/glib/gspawn.c +++ b/glib/gspawn.c @@ -162,8 +162,6 @@ extern char **environ; */ -static void safe_close (gint fd); - static gint g_execute (const gchar *file, gchar **argv, gchar **argv_buffer, @@ -267,11 +265,9 @@ close_and_invalidate (gint *fd) { if (*fd < 0) return; - else - { - safe_close (*fd); - *fd = -1; - } + + g_close (*fd, NULL); + *fd = -1; } /* Some versions of OS X define READ_OK in public headers */ @@ -1340,30 +1336,11 @@ dupfd_cloexec (int old_fd, int new_fd_min) /* This function is called between fork() and exec() and hence must be * async-signal-safe (see signal-safety(7)). */ -static void -safe_close (gint fd) -{ - /* Note that this function is (also) called after fork(), so it cannot use - * g_close(). - * Note that it is however called both from the parent and the child - * process. - * - * This function returns no error, because there is nothing what the caller - * could do with that information. That is even the case for EINTR. See - * g_close() about the specialty of EINTR and why that is correct. - * If g_close() ever gets extended to handle EINTR specially, then this place - * and all other direct calls to close() need updating. - */ - close (fd); -} - -/* This function is called between fork() and exec() and hence must be - * async-signal-safe (see signal-safety(7)). */ G_GNUC_UNUSED static int close_func (void *data, int fd) { if (fd >= GPOINTER_TO_INT (data)) - safe_close (fd); + g_close (fd, NULL); return 0; } @@ -1458,7 +1435,7 @@ safe_fdwalk (int (*cb)(void *data, int fd), void *data) } } - safe_close (dir_fd); + g_close (dir_fd, NULL); return res; } |