summaryrefslogtreecommitdiff
path: root/tests/mv/symlink-onto-hardlink-to-self.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/mv/symlink-onto-hardlink-to-self.sh')
-rwxr-xr-xtests/mv/symlink-onto-hardlink-to-self.sh35
1 files changed, 21 insertions, 14 deletions
diff --git a/tests/mv/symlink-onto-hardlink-to-self.sh b/tests/mv/symlink-onto-hardlink-to-self.sh
index f3e8ff987..1a567df8c 100755
--- a/tests/mv/symlink-onto-hardlink-to-self.sh
+++ b/tests/mv/symlink-onto-hardlink-to-self.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# Demonstrate that when moving a symlink onto a hardlink-to-that-symlink, the
-# source symlink is removed. Depending on your kernel (e.g., Linux, Solaris,
+# Demonstrate that when moving a symlink onto a hardlink-to-that-symlink,
+# an error is presented. Depending on your kernel (e.g., Linux, Solaris,
# but not NetBSD), prior to coreutils-8.16, the mv would successfully perform
# a no-op. I.e., surprisingly, mv s1 s2 would succeed, yet fail to remove s1.
@@ -26,27 +26,34 @@ print_ver_ mv
touch f || framework_failure_
ln -s f s2 || framework_failure_
-for opt in '' --backup; do
+# Attempt to create a hard link to that symlink.
+# On some systems, it's not possible: they create a hard link to the referent.
+ln s2 s1 || framework_failure_
- # Attempt to create a hard link to that symlink.
- # On some systems, it's not possible: they create a hard link to the referent.
- ln s2 s1 || framework_failure_
+# If s1 is not a symlink, skip this test.
+test -h s1 \
+ || skip_ your kernel or file system cannot create a hard link to a symlink
- # If s1 is not a symlink, skip this test.
- test -h s1 \
- || skip_ your kernel or file system cannot create a hard link to a symlink
+for opt in '' --backup; do
- mv $opt s1 s2 > out 2>&1 || fail=1
- compare /dev/null out || fail=1
+ if test "$opt" = --backup; then
+ mv $opt s1 s2 > out 2>&1 || fail=1
+ compare /dev/null out || fail=1
- # Ensure that s1 is gone.
- test -e s1 && fail=1
+ # Ensure that s1 is gone.
+ test -e s1 && fail=1
- if test "$opt" = --backup; then
# With --backup, ensure that the backup file was created.
ref=$(readlink s2~) || fail=1
test "$ref" = f || fail=1
else
+ echo "mv: 's1' and 's2' are the same file" > exp
+ mv $opt s1 s2 2>err && fail=1
+ compare exp err || fail=1
+
+ # Ensure that s1 is still present.
+ test -e s1 || fail=1
+
# Without --backup, ensure there is no backup file.
test -e s2~ && fail=1
fi