summaryrefslogtreecommitdiff
path: root/tests/ln
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ln')
-rwxr-xr-xtests/ln/sf-1.sh17
1 files changed, 16 insertions, 1 deletions
diff --git a/tests/ln/sf-1.sh b/tests/ln/sf-1.sh
index 3f4f8f1ae..17e67a9fb 100755
--- a/tests/ln/sf-1.sh
+++ b/tests/ln/sf-1.sh
@@ -20,12 +20,27 @@
print_ver_ ln
echo foo > a || framework_failure_
-ln -s . b || framework_failure_
+# Check that a target directory of '.' is supported
+# and that indirectly specifying the same target and link name
+# through that is detected.
+ln -s . b || framework_failure_
ln -sf a b > err 2>&1 && fail=1
case $(cat err) in
*'are the same file') ;;
*) fail=1 ;;
esac
+# Ensure we replace symlinks that don't or can't link to an existing target.
+# coreutils-8.22 would fail to replace {ENOTDIR,ELOOP,ENAMETOOLONG}_link below.
+name_max_plus1=$(expr $(stat -f -c %l .) + 1)
+test $name_max_plus1 -gt 1 || skip_ 'Error determining NAME_MAX'
+long_name=$(printf '%0*d' $name_max_plus1 0)
+for f in '' f; do
+ ln -s$f missing ENOENT_link || fail=1
+ ln -s$f a/b ENOTDIR_link || fail=1
+ ln -s$f ELOOP_link ELOOP_link || fail=1
+ ln -s$f "$long_name" ENAMETOOLONG_link || fail=1
+done
+
Exit $fail