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 MFC after: 10 days
This commit is contained in:
parent
547cfad16d
commit
e94e3511bd
@ -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
|
||||
|
26
tools/regression/bin/sh/builtins/cd8.0
Normal file
26
tools/regression/bin/sh/builtins/cd8.0
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user