svn commit: r216851 - in head: bin/sh tools/regression/bin/sh/errors
Jilles Tjoelker
jilles at FreeBSD.org
Fri Dec 31 18:20:18 UTC 2010
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" ]
More information about the svn-src-all
mailing list