]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(stdopen): Return `bool' so caller can detect failure.
authorJim Meyering <jim@meyering.net>
Fri, 19 Aug 2005 17:18:04 +0000 (17:18 +0000)
committerJim Meyering <jim@meyering.net>
Fri, 19 Aug 2005 17:18:04 +0000 (17:18 +0000)
lib/stdopen.c

index 6ea2264b8d5772b1125f4969eddb07a012e67ab7..00914307d13371d34f44f0cc1b9ebbc2a57d72a2 100644 (file)
 
 /* 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;
 }