From: Jim Meyering Date: Fri, 19 Aug 2005 17:18:04 +0000 (+0000) Subject: (stdopen): Return `bool' so caller can detect failure. X-Git-Tag: CPPI-1_12~111 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cc6d255ed5332e5fb7f7be80e2ea13da66317a23;p=thirdparty%2Fcoreutils.git (stdopen): Return `bool' so caller can detect failure. --- diff --git a/lib/stdopen.c b/lib/stdopen.c index 6ea2264b8d..00914307d1 100644 --- a/lib/stdopen.c +++ b/lib/stdopen.c @@ -44,9 +44,11 @@ /* Try to ensure that each of the standard file numbers (0, 1, 2) is in use. Without this, each application would have to guard - every call to open, dup, and fopen with tests to ensure they don't - use one of the special file numbers when opening a user's file. */ -void + every call to open, dup, fopen, etc. with tests to ensure they + don't use one of the special file numbers when opening a file. + Return false if at least one of the file descriptors is initially + closed and an attempt to reopen it fails. Otherwise, return true. */ +bool stdopen (void) { int fd = dup (STDIN_FILENO); @@ -55,13 +57,19 @@ stdopen (void) close (fd); else if (errno == EBADF) fd = open ("/dev/null", O_WRONLY); + else + return false; if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) { fd = open ("/dev/null", O_RDONLY); if (fd == STDOUT_FILENO) fd = dup (fd); + if (fd < 0) + return false; + if (STDERR_FILENO < fd) close (fd); } + return true; }