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 ]
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to