mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 07:26:15 +01:00
Merge branch 'handling_collision_over_standard_file_descriptors' into 'main'
Handling collision between standard i/o file descriptors and newly created ones Closes #16 See merge request GNOME/glib!2846
This commit is contained in:
commit
7e9625a79b
@ -108,6 +108,17 @@ g_unix_open_pipe (int *fds,
|
||||
ecode = pipe2 (fds, pipe2_flags);
|
||||
if (ecode == -1 && errno != ENOSYS)
|
||||
return g_unix_set_error_from_errno (error, errno);
|
||||
/* Don't reassign pipes to stdin, stdout, stderr if closed meanwhile */
|
||||
else if (fds[0] < 3 || fds[1] < 3)
|
||||
{
|
||||
int old_fds[2] = { fds[0], fds[1] };
|
||||
gboolean result = g_unix_open_pipe (fds, flags, error);
|
||||
close (old_fds[0]);
|
||||
close (old_fds[1]);
|
||||
|
||||
if (!result)
|
||||
g_unix_set_error_from_errno (error, errno);
|
||||
}
|
||||
else if (ecode == 0)
|
||||
return TRUE;
|
||||
/* Fall through on -ENOSYS, we must be running on an old kernel */
|
||||
@ -116,6 +127,19 @@ g_unix_open_pipe (int *fds,
|
||||
ecode = pipe (fds);
|
||||
if (ecode == -1)
|
||||
return g_unix_set_error_from_errno (error, errno);
|
||||
/* Don't reassign pipes to stdin, stdout, stderr if closed meanwhile */
|
||||
else if (fds[0] < 3 || fds[1] < 3)
|
||||
{
|
||||
int old_fds[2] = { fds[0], fds[1] };
|
||||
gboolean result = g_unix_open_pipe (fds, flags, error);
|
||||
close (old_fds[0]);
|
||||
close (old_fds[1]);
|
||||
|
||||
if (!result)
|
||||
g_unix_set_error_from_errno (error, errno);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
if (flags == 0)
|
||||
return TRUE;
|
||||
|
Loading…
Reference in New Issue
Block a user