From ef0cb80dd456b8f0feaf8d176d0aae89c1d3de18 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Sat, 5 Feb 2011 14:01:46 +0000 Subject: [PATCH] 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. --- bin/sh/exec.c | 25 +---------------------- tools/regression/bin/sh/execution/hash1.0 | 12 +++++++++++ 2 files changed, 13 insertions(+), 24 deletions(-) create mode 100644 tools/regression/bin/sh/execution/hash1.0 diff --git a/bin/sh/exec.c b/bin/sh/exec.c index 6297e9b4b07f..67eafffe32cc 100644 --- a/bin/sh/exec.c +++ b/bin/sh/exec.c @@ -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); } diff --git a/tools/regression/bin/sh/execution/hash1.0 b/tools/regression/bin/sh/execution/hash1.0 new file mode 100644 index 000000000000..a645c2aef735 --- /dev/null +++ b/tools/regression/bin/sh/execution/hash1.0 @@ -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 <"$T/ls" +: +EOF +chmod 755 "$T/ls" +PATH=$PATH +ls -ld .