From: Ulrich Drepper Date: Thu, 19 Jul 2007 17:02:07 +0000 (+0000) Subject: (_IO_new_proc_open): Don't close child_std_end if one of proc_file_chain streams... X-Git-Tag: cvs/fedora-glibc-20070731T1624~53 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d8d7feefa738eb3138790c99aa891ef44d85e4cc;p=platform%2Fupstream%2Fglibc.git (_IO_new_proc_open): Don't close child_std_end if one of proc_file_chain streams has that fileno. --- diff --git a/libio/iopopen.c b/libio/iopopen.c index 896e930..d5c6305 100644 --- a/libio/iopopen.c +++ b/libio/iopopen.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 1997-2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1997-2002, 2003, 2004, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Per Bothner . @@ -169,7 +170,15 @@ _IO_new_proc_open (fp, command, mode) popen() calls that remain open in the parent process are closed in the new child process." */ for (p = proc_file_chain; p; p = p->next) - _IO_close (_IO_fileno ((_IO_FILE *) p)); + { + int fd = _IO_fileno ((_IO_FILE *) p); + + /* If any stream from previous popen() calls has fileno + child_std_end, it has been already closed by the dup2 syscall + above. */ + if (fd != child_std_end) + _IO_close (fd); + } _IO_execl ("/bin/sh", "sh", "-c", command, (char *) 0); _IO__exit (127);