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). 4 5# Copyright (C) 2011-2023 Free Software Foundation, Inc. 6 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. 11 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. 16 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/>. 19 20. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src 21print_ver_ rm du chmod 22expensive_ 23 24mkdir d2 \ 25 && touch d2/f || framework_failure_ 26 27# Restrict memory. Each of these coreutils-8.12 programs would fail 28# with a diagnostic like "rm: fts_read failed: Cannot allocate memory". 29vm=$(get_min_ulimit_v_ du -sh d2) \ 30 || skip_ "this shell lacks ulimit support" 31 32# With many files in a single directory... 33mkdir d || framework_failure_ 34seq --format="d/%06g" 200000 | xargs touch || framework_failure_ 35 36# Allow 35MiB more memory as for the trivial case above. 37(ulimit -v $(($vm + 35000)) && du -sh d) || fail=1 38 39vm=$(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 42 43vm=$(get_min_ulimit_v_ rm -rf d2) \ 44 || skip_ "this shell lacks ulimit support" 45(ulimit -v $(($vm + 35000)) && rm -rf d) || fail=1 46 47Exit $fail 48