]>
Commit | Line | Data |
---|---|---|
d951286f UD |
1 | #! /bin/sh |
2 | ||
3 | # The common objpfx, used to find libraries and the dynamic loader. | |
4 | objpfx=$1 | |
5 | ||
6 | # We expect one parameter which is the test program. This must understand | |
7 | # a number options: | |
3d73829c UD |
8 | # --phys use the FTW_PHYS flag |
9 | # --chdir use the FTW_CHDIR and print the current directory | |
10 | # in the callback | |
11 | # --depth use the FTW_DEPTH flag | |
12 | # --early-exit print file@2 item only and return non-zero from the | |
13 | # callback when it is seen | |
d951286f UD |
14 | testprogram=$2 |
15 | ||
7eb759de UD |
16 | # We cannot test this as root. |
17 | if test `id | sed "s/uid=\([0-9]*\).*/\1/"` = 0; then | |
18 | exit 0 | |
19 | fi | |
d951286f | 20 | |
9cb6e878 UD |
21 | # Since we use `sort' we must make sure to use the same locale everywhere. |
22 | LC_ALL=C | |
23 | export LC_ALL | |
24 | LANG=C | |
25 | export LANG | |
26 | ||
d951286f | 27 | # First create our scenario: |
650425ce | 28 | tmp=`echo ${TMPDIR:-/tmp} | sed 's|\(.\)/*$|\1|'` |
d951286f UD |
29 | tmpdir=$tmp/ftwtest.d |
30 | ||
5ae3e846 UD |
31 | [ -f ${objpfx}elf/ld.so ] && ldso=${objpfx}elf/ld.so |
32 | ||
7603ea28 | 33 | trap 'chmod -fR a+x $tmpdir; rm -fr $tmpdir $testout' 1 2 3 15 |
d951286f UD |
34 | |
35 | if test -d $tmpdir; then | |
7603ea28 | 36 | chmod -fR a+x $tmpdir |
d951286f UD |
37 | rm -fr $tmpdir |
38 | fi | |
39 | mkdir $tmpdir | |
40 | mkdir $tmpdir/foo | |
41 | mkdir $tmpdir/bar | |
42 | echo > $tmpdir/baz | |
43 | mkdir $tmpdir/foo/lvl1 | |
44 | echo > $tmpdir/foo/lvl1/file@1 | |
45 | mkdir $tmpdir/foo/lvl1/lvl2 | |
46 | echo > $tmpdir/foo/lvl1/lvl2/file@2 | |
47 | mkdir $tmpdir/foo/lvl1/lvl2/lvl3 | |
48 | echo > $tmpdir/foo/lvl1/lvl2/lvl3/file@3 | |
49 | ln -s $tmpdir $tmpdir/foo/lvl1/lvl2/lvl3/link@3 | |
50 | ln -s $tmpdir/foo/lvl1/lvl2 $tmpdir/foo/lvl1/lvl2/link@2 | |
51 | ln -s $tmpdir/foo/lvl1/lvl2/lvl3/lvl4 $tmpdir/foo/lvl1/link@1 | |
52 | echo > $tmpdir/bar/xo | |
53 | chmod a-x,a+r $tmpdir/bar | |
54 | ||
55 | testout=${TMPDIR:-/tmp}/ftwtest.out | |
f671aeab | 56 | |
5ae3e846 | 57 | LD_LIBRARY_PATH=$objpfx $ldso $testprogram $tmpdir | |
d951286f UD |
58 | sort > $testout |
59 | ||
60 | cat <<EOF | cmp $testout - || exit 1 | |
650425ce UD |
61 | base = "$tmp/", file = "ftwtest.d", flag = FTW_D, level = 0 |
62 | base = "$tmp/ftwtest.d/", file = "bar", flag = FTW_D, level = 1 | |
63 | base = "$tmp/ftwtest.d/", file = "baz", flag = FTW_F, level = 1 | |
64 | base = "$tmp/ftwtest.d/", file = "foo", flag = FTW_D, level = 1 | |
65 | base = "$tmp/ftwtest.d/bar/", file = "xo", flag = FTW_NS, level = 2 | |
66 | base = "$tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_D, level = 2 | |
67 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F, level = 3 | |
68 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SLN, level = 3 | |
69 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_D, level = 3 | |
70 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F, level = 4 | |
71 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_D, level = 4 | |
72 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F, level = 5 | |
d951286f UD |
73 | EOF |
74 | rm $testout | |
75 | ||
5ae3e846 | 76 | LD_LIBRARY_PATH=$objpfx $ldso $testprogram --depth $tmpdir | |
d951286f UD |
77 | sort > $testout |
78 | ||
79 | cat <<EOF | cmp $testout - || exit 1 | |
650425ce UD |
80 | base = "$tmp/", file = "ftwtest.d", flag = FTW_DP, level = 0 |
81 | base = "$tmp/ftwtest.d/", file = "bar", flag = FTW_DP, level = 1 | |
82 | base = "$tmp/ftwtest.d/", file = "baz", flag = FTW_F, level = 1 | |
83 | base = "$tmp/ftwtest.d/", file = "foo", flag = FTW_DP, level = 1 | |
84 | base = "$tmp/ftwtest.d/bar/", file = "xo", flag = FTW_NS, level = 2 | |
85 | base = "$tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_DP, level = 2 | |
86 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F, level = 3 | |
87 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SLN, level = 3 | |
88 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_DP, level = 3 | |
89 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F, level = 4 | |
90 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_DP, level = 4 | |
91 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F, level = 5 | |
f671aeab UD |
92 | EOF |
93 | rm $testout | |
94 | ||
5ae3e846 | 95 | LD_LIBRARY_PATH=$objpfx $ldso $testprogram --phys $tmpdir | |
f671aeab UD |
96 | sort > $testout |
97 | ||
98 | cat <<EOF | cmp $testout - || exit 1 | |
650425ce UD |
99 | base = "$tmp/", file = "ftwtest.d", flag = FTW_D, level = 0 |
100 | base = "$tmp/ftwtest.d/", file = "bar", flag = FTW_D, level = 1 | |
101 | base = "$tmp/ftwtest.d/", file = "baz", flag = FTW_F, level = 1 | |
102 | base = "$tmp/ftwtest.d/", file = "foo", flag = FTW_D, level = 1 | |
103 | base = "$tmp/ftwtest.d/bar/", file = "xo", flag = FTW_NS, level = 2 | |
104 | base = "$tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_D, level = 2 | |
105 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F, level = 3 | |
106 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SL, level = 3 | |
107 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_D, level = 3 | |
108 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F, level = 4 | |
109 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "link@2", flag = FTW_SL, level = 4 | |
110 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_D, level = 4 | |
111 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F, level = 5 | |
112 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "link@3", flag = FTW_SL, level = 5 | |
d951286f UD |
113 | EOF |
114 | rm $testout | |
115 | ||
2604afb1 | 116 | # For the next test everything must be readable. |
7603ea28 | 117 | chmod -fR a+x $tmpdir |
2604afb1 UD |
118 | |
119 | LD_LIBRARY_PATH=$objpfx $ldso $testprogram --chdir $tmpdir | | |
120 | sort > $testout | |
121 | ||
af6f3906 | 122 | # perhaps $tmp involves some symlinks... |
cc3fa755 | 123 | tmpreal=`cd $tmp; /bin/pwd 2>/dev/null || /usr/bin/pwd` |
af6f3906 | 124 | |
2604afb1 | 125 | cat <<EOF | cmp $testout - || exit 1 |
af6f3906 UD |
126 | base = "$tmp/", file = "ftwtest.d", flag = FTW_D, cwd = $tmpreal, level = 0 |
127 | base = "$tmp/ftwtest.d/", file = "bar", flag = FTW_D, cwd = $tmpreal/ftwtest.d, level = 1 | |
128 | base = "$tmp/ftwtest.d/", file = "baz", flag = FTW_F, cwd = $tmpreal/ftwtest.d, level = 1 | |
129 | base = "$tmp/ftwtest.d/", file = "foo", flag = FTW_D, cwd = $tmpreal/ftwtest.d, level = 1 | |
130 | base = "$tmp/ftwtest.d/bar/", file = "xo", flag = FTW_F, cwd = $tmpreal/ftwtest.d/bar, level = 2 | |
131 | base = "$tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_D, cwd = $tmpreal/ftwtest.d/foo, level = 2 | |
132 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F, cwd = $tmpreal/ftwtest.d/foo/lvl1, level = 3 | |
133 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SLN, cwd = $tmpreal/ftwtest.d/foo/lvl1, level = 3 | |
134 | base = "$tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_D, cwd = $tmpreal/ftwtest.d/foo/lvl1, level = 3 | |
135 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F, cwd = $tmpreal/ftwtest.d/foo/lvl1/lvl2, level = 4 | |
136 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_D, cwd = $tmpreal/ftwtest.d/foo/lvl1/lvl2, level = 4 | |
137 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F, cwd = $tmpreal/ftwtest.d/foo/lvl1/lvl2/lvl3, level = 5 | |
2604afb1 UD |
138 | EOF |
139 | rm $testout | |
140 | ||
a5ce5fcf UD |
141 | curwd=`/bin/pwd 2>/dev/null || /usr/bin/pwd` |
142 | cd "$tmp" | |
143 | LD_LIBRARY_PATH=$objpfx $ldso $testprogram --chdir ftwtest.d | | |
144 | sort > $testout | |
145 | cd "$curwd" | |
146 | ||
147 | cat <<EOF | diff -u $testout - || exit 1 | |
148 | base = "", file = "ftwtest.d", flag = FTW_D, cwd = $tmpreal, level = 0 | |
149 | base = "ftwtest.d/", file = "bar", flag = FTW_D, cwd = $tmpreal/ftwtest.d, level = 1 | |
150 | base = "ftwtest.d/", file = "baz", flag = FTW_F, cwd = $tmpreal/ftwtest.d, level = 1 | |
151 | base = "ftwtest.d/", file = "foo", flag = FTW_D, cwd = $tmpreal/ftwtest.d, level = 1 | |
152 | base = "ftwtest.d/bar/", file = "xo", flag = FTW_F, cwd = $tmpreal/ftwtest.d/bar, level = 2 | |
153 | base = "ftwtest.d/foo/", file = "lvl1", flag = FTW_D, cwd = $tmpreal/ftwtest.d/foo, level = 2 | |
154 | base = "ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F, cwd = $tmpreal/ftwtest.d/foo/lvl1, level = 3 | |
155 | base = "ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SLN, cwd = $tmpreal/ftwtest.d/foo/lvl1, level = 3 | |
156 | base = "ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_D, cwd = $tmpreal/ftwtest.d/foo/lvl1, level = 3 | |
157 | base = "ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F, cwd = $tmpreal/ftwtest.d/foo/lvl1/lvl2, level = 4 | |
158 | base = "ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_D, cwd = $tmpreal/ftwtest.d/foo/lvl1/lvl2, level = 4 | |
159 | base = "ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F, cwd = $tmpreal/ftwtest.d/foo/lvl1/lvl2/lvl3, level = 5 | |
160 | EOF | |
161 | rm $testout | |
162 | ||
3d73829c UD |
163 | LD_LIBRARY_PATH=$objpfx $ldso $testprogram --early-exit $tmpdir | |
164 | sort > $testout | |
165 | ||
166 | cat <<EOF | cmp $testout - || exit 1 | |
167 | base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F, level = 4 | |
168 | succeeded | |
169 | EOF | |
170 | rm $testout | |
171 | ||
d951286f UD |
172 | rm -fr $tmpdir |
173 | ||
f671aeab | 174 | exit 0 |