deep-2.sh 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/bin/sh
  2. # Ensure rm -r DIR does not prompt for very long full relative names in DIR.
  3. # Copyright (C) 2008-2018 Free Software Foundation, Inc.
  4. # This program is free software: you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation, either version 3 of the License, or
  7. # (at your option) any later version.
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. # You should have received a copy of the GNU General Public License
  13. # along with this program. If not, see <https://www.gnu.org/licenses/>.
  14. . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
  15. print_ver_ rm
  16. require_perl_
  17. # Root can run this test, but it always succeeds, since for root, all
  18. # files are writable, and write_protected_non_symlink never reaches
  19. # the offending euidaccess_stat call.
  20. skip_if_root_
  21. # ecryptfs for example uses some of the file name space
  22. # for encrypting filenames, so we must check dynamically.
  23. name_max=$(stat -f -c %l .)
  24. test "$name_max" -ge '200' || skip_ "NAME_MAX=$name_max is not sufficient"
  25. mkdir x || framework_failure_
  26. cd x || framework_failure_
  27. # Construct a hierarchy containing a relative file with a long name
  28. $PERL \
  29. -e 'my $d = "x" x 200; foreach my $i (1..52)' \
  30. -e ' { mkdir ($d, 0700) && chdir $d or die "$!" }' \
  31. || framework_failure_
  32. cd .. || framework_failure_
  33. echo n > no || framework_failure_
  34. rm ---presume-input-tty -r x < no > out || fail=1
  35. # expect empty output
  36. compare /dev/null out || fail=1
  37. # the directory must have been removed
  38. test -d x && fail=1
  39. Exit $fail