From: Sami Kerola Date: Tue, 6 Nov 2012 21:14:14 +0000 (+0000) Subject: script: do not try to close stderr twice X-Git-Tag: v2.23-rc1~555 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=958e39d238fa8d880d1dda963c7f0fcd264c0f61;p=thirdparty%2Futil-linux.git script: do not try to close stderr twice The commit cdd2a8c360c70d16804ace7cc923a6c6bb7c9ca9 broke script(1) return value. $ script -e -c "echo"; echo $? 1 The reason, as Daniel it reported, was that the script will close stderr twice, once as timing file and atexit() in function close_stdout(). This commit fixes the problem. Reported-by: Daniel Narvaez Signed-off-by: Sami Kerola --- diff --git a/term-utils/script.c b/term-utils/script.c index ccd88738a6..94a20da6c3 100644 --- a/term-utils/script.c +++ b/term-utils/script.c @@ -159,7 +159,7 @@ main(int argc, char **argv) { sigset_t block_mask, unblock_mask; struct sigaction sa; int ch; - FILE *timingfd = stderr; + FILE *timingfd = NULL; enum { FORCE_OPTION = CHAR_MAX + 1 }; @@ -274,9 +274,11 @@ main(int argc, char **argv) { warn(_("fork failed")); fail(); } - if (child) + if (child) { + if (!timingfd) + timingfd = fdopen(STDERR_FILENO, "w"); dooutput(timingfd); - else + } else doshell(); } else { sa.sa_handler = resize;