svn commit: r230624 - in stable/9: bin/sh
tools/regression/bin/sh/builtins
Jilles Tjoelker
jilles at FreeBSD.org
Fri Jan 27 20:53:38 UTC 2012
Author: jilles
Date: Fri Jan 27 20:53:37 2012
New Revision: 230624
URL: http://svn.freebsd.org/changeset/base/230624
Log:
MFC r230095: sh: Properly show "Not a directory" error in cd builtin.
The errno message display added in r222292 did not take attempting to
cd to a non-directory or something that cannot be stat()ed into account.
PR: bin/164070
Added:
stable/9/tools/regression/bin/sh/builtins/cd8.0
- copied unchanged from r230095, head/tools/regression/bin/sh/builtins/cd8.0
Modified:
stable/9/bin/sh/cd.c
Directory Properties:
stable/9/bin/sh/ (props changed)
stable/9/tools/regression/bin/sh/ (props changed)
Modified: stable/9/bin/sh/cd.c
==============================================================================
--- stable/9/bin/sh/cd.c Fri Jan 27 20:18:31 2012 (r230623)
+++ stable/9/bin/sh/cd.c Fri Jan 27 20:53:37 2012 (r230624)
@@ -130,7 +130,12 @@ cdcmd(int argc, char **argv)
(path = bltinlookup("CDPATH", 1)) == NULL)
path = nullstr;
while ((p = padvance(&path, dest)) != NULL) {
- if (stat(p, &statb) >= 0 && S_ISDIR(statb.st_mode)) {
+ if (stat(p, &statb) < 0) {
+ if (errno != ENOENT)
+ errno1 = errno;
+ } else if (!S_ISDIR(statb.st_mode))
+ errno1 = ENOTDIR;
+ else {
if (!print) {
/*
* XXX - rethink
Copied: stable/9/tools/regression/bin/sh/builtins/cd8.0 (from r230095, head/tools/regression/bin/sh/builtins/cd8.0)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ stable/9/tools/regression/bin/sh/builtins/cd8.0 Fri Jan 27 20:53:37 2012 (r230624, copy of r230095, head/tools/regression/bin/sh/builtins/cd8.0)
@@ -0,0 +1,26 @@
+# $FreeBSD$
+
+# The exact wording of the error message is not standardized, but giving
+# a description of the errno is useful.
+
+LC_ALL=C
+export LC_ALL
+r=0
+
+t() {
+ exec 3>&1
+ errmsg=`cd "$1" 2>&1 >&3 3>&-`
+ exec 3>&-
+ case $errmsg in
+ *[Nn]ot\ a\ directory*)
+ ;;
+ *)
+ printf "Wrong error message for %s: %s\n" "$1" "$errmsg"
+ r=3
+ ;;
+ esac
+}
+
+t /dev/tty
+t /dev/tty/x
+exit $r
More information about the svn-src-stable-9
mailing list