]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: avoid false failure with spaces in mount point paths
authorPádraig Brady <P@draigBrady.com>
Wed, 2 Jul 2014 13:39:04 +0000 (14:39 +0100)
committerPádraig Brady <P@draigBrady.com>
Wed, 2 Jul 2014 18:45:18 +0000 (19:45 +0100)
* tests/ls/readdir-mountpoint-inode.sh: Quote appropriately
to process mount points with spaces in the path.
Previously items like these would usually be skipped,
though if the path also contained a '-' for example,
that would stat stdin, thus producing a wrong inode
and a false failure.
Fixes http://bugs.gnu.org/17863

tests/ls/readdir-mountpoint-inode.sh

index dabd66127cb0f1b4e085d6601c6c86cecdd225b4..83ebe68cc9522618e94f232c51fdba3b8e0d3cf4 100755 (executable)
@@ -21,9 +21,9 @@ print_ver_ ls
 
 # We use --local here so as to not activate
 # potentially very many remote mounts.
-mount_points=$(df --local -P 2>&1 | sed -n 's,.*[0-9]% \(/.\),\1,p')
-test -z "$mount_points" &&
-   skip_ "this test requires a non-root mount point"
+df --local --out=target | sed -n '/^\/./p' > mount_points
+test -s mount_points ||
+  skip_ "this test requires a non-root mount point"
 
 # Given e.g., /dev/shm, produce the list of GNU ls options that
 # let us list just that entry using readdir data from its parent:
@@ -48,23 +48,23 @@ ls_ignore_options()
 inode_via_readdir()
 {
   mount_point=$1
-  base=$(basename $mount_point)
-  case $base in
+  base=$(basename "$mount_point")
+  case "$base" in
     .*) skip_ 'mount point component starts with "."' ;;
     *[*?]*) skip_ 'mount point component contains "?" or "*"' ;;
   esac
   opts=$(ls_ignore_options "$base")
-  parent_dir=$(dirname $mount_point)
-  eval "ls -i $opts $parent_dir" | sed 's/ .*//'
+  parent_dir=$(dirname "$mount_point")
+  eval "ls -i $opts '$parent_dir'" | sed 's/ .*//'
 }
 
-for dir in $mount_points; do
-  readdir_inode=$(inode_via_readdir $dir)
+while read dir; do
+  readdir_inode=$(inode_via_readdir "$dir")
   test $? = 77 && continue
-  stat_inode=$(timeout 1 stat --format=%i $dir)
+  stat_inode=$(timeout 1 stat --format=%i "$dir")
   # If stat fails or says the inode is 0, skip $dir.
   case $stat_inode in 0|'') continue;; esac
   test "$readdir_inode" = "$stat_inode" || fail=1
-done
+done < mount_points
 
 Exit $fail