ash: [REDIR] Remove EMFILE special case
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 25 Oct 2016 17:04:39 +0000 (19:04 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 25 Oct 2016 17:04:39 +0000 (19:04 +0200)
Upstream commit:

    Date: Sun, 6 May 2007 12:01:37 +1000
    [REDIR] Remove EMFILE special case

    No caller of copyfd need to ignore EMFILE so we can remove the special
    case and just let it call sh_error on any error.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c

index 9dcf809753cc644eecf5b1781f9dd68e0bd5f669..8092e3971aec6dcffd86e28517796a667867d97b 100644 (file)
@@ -5190,9 +5190,7 @@ openredirect(union node *redir)
 }
 
 /*
- * Copy a file descriptor to be >= to.  Returns -1
- * if the source file descriptor is closed, EMPTY if there are no unused
- * file descriptors left.
+ * Copy a file descriptor to be >= to. Throws exception on error.
  */
 /* 0x800..00: bit to set in "to" to request dup2 instead of fcntl(F_DUPFD).
  * old code was doing close(to) prior to copyfd() to achieve the same */
@@ -5213,8 +5211,6 @@ copyfd(int from, int to)
                newfd = fcntl(from, F_DUPFD, to);
        }
        if (newfd < 0) {
-               if (errno == EMFILE)
-                       return EMPTY;
                /* Happens when source fd is not open: try "echo >&99" */
                ash_msg_and_raise_error("%d: %m", from);
        }
@@ -10243,8 +10239,6 @@ setinputfile(const char *fname, int flags)
        if (fd < 10) {
                fd2 = copyfd(fd, 10);
                close(fd);
-               if (fd2 < 0)
-                       ash_msg_and_raise_error("out of file descriptors");
                fd = fd2;
        }
        setinputfd(fd, flags & INPUT_PUSH_FILE);