1#!/bin/sh 2# Ensure that cp copies contents of non-empty "regular" file with st_size==0 3 4# Copyright (C) 2007-2023 Free Software Foundation, Inc. 5 6# This program is free software: you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation, either version 3 of the License, or 9# (at your option) any later version. 10 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15 16# You should have received a copy of the GNU General Public License 17# along with this program. If not, see <https://www.gnu.org/licenses/>. 18 19. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src 20print_ver_ cp 21 22touch empty || framework_failure_ 23 24f=/proc/cpuinfo 25test -r $f || f=empty 26 27cat $f > out || fail=1 28 29# With coreutils-6.9, this would create a zero-length "exp" file. 30# Skip this test on architectures like aarch64 where the inode 31# number of the file changed during the cp run. 32cp $f exp 2>err \ 33 || { fail=1; 34 grep 'replaced while being copied' err \ 35 && skip_ "File $f is being replaced while being copied"; } 36 37# Don't simply compare contents; they might differ, 38# e.g., if CPU freq changes between cat and cp invocations. 39# Instead, simply compare whether they're both nonempty. 40test -s out \ 41 && { rm -f out; echo nonempty > out; } 42test -s exp \ 43 && { rm -f exp; echo nonempty > exp; } 44 45compare exp out || fail=1 46 47Exit $fail 48