From cc6d255ed5332e5fb7f7be80e2ea13da66317a23 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Fri, 19 Aug 2005 17:18:04 +0000 Subject: (stdopen): Return `bool' so caller can detect failure. --- lib/stdopen.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'lib/stdopen.c') diff --git a/lib/stdopen.c b/lib/stdopen.c index 6ea2264b8..00914307d 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; } -- cgit v1.2.3-54-g00ecf