1#!/bin/sh 2# Ensure that moving hard-linked arguments onto existing destinations works. 3# Likewise when using cp --preserve=link. 4 5# Copyright (C) 2003-2023 Free Software Foundation, Inc. 6 7# This program is free software: you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation, either version 3 of the License, or 10# (at your option) any later version. 11 12# This program is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16 17# You should have received a copy of the GNU General Public License 18# along with this program. If not, see <https://www.gnu.org/licenses/>. 19 20. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src 21print_ver_ cp mv 22 23skip_if_root_ 24 25mkdir dst || framework_failure_ 26(cd dst && touch a b c) || framework_failure_ 27touch a || framework_failure_ 28ln a b || framework_failure_ 29ln a c || framework_failure_ 30 31 32# ====================================== 33cp --preserve=link a b c dst || fail=1 34# The source files must remain. 35test -f a || fail=1 36test -f b || fail=1 37test -f c || fail=1 38cd dst 39 40# Three destination files must exist. 41test -f a || fail=1 42test -f b || fail=1 43test -f c || fail=1 44 45# The three i-node numbers must be the same. 46ia=$(ls -i a|sed 's/ a//') 47ib=$(ls -i b|sed 's/ b//') 48ic=$(ls -i c|sed 's/ c//') 49test $ia = $ib || fail=1 50test $ia = $ic || fail=1 51 52cd .. 53rm -f dst/[abc] 54(cd dst && touch a b c) 55 56# ====================================== 57mv a b c dst || fail=1 58 59# The source files must be gone. 60test -f a && fail=1 61test -f b && fail=1 62test -f c && fail=1 63cd dst 64 65# Three destination files must exist. 66test -f a || fail=1 67test -f b || fail=1 68test -f c || fail=1 69 70# The three i-node numbers must be the same. 71ia=$(ls -i a|sed 's/ a//') 72ib=$(ls -i b|sed 's/ b//') 73ic=$(ls -i c|sed 's/ c//') 74test $ia = $ib || fail=1 75test $ia = $ic || fail=1 76 77Exit $fail 78