svn commit: r218323 - in head: bin/sh tools/regression/bin/sh/execution

Jilles Tjoelker jilles at FreeBSD.org
Sat Feb 5 14:01:46 UTC 2011


Author: jilles
Date: Sat Feb  5 14:01:46 2011
New Revision: 218323
URL: http://svn.freebsd.org/changeset/base/218323

Log:
  sh: Forget all cached command locations on any PATH change.
  
  POSIX requires this and it is simpler than the previous code that remembered
  command locations when appending directories to PATH.
  
  In particular,
    PATH=$PATH
  is no longer a no-op but discards all cached command locations.

Added:
  head/tools/regression/bin/sh/execution/hash1.0   (contents, props changed)
Modified:
  head/bin/sh/exec.c

Modified: head/bin/sh/exec.c
==============================================================================
--- head/bin/sh/exec.c	Sat Feb  5 13:07:35 2011	(r218322)
+++ head/bin/sh/exec.c	Sat Feb  5 14:01:46 2011	(r218323)
@@ -494,30 +494,7 @@ hashcd(void)
 void
 changepath(const char *newval)
 {
-	const char *old, *new;
-	int idx;
-	int firstchange;
-
-	old = pathval();
-	new = newval;
-	firstchange = 9999;	/* assume no change */
-	idx = 0;
-	for (;;) {
-		if (*old != *new) {
-			firstchange = idx;
-			if ((*old == '\0' && *new == ':')
-			 || (*old == ':' && *new == '\0'))
-				firstchange++;
-			old = new;	/* ignore subsequent differences */
-		}
-		if (*new == '\0')
-			break;
-		if (*new == ':') {
-			idx++;
-		}
-		new++, old++;
-	}
-	clearcmdentry(firstchange);
+	clearcmdentry(0);
 }
 
 

Added: head/tools/regression/bin/sh/execution/hash1.0
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/regression/bin/sh/execution/hash1.0	Sat Feb  5 14:01:46 2011	(r218323)
@@ -0,0 +1,12 @@
+# $FreeBSD$
+
+T=`mktemp -d "${TMPDIR:-/tmp}/sh-test.XXXXXXXX"` || exit
+trap 'rm -rf "${T}"' 0
+PATH=$T:$PATH
+ls -ld . >/dev/null
+cat <<EOF >"$T/ls"
+:
+EOF
+chmod 755 "$T/ls"
+PATH=$PATH
+ls -ld .


More information about the svn-src-head mailing list