1#!/bin/sh 2# Ensure that touch honors trailing slash. 3 4# Copyright (C) 2009-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_ touch 21 22ln -s nowhere dangling || framework_failure_ 23ln -s loop loop || framework_failure_ 24touch file || framework_failure_ 25ln -s file link1 || framework_failure_ 26mkdir dir || framework_failure_ 27ln -s dir link2 || framework_failure_ 28 29 30# Trailing slash can only appear on directory or symlink-to-directory. 31# Up through coreutils 8.0, Solaris 9 failed these tests. 32returns_ 1 touch no-file/ || fail=1 33returns_ 1 touch file/ || fail=1 34returns_ 1 touch dangling/ || fail=1 35returns_ 1 touch loop/ || fail=1 36if returns_ 2 ls link1/; then # darwin allows trailing slash to files 37 returns_ 1 touch link1/ || fail=1 38fi 39touch dir/ || fail=1 40 41# -c silences ENOENT, but not ENOTDIR or ELOOP 42touch -c no-file/ || fail=1 43returns_ 1 touch -c file/ || fail=1 44touch -c dangling/ || fail=1 45returns_ 1 touch -c loop/ || fail=1 46if returns_ 2 ls link1/; then 47 returns_ 1 touch -c link1/ || fail=1 48fi 49touch -c dir/ || fail=1 50returns_ 1 test -f no-file || fail=1 51returns_ 1 test -f nowhere || fail=1 52 53# Trailing slash dereferences a symlink, even with -h. 54# mtime is sufficient to show pass (besides, lstat changes atime of 55# symlinks and directories under Cygwin 1.5). 56touch -d 2009-10-10 -h link2/ || fail=1 57touch -h -r link2/ file || fail=1 58case $(stat --format=%y dir) in 59 2009-10-10*) ;; 60 *) fail=1 ;; 61esac 62case $(stat --format=%y link2) in 63 2009-10-10*) fail=1 ;; 64esac 65case $(stat --format=%y file) in 66 2009-10-10*) ;; 67 *) fail=1 ;; 68esac 69 70Exit $fail 71