sf-1.sh 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/bin/sh
  2. # Test "ln -sf".
  3. # Copyright (C) 1997-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_ ln
  16. echo foo > a || framework_failure_
  17. # Check that a target directory of '.' is supported
  18. # and that indirectly specifying the same target and link name
  19. # through that is detected.
  20. ln -s . b || framework_failure_
  21. ln -sf a b > err 2>&1 && fail=1
  22. case $(cat err) in
  23. *'are the same file') ;;
  24. *) fail=1 ;;
  25. esac
  26. # Ensure we replace symlinks that don't or can't link to an existing target.
  27. # coreutils-8.22 would fail to replace {ENOTDIR,ELOOP,ENAMETOOLONG}_link below.
  28. # We apply a limit since AIX returns 2^32-1 which would trigger resource issues.
  29. name_max=$(stat -f -c %l .) && test "$name_max" -lt $((1024*1024)) ||
  30. name_max=1 # skip this portion of the test
  31. name_max_plus1=$(expr $name_max + 1)
  32. long_name=$(printf '%*s' $name_max_plus1 | tr ' ' '0')
  33. for f in '' f; do
  34. ln -s$f missing ENOENT_link || fail=1
  35. ln -s$f a/b ENOTDIR_link || fail=1
  36. ln -s$f ELOOP_link ELOOP_link || fail=1
  37. ln -s$f "$long_name" ENAMETOOLONG_link || fail=1
  38. done
  39. Exit $fail