2 # In coreutils-8.12, rm,du,chmod, etc. would use too much memory
3 # when processing a directory with many entries (as in > 100,000).
5 # Copyright (C) 2011-2024 Free Software Foundation, Inc.
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.
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.
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/>.
20 .
"${srcdir=.}/tests/init.sh"; path_prepend_ .
/src
21 print_ver_
rm du
chmod
25 && touch d
2/f || framework_failure_
27 # Restrict memory. Each of these coreutils-8.12 programs would fail
28 # with a diagnostic like "rm: fts_read failed: Cannot allocate memory".
29 vm
=$
(get_min_ulimit_v_ du
-sh d2
) \
30 || skip_
'shell lacks ulimit, or ASAN enabled'
32 # With many files in a single directory...
33 mkdir d || framework_failure_
34 seq --format="d/%06g" 200000 |
xargs touch || framework_failure_
36 # Allow 35MiB more memory as for the trivial case above.
37 (ulimit -v $
(($vm + 35000)) && du
-sh d
) || fail
=1
39 vm
=$
(get_min_ulimit_v_
chmod -R 700 d2
) \
40 || skip_
"this shell lacks ulimit support"
41 (ulimit -v $
(($vm + 35000)) && chmod -R 700 d
) || fail
=1
43 vm
=$
(get_min_ulimit_v_
rm -rf d2
) \
44 || skip_
"this shell lacks ulimit support"
45 (ulimit -v $
(($vm + 35000)) && rm -rf d
) || fail
=1