Author: jilles
Date: Fri Dec 31 18:20:17 2010
New Revision: 216851
URL: http://svn.freebsd.org/changeset/base/216851

Log:
  sh: Check if dup2 for redirection from/to a file succeeds.
  
  A failure (e.g. caused by ulimit -n being set very low) is a redirection
  error.
  
  Example:
    ulimit -n 9; exec 9<.

Added:
  head/tools/regression/bin/sh/errors/redirection-error7.0   (contents, props 
changed)
Modified:
  head/bin/sh/redir.c

Modified: head/bin/sh/redir.c
==============================================================================
--- head/bin/sh/redir.c Fri Dec 31 18:16:44 2010        (r216850)
+++ head/bin/sh/redir.c Fri Dec 31 18:20:17 2010        (r216851)
@@ -155,6 +155,7 @@ openredirect(union node *redir, char mem
        int fd = redir->nfile.fd;
        char *fname;
        int f;
+       int e;
 
        /*
         * We suppress interrupts so that we won't leave open file
@@ -173,7 +174,11 @@ openredirect(union node *redir, char mem
                        error("cannot open %s: %s", fname, strerror(errno));
 movefd:
                if (f != fd) {
-                       dup2(f, fd);
+                       if (dup2(f, fd) == -1) {
+                               e = errno;
+                               close(f);
+                               error("%d: %s", fd, strerror(e));
+                       }
                        close(f);
                }
                break;

Added: head/tools/regression/bin/sh/errors/redirection-error7.0
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/tools/regression/bin/sh/errors/redirection-error7.0    Fri Dec 31 
18:20:17 2010        (r216851)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+! dummy=$(
+       exec 3>&1 >&2 2>&3
+       ulimit -n 9
+       exec 9<.
+) && [ -n "$dummy" ]
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to