]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: avoid test failures when PATH contains an unsearchable directory
authorJim Meyering <meyering@redhat.com>
Mon, 23 Nov 2009 16:35:20 +0000 (17:35 +0100)
committerJim Meyering <meyering@redhat.com>
Mon, 23 Nov 2009 16:49:39 +0000 (17:49 +0100)
* tests/test-lib.sh (sanitize_path_): New function.
Always call it.

tests/test-lib.sh

index 456a30a24843a10bfc5bfc1671cd908da1505eed..06087ea295ded65ed0283fcae48bf009630bab0a 100644 (file)
@@ -23,6 +23,31 @@ if test $? != 11; then
   Exit 77
 fi
 
+# Having an unsearchable directory in PATH causes execve to fail with EACCES
+# when applied to an unresolvable program name, contrary to the desired ENOENT.
+# Avoid the problem by rewriting PATH to exclude unsearchable directories.
+sanitize_path_()
+{
+  local saved_IFS=$IFS
+    IFS=:
+    set - $PATH
+  IFS=$saved_IFS
+
+  local d d1
+  local colon=
+  local new_path=
+  for d in "$@"; do
+    test -z "$d" && d1=. || d1=$d
+    if ls -d "$d1/." > /dev/null 2>&1; then
+      new_path="$new_path$colon$d"
+      colon=':'
+    fi
+  done
+
+  PATH=$new_path
+  export PATH
+}
+
 skip_test_()
 {
   echo "$0: skipping test: $@" | head -1 1>&9
@@ -54,7 +79,6 @@ require_selinux_enforcing_()
     || skip_test_ "This test is useful only with SELinux in Enforcing mode."
 }
 
-
 require_openat_support_()
 {
   # Skip this test if your system has neither the openat-style functions
@@ -396,5 +420,7 @@ else
   compare() { cmp "$@"; }
 fi
 
+sanitize_path_
+
 # Initialize; all bourne shell scripts end with "Exit $fail".
 fail=0