1#!/bin/sh
2# tests for canonicalize-existing mode (readlink -e) on /.
3
4# Copyright (C) 2012-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_ readlink
21
22stat_single=$(stat -c %d:%i /) || framework_failure_
23stat_double=$(stat -c %d:%i //) || framework_failure_
24double_slash=//
25if test x"$stat_single" = x"$stat_double"; then
26  double_slash=/
27fi
28
29test -d /dev || framework_failure_
30
31ln -s / one || framework_failure_
32ln -s // two || framework_failure_
33ln -s /// three || framework_failure_
34ln -s /./..// one-dots || framework_failure_
35ln -s //./..// two-dots || framework_failure_
36ln -s ///./..// three-dots || framework_failure_
37ln -s /dev one-dev || framework_failure_
38ln -s //dev two-dev || framework_failure_
39ln -s ///dev three-dev || framework_failure_
40
41cat >exp <<EOF || framework_failure_
42/
43$double_slash
44/
45/
46$double_slash
47/
48/
49$double_slash
50/
51/
52$double_slash
53/
54/dev
55${double_slash}dev
56/dev
57/dev
58${double_slash}dev
59/dev
60/dev
61${double_slash}dev
62/dev
63EOF
64
65{
66  readlink -e / || fail=1
67  readlink -e // || fail=1
68  readlink -e /// || fail=1
69  readlink -e /.//.. || fail=1
70  readlink -e //.//.. || fail=1
71  readlink -e ///.//.. || fail=1
72  readlink -e one || fail=1
73  readlink -e two || fail=1
74  readlink -e three || fail=1
75  readlink -e one-dots || fail=1
76  readlink -e two-dots || fail=1
77  readlink -e three-dots || fail=1
78  readlink -e one-dev || fail=1
79  # We know /dev exists, but cannot assume //dev exists
80  readlink -f two-dev || fail=1
81  readlink -e three-dev || fail=1
82  readlink -e one/dev || fail=1
83  readlink -f two/dev || fail=1
84  readlink -e three/dev || fail=1
85  readlink -e one-dots/dev || fail=1
86  readlink -f two-dots/dev || fail=1
87  readlink -e three-dots/dev || fail=1
88} > out
89
90compare exp out || fail=1
91
92Exit $fail
93