build: ensure sys/select.h is included
[coreutils.git] / tests / rm / many-dir-entries-vs-OOM.sh
blob97653106701bca461add516cce99fcc4e317a9bd
1 #!/bin/sh
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-2019 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
22 expensive_
24 mkdir d2 \
25 && touch d2/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_ "this shell lacks ulimit support"
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
47 Exit $fail