This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] support: Close original descriptors in support_capture_subprocess
* Andreas Schwab:
> On Dez 01 2018, Florian Weimer <fweimer@redhat.com> wrote:
>
>> This means that stdout_pipe[1] is at least 1 and stderr_pipe[1] is at
>> least 3. We can never close descriptor 0, but the first xclose could
>> close descriptor 1 or 2. Should I remove the second if condition?
>
> IMHO it would be cleaner that if a test needs a closed standard fd there
> should be a separate functionality to set that up instead of letting the
> test close it directly.
What about this?
Thanks,
Florian
2018-12-01 Florian Weimer <fweimer@redhat.com>
* support/support_capture_subprocess.c
(support_capture_subprocess): Check that pipe descriptors have
expected values. Close original pipe descriptors in subprocess.
diff --git a/support/support_capture_subprocess.c b/support/support_capture_subprocess.c
index 6d2029e13b..93f6ea3102 100644
--- a/support/support_capture_subprocess.c
+++ b/support/support_capture_subprocess.c
@@ -59,8 +59,12 @@ support_capture_subprocess (void (*callback) (void *), void *closure)
int stdout_pipe[2];
xpipe (stdout_pipe);
+ TEST_VERIFY (stdout_pipe[0] > STDERR_FILENO);
+ TEST_VERIFY (stdout_pipe[1] > STDERR_FILENO);
int stderr_pipe[2];
xpipe (stderr_pipe);
+ TEST_VERIFY (stderr_pipe[0] > STDERR_FILENO);
+ TEST_VERIFY (stderr_pipe[1] > STDERR_FILENO);
TEST_VERIFY (fflush (stdout) == 0);
TEST_VERIFY (fflush (stderr) == 0);
@@ -72,6 +76,8 @@ support_capture_subprocess (void (*callback) (void *), void *closure)
xclose (stderr_pipe[0]);
xdup2 (stdout_pipe[1], STDOUT_FILENO);
xdup2 (stderr_pipe[1], STDERR_FILENO);
+ xclose (stdout_pipe[1]);
+ xclose (stderr_pipe[1]);
callback (closure);
_exit (0);
}