svn commit: r222381 - in head: bin/sh
tools/regression/bin/sh/builtins
Jilles Tjoelker
jilles at FreeBSD.org
Fri May 27 20:01:47 UTC 2011
Author: jilles
Date: Fri May 27 20:01:46 2011
New Revision: 222381
URL: http://svn.freebsd.org/changeset/base/222381
Log:
sh: Correct criterion for using CDPATH in cd.
CDPATH should be ignored not only for pathnames starting with '/' but also
for pathnames whose first component is '.' or '..'.
The man page already describes this behaviour.
Added:
head/tools/regression/bin/sh/builtins/cd6.0 (contents, props changed)
head/tools/regression/bin/sh/builtins/cd7.0 (contents, props changed)
Modified:
head/bin/sh/cd.c
Modified: head/bin/sh/cd.c
==============================================================================
--- head/bin/sh/cd.c Fri May 27 19:57:58 2011 (r222380)
+++ head/bin/sh/cd.c Fri May 27 20:01:46 2011 (r222381)
@@ -123,7 +123,10 @@ cdcmd(int argc, char **argv)
else
dest = ".";
}
- if (*dest == '/' || (path = bltinlookup("CDPATH", 1)) == NULL)
+ if (dest[0] == '/' ||
+ (dest[0] == '.' && (dest[1] == '/' || dest[1] == '\0')) ||
+ (dest[0] == '.' && dest[1] == '.' && (dest[2] == '/' || dest[2] == '\0')) ||
+ (path = bltinlookup("CDPATH", 1)) == NULL)
path = nullstr;
while ((p = padvance(&path, dest)) != NULL) {
if (stat(p, &statb) >= 0 && S_ISDIR(statb.st_mode)) {
Added: head/tools/regression/bin/sh/builtins/cd6.0
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/bin/sh/builtins/cd6.0 Fri May 27 20:01:46 2011 (r222381)
@@ -0,0 +1,10 @@
+# $FreeBSD$
+
+set -e
+cd -P /bin
+d=$PWD
+CDPATH=/:
+cd -P .
+[ "$d" = "$PWD" ]
+cd -P ./
+[ "$d" = "$PWD" ]
Added: head/tools/regression/bin/sh/builtins/cd7.0
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/bin/sh/builtins/cd7.0 Fri May 27 20:01:46 2011 (r222381)
@@ -0,0 +1,15 @@
+# $FreeBSD$
+
+set -e
+cd /usr/bin
+[ "$PWD" = /usr/bin ]
+CDPATH=/:
+cd .
+[ "$PWD" = /usr/bin ]
+cd ./
+[ "$PWD" = /usr/bin ]
+cd ..
+[ "$PWD" = /usr ]
+cd /usr/bin
+cd ../
+[ "$PWD" = /usr ]
More information about the svn-src-all
mailing list