From 99ccd52a9538745009f32a0a400e0f42ff70a077 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 27 Jan 2017 11:47:11 +0100 Subject: [PATCH 01/59] test-lock: disable the rwlock test --- findutils-4.6.0-test-lock.patch | 29 +++++++++++++++++++++++++++++ findutils.spec | 3 +++ 2 files changed, 32 insertions(+) create mode 100644 findutils-4.6.0-test-lock.patch diff --git a/findutils-4.6.0-test-lock.patch b/findutils-4.6.0-test-lock.patch new file mode 100644 index 0000000..780987e --- /dev/null +++ b/findutils-4.6.0-test-lock.patch @@ -0,0 +1,29 @@ +From 129f23ce758620fade812baab811379ce8454048 Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Fri, 27 Jan 2017 11:44:41 +0100 +Subject: [PATCH] test-lock: disable the rwlock test + +It hangs indefinitely if the system rwlock implementation does not +prevent writer starvation (and glibc does not implement it). + +Bug: http://www.mail-archive.com/bug-gnulib@gnu.org/msg33017.html +--- + tests/test-lock.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/test-lock.c b/tests/test-lock.c +index a992f64..fd9c014 100644 +--- a/tests/test-lock.c ++++ b/tests/test-lock.c +@@ -42,7 +42,7 @@ + Uncomment some of these, to verify that all tests crash if no locking + is enabled. */ + #define DO_TEST_LOCK 1 +-#define DO_TEST_RWLOCK 1 ++#define DO_TEST_RWLOCK 0 + #define DO_TEST_RECURSIVE_LOCK 1 + #define DO_TEST_ONCE 1 + +-- +2.7.4 + diff --git a/findutils.spec b/findutils.spec index cb80b64..a156206 100644 --- a/findutils.spec +++ b/findutils.spec @@ -33,6 +33,9 @@ Patch8: findutils-4.5.15-leaf-opt.patch # avoid SIGSEGV in case the internal -noop option is used (#1346471) Patch9: findutils-4.6.0-internal-noop.patch +# test-lock: disable the rwlock test +Patch10: findutils-4.6.0-test-lock.patch + Requires(post): /sbin/install-info Requires(preun): /sbin/install-info Conflicts: filesystem < 3 From ae38feed7f2c3f63b01b6b41b31d09bbeffdeccd Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 27 Jan 2017 11:52:13 +0100 Subject: [PATCH 02/59] add explicit BR for git as we use it in %prep --- findutils.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index a156206..c331fb6 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 8%{?dist} +Release: 9%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -45,6 +45,7 @@ Provides: bundled(gnulib) BuildRequires: automake BuildRequires: dejagnu BuildRequires: gettext-devel +BuildRequires: git BuildRequires: libselinux-devel BuildRequires: texinfo @@ -135,6 +136,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Fri Jan 27 2017 Kamil Dudka - 1:4.6.0-9 +- add explicit BR for git as we use it in %%prep + * Fri Sep 16 2016 Kamil Dudka - 1:4.6.0-8 - disable leaf optimization for NFS (#1299169) From 500388ce608acea5ea4a47a5b923199fe412bbe7 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Mon, 30 Jan 2017 22:50:41 +0100 Subject: [PATCH 03/59] Related: #1417753 - avoid using broken memcmp() code that gcc generates on ppc64le --- findutils.spec | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index c331fb6..2f0185e 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 9%{?dist} +Release: 10%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -95,6 +95,11 @@ git commit -q -m "after invocation of autoreconf" # prevent test-isinf from failing with gcc-5.3.1 on ppc64le (#1294016) export CFLAGS="$RPM_OPT_FLAGS -D__SUPPORT_SNAN__" +%ifarch ppc64le +# avoid using broken memcmp() code that gcc generates on ppc64le (#1417753) +CFLAGS="$CFLAGS -fno-builtin-memcmp" +%endif + mkdir build cd build ln -s ../configure @@ -136,6 +141,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Mon Jan 30 2017 Kamil Dudka - 1:4.6.0-10 +- avoid using broken memcmp() code that gcc generates on ppc64le (#1417753) + * Fri Jan 27 2017 Kamil Dudka - 1:4.6.0-9 - add explicit BR for git as we use it in %%prep From 43252cb2c914998a7fe15b0239cadb01ad5c9051 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 10 Feb 2017 09:46:49 +0000 Subject: [PATCH 04/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 2f0185e..04eb0ca 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 10%{?dist} +Release: 11%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -141,6 +141,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Fri Feb 10 2017 Fedora Release Engineering - 1:4.6.0-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + * Mon Jan 30 2017 Kamil Dudka - 1:4.6.0-10 - avoid using broken memcmp() code that gcc generates on ppc64le (#1417753) From 339b378e9b6a084791e323389daa071f1e7f07ac Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Thu, 2 Mar 2017 09:59:17 +0100 Subject: [PATCH 05/59] Related: #1417753 - drop ppc64le workaround no longer needed --- findutils.spec | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/findutils.spec b/findutils.spec index 04eb0ca..a384132 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 11%{?dist} +Release: 12%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -95,11 +95,6 @@ git commit -q -m "after invocation of autoreconf" # prevent test-isinf from failing with gcc-5.3.1 on ppc64le (#1294016) export CFLAGS="$RPM_OPT_FLAGS -D__SUPPORT_SNAN__" -%ifarch ppc64le -# avoid using broken memcmp() code that gcc generates on ppc64le (#1417753) -CFLAGS="$CFLAGS -fno-builtin-memcmp" -%endif - mkdir build cd build ln -s ../configure @@ -141,6 +136,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Thu Mar 02 2017 Kamil Dudka - 1:4.6.0-12 +- drop ppc64le workaround no longer needed (#1417753) + * Fri Feb 10 2017 Fedora Release Engineering - 1:4.6.0-11 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild From 906b1d5b39d2c124db2b6d91503176fddf75a242 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 26 Jul 2017 08:23:38 +0000 Subject: [PATCH 06/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index a384132..9623e96 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 12%{?dist} +Release: 13%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -136,6 +136,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Wed Jul 26 2017 Fedora Release Engineering - 1:4.6.0-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + * Thu Mar 02 2017 Kamil Dudka - 1:4.6.0-12 - drop ppc64le workaround no longer needed (#1417753) From 4153c6a0f0e6dd0184ef4df85ced6959fb83baaa Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 2 Aug 2017 20:35:02 +0000 Subject: [PATCH 07/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 9623e96..0ed8b09 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 13%{?dist} +Release: 14%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -136,6 +136,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Wed Aug 02 2017 Fedora Release Engineering - 1:4.6.0-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + * Wed Jul 26 2017 Fedora Release Engineering - 1:4.6.0-13 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild From 8cb9e21ac6cde4d29c78f856b901ff7c049c1aec Mon Sep 17 00:00:00 2001 From: Serhii Turivny Date: Thu, 19 Oct 2017 11:08:24 +0300 Subject: [PATCH 08/59] Add CI tests using the standard test interface --- tests/smoke/Makefile | 63 ++++++++++++++++++++++++++++ tests/smoke/PURPOSE | 3 ++ tests/smoke/runtest.sh | 64 ++++++++++++++++++++++++++++ tests/tests.yml | 14 +++++++ tests/xautofs/Makefile | 65 +++++++++++++++++++++++++++++ tests/xautofs/PURPOSE | 8 ++++ tests/xautofs/runtest.sh | 90 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 307 insertions(+) create mode 100644 tests/smoke/Makefile create mode 100644 tests/smoke/PURPOSE create mode 100755 tests/smoke/runtest.sh create mode 100644 tests/tests.yml create mode 100644 tests/xautofs/Makefile create mode 100644 tests/xautofs/PURPOSE create mode 100755 tests/xautofs/runtest.sh diff --git a/tests/smoke/Makefile b/tests/smoke/Makefile new file mode 100644 index 0000000..a68f70e --- /dev/null +++ b/tests/smoke/Makefile @@ -0,0 +1,63 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/findutils/Sanity/smoke +# Description: Smoke test for find and xargs. +# Author: Branislav Nater +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/findutils/Sanity/smoke +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Branislav Nater " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Smoke test for find and xargs." >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: findutils" >> $(METADATA) + @echo "Requires: findutils" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/smoke/PURPOSE b/tests/smoke/PURPOSE new file mode 100644 index 0000000..87a1ce1 --- /dev/null +++ b/tests/smoke/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/findutils/Sanity/smoke +Description: Smoke test for find and xargs. +Author: Branislav Nater diff --git a/tests/smoke/runtest.sh b/tests/smoke/runtest.sh new file mode 100755 index 0000000..438548d --- /dev/null +++ b/tests/smoke/runtest.sh @@ -0,0 +1,64 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/findutils/Sanity/smoke +# Description: Smoke test for find and xargs. +# Author: Branislav Nater +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include rhts environment +. /usr/bin/rhts-environment.sh || exit 1 +. /usr/lib/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="findutils" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + rlRun "touch \"file with spaces\"" 0 + rlRun "mkdir dir" 0 + rlRun "touch dir/file1" 0 + rlPhaseEnd + + rlGetTestState && { + rlPhaseStartTest + rlRun "find . -name \"file*\" -type f | tee output | wc -l > wcout" 0 + cat output + rlAssertGrep 2 wcout + rlRun "find $TmpDir -mindepth 1 -type d | tee output | wc -l > wcout" 0 + cat output + rlAssertGrep 1 wcout + rlRun "find $TmpDir -name \"file*\" -print0 | xargs -0 ls -l | tee output | wc -l > wcout" 0 + cat output + rlAssertGrep 2 wcout + rlPhaseEnd + } + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalEnd +rlJournalPrintText diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..636db22 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,14 @@ +--- +# Tests which will run in all contexts +- hosts: localhost + roles: + - role: standard-test-beakerlib + tags: + - classic + - container + - atomic + tests: + - smoke + - xautofs + required_packages: + - autofs # autofs required for xautofs test diff --git a/tests/xautofs/Makefile b/tests/xautofs/Makefile new file mode 100644 index 0000000..d273b6f --- /dev/null +++ b/tests/xautofs/Makefile @@ -0,0 +1,65 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/findutils/Sanity/options/xautofs +# Description: Check xautofs option +# Author: Petr Splichal +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2009 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/findutils/Sanity/options/xautofs +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Branislav Nater " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Check xautofs option" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 10m" >> $(METADATA) + @echo "RunFor: findutils" >> $(METADATA) + @echo "Requires: autofs findutils" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 485672 529391" >> $(METADATA) + @echo "Releases: -RHEL3 -RHEL4" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/xautofs/PURPOSE b/tests/xautofs/PURPOSE new file mode 100644 index 0000000..e20bfd1 --- /dev/null +++ b/tests/xautofs/PURPOSE @@ -0,0 +1,8 @@ +PURPOSE of /CoreOS/findutils/Sanity/options/xautofs +Description: Check xautofs option +Author: Petr Splichal +Bug summary: [RFE] Modify find to be able to skip direct mapped autofs mounts +Bugzilla link: None + +Check that the new -xautofs option works as expected: make sure +find does not descend into directories on autofs filesystems. diff --git a/tests/xautofs/runtest.sh b/tests/xautofs/runtest.sh new file mode 100755 index 0000000..a0a2cb1 --- /dev/null +++ b/tests/xautofs/runtest.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# vim: dict=/usr/share/rhts-library/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/findutils/Sanity/options/xautofs +# Description: Check xautofs option +# Author: Petr Splichal +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2009 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include rhts environment +. /usr/bin/rhts-environment.sh +. /usr/share/rhts-library/rhtslib.sh + +PACKAGE="findutils" + +MasterConf="/etc/auto.master" +DirectConf="/etc/auto.direct" + +MountDir="/mnt/findutils" +AutomountDir="$MountDir/etc" +RegularDir="$MountDir/regular/directory/master" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlAssertRpm "autofs" + rlRun "set -o pipefail" + + # create dirs & back up + rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory" + rlRun "mkdir -p $RegularDir" 0 "Creating regular directory" + rlRun "rlFileBackup $MasterConf" + + # set up autofs + rlRun "echo '/- /etc/auto.direct' > $MasterConf" \ + 0 "Setting up autofs master map" + rlRun "echo '$AutomountDir localhost:/etc' > $DirectConf" \ + 0 "Setting up autofs direct map" + + # RHEL-7 is using xfs + rlIsRHEL 4 5 6 && fs="ext[34]" || fs="xfs" + + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest "Without -xautofs option" + rlRun "rlServiceStart autofs" 0 "Starting autofs" + rlAssertNotGrep "$AutomountDir.*$fs" "/proc/mounts" + rlRun "find $MountDir -noleaf -name '*master*' | tee filelist" + rlAssertGrep "$RegularDir" "filelist" + rlAssertGrep "$MountDir$MasterConf" "filelist" + rlAssertGrep "$AutomountDir.*$fs" "/proc/mounts" + rlPhaseEnd + + rlPhaseStartTest "With -xautofs option" + rlRun "rlServiceStart autofs" 0 "Starting autofs" + rlAssertNotGrep "$AutomountDir.*$fs" "/proc/mounts" + rlRun "find $MountDir -xautofs -noleaf -name '*master*' | tee filelist" + rlAssertGrep "$RegularDir" "filelist" + rlAssertNotGrep "$MountDir$MasterConf" "filelist" + rlAssertNotGrep "$AutomountDir.*$fs" "/proc/mounts" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rlFileRestore" + rlRun "rlServiceRestore autofs" + rlRun "rm -r $TmpDir $DirectConf $MountDir" 0 "Removing tmp files" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd From c3e43d3d187eae0b04b62c7270249210b791bd6d Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 7 Feb 2018 09:40:10 +0000 Subject: [PATCH 09/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 0ed8b09..260bdb3 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 14%{?dist} +Release: 15%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -136,6 +136,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Wed Feb 07 2018 Fedora Release Engineering - 1:4.6.0-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + * Wed Aug 02 2017 Fedora Release Engineering - 1:4.6.0-14 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild From 7c9da61ea1a8b47ba142172ebfb150d02cd4eb68 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Mon, 12 Feb 2018 18:38:31 +0100 Subject: [PATCH 10/59] Resolves: #1544429 - import gnulib's FTS module from upstream commit 281b825e --- findutils-4.5.15-leaf-opt.patch | 141 ------ findutils-4.6.0-fts-update.patch | 761 +++++++++++++++++++++++++++++++ findutils-4.6.0-leaf-opt.patch | 83 ++++ findutils.spec | 14 +- 4 files changed, 854 insertions(+), 145 deletions(-) delete mode 100644 findutils-4.5.15-leaf-opt.patch create mode 100644 findutils-4.6.0-fts-update.patch create mode 100644 findutils-4.6.0-leaf-opt.patch diff --git a/findutils-4.5.15-leaf-opt.patch b/findutils-4.5.15-leaf-opt.patch deleted file mode 100644 index 64817fb..0000000 --- a/findutils-4.5.15-leaf-opt.patch +++ /dev/null @@ -1,141 +0,0 @@ -From 1328926a705fdb4728c1f255dd368de928736d39 Mon Sep 17 00:00:00 2001 -From: Kamil Dudka -Date: Fri, 25 Sep 2015 16:09:39 +0200 -Subject: [PATCH 1/3] fts: introduce the FTS_NOLEAF flag - -The flag is needed to implement the -noleaf option of find. -* lib/fts.c (link_count_optimize_ok): Implement the FTS_NOLEAF flag. -* lib/fts_.h (FTS_NOLEAF): New macro, shifted conflicting constants. ---- - gl/lib/fts.c | 4 ++++ - gl/lib/fts_.h | 12 +++++++++--- - 2 files changed, 13 insertions(+), 3 deletions(-) - -diff --git a/gl/lib/fts.c b/gl/lib/fts.c -index d2d404f..808466f 100644 ---- a/gl/lib/fts.c -+++ b/gl/lib/fts.c -@@ -788,6 +788,10 @@ link_count_optimize_ok (FTSENT const *p) - bool opt_ok; - struct LCO_ent *t2; - -+ if (ISSET(FTS_NOLEAF)) -+ /* leaf optimization explicitly disabled by the FTS_NOLEAF flag */ -+ return false; -+ - /* If we're not in CWDFD mode, don't bother with this optimization, - since the caller is not serious about performance. */ - if (!ISSET(FTS_CWDFD)) -diff --git a/gl/lib/fts_.h b/gl/lib/fts_.h -index 63d4b74..f1d519b 100644 ---- a/gl/lib/fts_.h -+++ b/gl/lib/fts_.h -@@ -155,10 +155,16 @@ typedef struct { - from input path names during fts_open initialization. */ - # define FTS_VERBATIM 0x1000 - --# define FTS_OPTIONMASK 0x1fff /* valid user option mask */ -+ /* Disable leaf optimization (which eliminates stat() calls during traversal, -+ based on the count of nested directories stored in stat.st_nlink of each -+ directory). Note that the optimization is by default enabled only for -+ selected file systems, and only if the FTS_CWDFD flag is set. */ -+# define FTS_NOLEAF 0x2000 - --# define FTS_NAMEONLY 0x2000 /* (private) child names only */ --# define FTS_STOP 0x4000 /* (private) unrecoverable error */ -+# define FTS_OPTIONMASK 0x3fff /* valid user option mask */ -+ -+# define FTS_NAMEONLY 0x4000 /* (private) child names only */ -+# define FTS_STOP 0x8000 /* (private) unrecoverable error */ - int fts_options; /* fts_open options, global flags */ - - /* Map a directory's device number to a boolean. The boolean is --- -2.5.0 - - -From c186934e6e37ddadf7511abb9b1045192757618e Mon Sep 17 00:00:00 2001 -From: Kamil Dudka -Date: Fri, 25 Sep 2015 19:13:15 +0200 -Subject: [PATCH 2/3] ftsfind: propagate the -noleaf option to FTS - -* find/ftsfind.c (find): Propagate the -noleaf option to FTS. ---- - find/ftsfind.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/find/ftsfind.c b/find/ftsfind.c -index 5159470..e34b672 100644 ---- a/find/ftsfind.c -+++ b/find/ftsfind.c -@@ -559,6 +559,9 @@ find (char *arg) - if (options.stay_on_filesystem) - ftsoptions |= FTS_XDEV; - -+ if (options.no_leaf_check) -+ ftsoptions |= FTS_NOLEAF; -+ - p = fts_open (arglist, ftsoptions, NULL); - if (NULL == p) - { --- -2.5.0 - - -From 2edb6204bab0acb0ef8cdde7499396afd9c66131 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?P=C3=A1draig=20Brady?= -Date: Mon, 18 Jan 2016 17:29:28 +0000 -Subject: [PATCH 3/3] fts: don't unconditionally use leaf optimization for NFS - -NFS st_nlink are not accurate on all implementations, -leading to aborts() if that assumption is made. -See -* lib/fts.c (leaf_optimization_applies): Remove NFS from -the white list, and document the issue. - -Upstream-commit: 85717b68b03bf85016c5079fbbf0c8aa2b182ba6 -Signed-off-by: Kamil Dudka ---- - gl/lib/fts.c | 19 ++++++++++--------- - 1 file changed, 10 insertions(+), 9 deletions(-) - -diff --git a/gl/lib/fts.c b/gl/lib/fts.c -index 55cd554..6e1eaf5 100644 ---- a/gl/lib/fts.c -+++ b/gl/lib/fts.c -@@ -718,22 +718,23 @@ leaf_optimization_applies (int dir_fd) - - switch (fs_buf.f_type) - { -- case S_MAGIC_NFS: -- /* NFS provides usable dirent.d_type but not necessarily for all entries -- of large directories. See . */ -- return true; -- - /* List here the file system types that lack usable dirent.d_type - info, yet for which the optimization does apply. */ - case S_MAGIC_REISERFS: - case S_MAGIC_XFS: - return true; - -+ /* Explicitly list here any other file system type for which the -+ optimization is not applicable, but need documentation. */ -+ case S_MAGIC_NFS: -+ /* NFS provides usable dirent.d_type but not necessarily for all entries -+ of large directories, so as per -+ NFS should return true. However st_nlink values are not accurate on -+ all implementations as per . */ -+ /* fall through */ - case S_MAGIC_PROC: -- /* Explicitly listing this or any other file system type for which -- the optimization is not applicable is not necessary, but we leave -- it here to document the risk. Per http://bugs.debian.org/143111, -- /proc may have bogus stat.st_nlink values. */ -+ /* Per /proc may have -+ bogus stat.st_nlink values. */ - /* fall through */ - default: - return false; --- -2.5.5 - diff --git a/findutils-4.6.0-fts-update.patch b/findutils-4.6.0-fts-update.patch new file mode 100644 index 0000000..ad6289b --- /dev/null +++ b/findutils-4.6.0-fts-update.patch @@ -0,0 +1,761 @@ +From f3337786e55909538aacfd7c29b1cf58ff444fbf Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Mon, 12 Feb 2018 12:45:36 +0100 +Subject: [PATCH 1/2] import gnulib's FTS module from upstream commit 281b825e + +--- + gl/lib/fts.c | 424 +++++++++++++++++++++++++++++----------------------------- + gl/lib/fts_.h | 10 +- + 2 files changed, 221 insertions(+), 213 deletions(-) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index c91d7a1..bfa73e3 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -1,6 +1,6 @@ + /* Traverse a file hierarchy. + +- Copyright (C) 2004-2015 Free Software Foundation, Inc. ++ Copyright (C) 2004-2018 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +@@ -13,7 +13,7 @@ + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License +- along with this program. If not, see . */ ++ along with this program. If not, see . */ + + /*- + * Copyright (c) 1990, 1993, 1994 +@@ -46,9 +46,9 @@ + + #include + +-#if defined(LIBC_SCCS) && !defined(lint) ++#if defined LIBC_SCCS && !defined GCC_LINT && !defined lint + static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; +-#endif /* LIBC_SCCS and not lint */ ++#endif + + #include "fts_.h" + +@@ -71,11 +71,7 @@ static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; + + #if ! _LIBC + # include "fcntl--.h" +-# include "dirent--.h" +-# include "unistd--.h" +-/* FIXME - use fcntl(F_DUPFD_CLOEXEC)/openat(O_CLOEXEC) once they are +- supported. */ +-# include "cloexec.h" ++# include "flexmember.h" + # include "openat.h" + # include "same-inode.h" + #endif +@@ -202,6 +198,14 @@ enum Fts_stat + while (false) + #endif + ++#ifndef FALLTHROUGH ++# if __GNUC__ < 7 ++# define FALLTHROUGH ((void) 0) ++# else ++# define FALLTHROUGH __attribute__ ((__fallthrough__)) ++# endif ++#endif ++ + static FTSENT *fts_alloc (FTS *, const char *, size_t) internal_function; + static FTSENT *fts_build (FTS *, int) internal_function; + static void fts_lfree (FTSENT *) internal_function; +@@ -296,14 +300,13 @@ static DIR * + internal_function + opendirat (int fd, char const *dir, int extra_flags, int *pdir_fd) + { +- int new_fd = openat (fd, dir, +- (O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK +- | extra_flags)); ++ int open_flags = (O_RDONLY | O_CLOEXEC | O_DIRECTORY | O_NOCTTY ++ | O_NONBLOCK | extra_flags); ++ int new_fd = openat (fd, dir, open_flags); + DIR *dirp; + + if (new_fd < 0) + return NULL; +- set_cloexec_flag (new_fd, true); + dirp = fdopendir (new_fd); + if (dirp) + *pdir_fd = new_fd; +@@ -366,15 +369,13 @@ static int + internal_function + diropen (FTS const *sp, char const *dir) + { +- int open_flags = (O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK ++ int open_flags = (O_SEARCH | O_CLOEXEC | O_DIRECTORY | O_NOCTTY | O_NONBLOCK + | (ISSET (FTS_PHYSICAL) ? O_NOFOLLOW : 0) + | (ISSET (FTS_NOATIME) ? O_NOATIME : 0)); + + int fd = (ISSET (FTS_CWDFD) + ? openat (sp->fts_cwd_fd, dir, open_flags) + : open (dir, open_flags)); +- if (0 <= fd) +- set_cloexec_flag (fd, true); + return fd; + } + +@@ -470,6 +471,7 @@ fts_open (char * const *argv, + if ((parent = fts_alloc(sp, "", 0)) == NULL) + goto mem2; + parent->fts_level = FTS_ROOTPARENTLEVEL; ++ parent->fts_n_dirs_remaining = -1; + } + + /* The classic fts implementation would call fts_stat with +@@ -656,39 +658,139 @@ fts_close (FTS *sp) + return (0); + } + ++/* Minimum link count of a traditional Unix directory. When leaf ++ optimization is OK and MIN_DIR_NLINK <= st_nlink, then st_nlink is ++ an upper bound on the number of subdirectories (counting "." and ++ ".."). */ ++enum { MIN_DIR_NLINK = 2 }; ++ ++/* Whether leaf optimization is OK for a directory. */ ++enum leaf_optimization ++ { ++ /* st_nlink is not reliable for this directory's subdirectories. */ ++ NO_LEAF_OPTIMIZATION, ++ ++ /* Leaf optimization is OK, but is not useful for avoiding stat calls. */ ++ OK_LEAF_OPTIMIZATION, ++ ++ /* Leaf optimization is not only OK: it is useful for avoiding ++ stat calls, because dirent.d_type does not work. */ ++ NOSTAT_LEAF_OPTIMIZATION ++ }; ++ + #if defined __linux__ \ + && HAVE_SYS_VFS_H && HAVE_FSTATFS && HAVE_STRUCT_STATFS_F_TYPE + + # include + + /* Linux-specific constants from coreutils' src/fs.h */ +-# define S_MAGIC_TMPFS 0x1021994 ++# define S_MAGIC_AFS 0x5346414F + # define S_MAGIC_NFS 0x6969 ++# define S_MAGIC_PROC 0x9FA0 + # define S_MAGIC_REISERFS 0x52654973 ++# define S_MAGIC_TMPFS 0x1021994 + # define S_MAGIC_XFS 0x58465342 +-# define S_MAGIC_PROC 0x9FA0 + +-/* Return false if it is easy to determine the file system type of +- the directory on which DIR_FD is open, and sorting dirents on +- inode numbers is known not to improve traversal performance with +- that type of file system. Otherwise, return true. */ ++# ifdef HAVE___FSWORD_T ++typedef __fsword_t fsword; ++# else ++typedef long int fsword; ++# endif ++ ++/* Map a stat.st_dev number to a file system type number f_ftype. */ ++struct dev_type ++{ ++ dev_t st_dev; ++ fsword f_type; ++}; ++ ++/* Use a tiny initial size. If a traversal encounters more than ++ a few devices, the cost of growing/rehashing this table will be ++ rendered negligible by the number of inodes processed. */ ++enum { DEV_TYPE_HT_INITIAL_SIZE = 13 }; ++ ++static size_t ++dev_type_hash (void const *x, size_t table_size) ++{ ++ struct dev_type const *ax = x; ++ uintmax_t dev = ax->st_dev; ++ return dev % table_size; ++} ++ + static bool +-dirent_inode_sort_may_be_useful (int dir_fd) ++dev_type_compare (void const *x, void const *y) ++{ ++ struct dev_type const *ax = x; ++ struct dev_type const *ay = y; ++ return ax->st_dev == ay->st_dev; ++} ++ ++/* Return the file system type of P, or 0 if not known. ++ Try to cache known values. */ ++ ++static fsword ++filesystem_type (FTSENT const *p) ++{ ++ FTS *sp = p->fts_fts; ++ Hash_table *h = sp->fts_leaf_optimization_works_ht; ++ struct dev_type *ent; ++ struct statfs fs_buf; ++ ++ /* If we're not in CWDFD mode, don't bother with this optimization, ++ since the caller is not serious about performance. */ ++ if (!ISSET (FTS_CWDFD)) ++ return 0; ++ ++ if (! h) ++ h = sp->fts_leaf_optimization_works_ht ++ = hash_initialize (DEV_TYPE_HT_INITIAL_SIZE, NULL, dev_type_hash, ++ dev_type_compare, free); ++ if (h) ++ { ++ struct dev_type tmp; ++ tmp.st_dev = p->fts_statp->st_dev; ++ ent = hash_lookup (h, &tmp); ++ if (ent) ++ return ent->f_type; ++ } ++ ++ /* Look-up failed. Query directly and cache the result. */ ++ if (fstatfs (p->fts_fts->fts_cwd_fd, &fs_buf) != 0) ++ return 0; ++ ++ if (h) ++ { ++ struct dev_type *t2 = malloc (sizeof *t2); ++ if (t2) ++ { ++ t2->st_dev = p->fts_statp->st_dev; ++ t2->f_type = fs_buf.f_type; ++ ++ ent = hash_insert (h, t2); ++ if (ent) ++ fts_assert (ent == t2); ++ else ++ free (t2); ++ } ++ } ++ ++ return fs_buf.f_type; ++} ++ ++/* Return false if it is easy to determine the file system type of the ++ directory P, and sorting dirents on inode numbers is known not to ++ improve traversal performance with that type of file system. ++ Otherwise, return true. */ ++static bool ++dirent_inode_sort_may_be_useful (FTSENT const *p) + { + /* Skip the sort only if we can determine efficiently + that skipping it is the right thing to do. + The cost of performing an unnecessary sort is negligible, + while the cost of *not* performing it can be O(N^2) with + a very large constant. */ +- struct statfs fs_buf; +- +- /* If fstatfs fails, assume sorting would be useful. */ +- if (fstatfs (dir_fd, &fs_buf) != 0) +- return true; + +- /* FIXME: what about when f_type is not an integral type? +- deal with that if/when it's encountered. */ +- switch (fs_buf.f_type) ++ switch (filesystem_type (p)) + { + case S_MAGIC_TMPFS: + case S_MAGIC_NFS: +@@ -701,133 +803,58 @@ dirent_inode_sort_may_be_useful (int dir_fd) + } + } + +-/* Given a file descriptor DIR_FD open on a directory D, +- return true if it is valid to apply the leaf-optimization +- technique of counting directories in D via stat.st_nlink. */ +-static bool +-leaf_optimization_applies (int dir_fd) ++/* Given an FTS entry P for a directory D, ++ return true if it is both useful and valid to apply leaf optimization. ++ The optimization is useful only for file systems that lack usable ++ dirent.d_type info. The optimization is valid if an st_nlink value ++ of at least MIN_DIR_NLINK is an upper bound on the number of ++ subdirectories of D, counting "." and ".." as subdirectories. */ ++static enum leaf_optimization ++leaf_optimization (FTSENT const *p) + { +- struct statfs fs_buf; +- +- /* If fstatfs fails, assume we can't use the optimization. */ +- if (fstatfs (dir_fd, &fs_buf) != 0) +- return false; +- +- /* FIXME: do we need to detect AFS mount points? I doubt it, +- unless fstatfs can report S_MAGIC_REISERFS for such a directory. */ +- +- switch (fs_buf.f_type) ++ switch (filesystem_type (p)) + { +- case S_MAGIC_NFS: +- /* NFS provides usable dirent.d_type but not necessarily for all entries +- of large directories. See . */ +- return true; +- +- /* List here the file system types that lack usable dirent.d_type ++ /* List here the file system types that may lack usable dirent.d_type + info, yet for which the optimization does apply. */ + case S_MAGIC_REISERFS: +- case S_MAGIC_XFS: +- return true; +- ++ case S_MAGIC_XFS: /* XFS lacked it until 2013-08-22 commit. */ ++ return NOSTAT_LEAF_OPTIMIZATION; ++ ++ case 0: ++ /* Leaf optimization is unsafe if the file system type is unknown. */ ++ FALLTHROUGH; ++ case S_MAGIC_AFS: ++ /* Although AFS mount points are not counted in st_nlink, they ++ act like directories. See . */ ++ FALLTHROUGH; ++ case S_MAGIC_NFS: ++ /* NFS provides usable dirent.d_type but not necessarily for all entries ++ of large directories, so as per ++ NFS should return true. However st_nlink values are not accurate on ++ all implementations as per . */ ++ FALLTHROUGH; + case S_MAGIC_PROC: +- /* Explicitly listing this or any other file system type for which +- the optimization is not applicable is not necessary, but we leave +- it here to document the risk. Per http://bugs.debian.org/143111, +- /proc may have bogus stat.st_nlink values. */ +- /* fall through */ ++ /* Per /proc ++ may have bogus stat.st_nlink values. */ ++ return NO_LEAF_OPTIMIZATION; ++ + default: +- return false; ++ return OK_LEAF_OPTIMIZATION; + } + } + + #else + static bool +-dirent_inode_sort_may_be_useful (int dir_fd _GL_UNUSED) { return true; } +-static bool +-leaf_optimization_applies (int dir_fd _GL_UNUSED) { return false; } +-#endif +- +-/* link-count-optimization entry: +- map a stat.st_dev number to a boolean: leaf_optimization_works */ +-struct LCO_ent +-{ +- dev_t st_dev; +- bool opt_ok; +-}; +- +-/* Use a tiny initial size. If a traversal encounters more than +- a few devices, the cost of growing/rehashing this table will be +- rendered negligible by the number of inodes processed. */ +-enum { LCO_HT_INITIAL_SIZE = 13 }; +- +-static size_t +-LCO_hash (void const *x, size_t table_size) +-{ +- struct LCO_ent const *ax = x; +- return (uintmax_t) ax->st_dev % table_size; +-} +- +-static bool +-LCO_compare (void const *x, void const *y) ++dirent_inode_sort_may_be_useful (FTSENT const *p _GL_UNUSED) + { +- struct LCO_ent const *ax = x; +- struct LCO_ent const *ay = y; +- return ax->st_dev == ay->st_dev; ++ return true; + } +- +-/* Ask the same question as leaf_optimization_applies, but query +- the cache first (FTS.fts_leaf_optimization_works_ht), and if necessary, +- update that cache. */ +-static bool +-link_count_optimize_ok (FTSENT const *p) ++static enum leaf_optimization ++leaf_optimization (FTSENT const *p _GL_UNUSED) + { +- FTS *sp = p->fts_fts; +- Hash_table *h = sp->fts_leaf_optimization_works_ht; +- struct LCO_ent tmp; +- struct LCO_ent *ent; +- bool opt_ok; +- struct LCO_ent *t2; +- +- /* If we're not in CWDFD mode, don't bother with this optimization, +- since the caller is not serious about performance. */ +- if (!ISSET(FTS_CWDFD)) +- return false; +- +- /* map st_dev to the boolean, leaf_optimization_works */ +- if (h == NULL) +- { +- h = sp->fts_leaf_optimization_works_ht +- = hash_initialize (LCO_HT_INITIAL_SIZE, NULL, LCO_hash, +- LCO_compare, free); +- if (h == NULL) +- return false; +- } +- tmp.st_dev = p->fts_statp->st_dev; +- ent = hash_lookup (h, &tmp); +- if (ent) +- return ent->opt_ok; +- +- /* Look-up failed. Query directly and cache the result. */ +- t2 = malloc (sizeof *t2); +- if (t2 == NULL) +- return false; +- +- /* Is it ok to perform the optimization in the dir, FTS_CWD_FD? */ +- opt_ok = leaf_optimization_applies (sp->fts_cwd_fd); +- t2->opt_ok = opt_ok; +- t2->st_dev = p->fts_statp->st_dev; +- +- ent = hash_insert (h, t2); +- if (ent == NULL) +- { +- /* insertion failed */ +- free (t2); +- return false; +- } +- fts_assert (ent == t2); +- +- return opt_ok; ++ return NO_LEAF_OPTIMIZATION; + } ++#endif + + /* + * Special case of "/" at the end of the file name so that slashes aren't +@@ -1014,13 +1041,11 @@ check_for_dir: + if (p->fts_statp->st_size == FTS_STAT_REQUIRED) + { + FTSENT *parent = p->fts_parent; +- if (FTS_ROOTLEVEL < p->fts_level +- /* ->fts_n_dirs_remaining is not valid +- for command-line-specified names. */ +- && parent->fts_n_dirs_remaining == 0 ++ if (parent->fts_n_dirs_remaining == 0 + && ISSET(FTS_NOSTAT) + && ISSET(FTS_PHYSICAL) +- && link_count_optimize_ok (parent)) ++ && (leaf_optimization (parent) ++ == NOSTAT_LEAF_OPTIMIZATION)) + { + /* nothing more needed */ + } +@@ -1029,7 +1054,8 @@ check_for_dir: + p->fts_info = fts_stat(sp, p, false); + if (S_ISDIR(p->fts_statp->st_mode) + && p->fts_level != FTS_ROOTLEVEL +- && parent->fts_n_dirs_remaining) ++ && 0 < parent->fts_n_dirs_remaining ++ && parent->fts_n_dirs_remaining != (nlink_t) -1) + parent->fts_n_dirs_remaining--; + } + } +@@ -1298,8 +1324,6 @@ fts_build (register FTS *sp, int type) + bool descend; + bool doadjust; + ptrdiff_t level; +- nlink_t nlinks; +- bool nostat; + size_t len, maxlen, new_len; + char *cp; + int dir_fd; +@@ -1370,24 +1394,6 @@ fts_build (register FTS *sp, int type) + max_entries = sp->fts_compar ? SIZE_MAX : FTS_MAX_READDIR_ENTRIES; + + /* +- * Nlinks is the number of possible entries of type directory in the +- * directory if we're cheating on stat calls, 0 if we're not doing +- * any stat calls at all, (nlink_t) -1 if we're statting everything. +- */ +- if (type == BNAMES) { +- nlinks = 0; +- /* Be quiet about nostat, GCC. */ +- nostat = false; +- } else if (ISSET(FTS_NOSTAT) && ISSET(FTS_PHYSICAL)) { +- nlinks = (cur->fts_statp->st_nlink +- - (ISSET(FTS_SEEDOT) ? 0 : 2)); +- nostat = true; +- } else { +- nlinks = -1; +- nostat = false; +- } +- +- /* + * If we're going to need to stat anything or we want to descend + * and stay in the directory, chdir. If this fails we keep going, + * but set a flag so we don't chdir after the post-order visit. +@@ -1408,15 +1414,22 @@ fts_build (register FTS *sp, int type) + the required dirp and dir_fd. */ + descend = true; + } +- else if (nlinks || type == BREAD) { ++ else ++ { ++ /* Try to descend unless it is a names-only fts_children, ++ or the directory is known to lack subdirectories. */ ++ descend = (type != BNAMES ++ && ! (ISSET (FTS_NOSTAT) && ISSET (FTS_PHYSICAL) ++ && ! ISSET (FTS_SEEDOT) ++ && cur->fts_statp->st_nlink == MIN_DIR_NLINK ++ && (leaf_optimization (cur) ++ != NO_LEAF_OPTIMIZATION))); ++ if (descend || type == BREAD) ++ { + if (ISSET(FTS_CWDFD)) +- { +- dir_fd = dup (dir_fd); +- if (0 <= dir_fd) +- set_cloexec_flag (dir_fd, true); +- } ++ dir_fd = fcntl (dir_fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); + if (dir_fd < 0 || fts_safe_changedir(sp, cur, dir_fd, NULL)) { +- if (nlinks && type == BREAD) ++ if (descend && type == BREAD) + cur->fts_errno = errno; + cur->fts_flags |= FTS_DONTCHDIR; + descend = false; +@@ -1426,8 +1439,8 @@ fts_build (register FTS *sp, int type) + cur->fts_dirp = NULL; + } else + descend = true; +- } else +- descend = false; ++ } ++ } + + /* + * Figure out the max file name length that can be stored in the +@@ -1458,11 +1471,19 @@ fts_build (register FTS *sp, int type) + tail = NULL; + nitems = 0; + while (cur->fts_dirp) { +- bool is_dir; + size_t d_namelen; ++ __set_errno (0); + struct dirent *dp = readdir(cur->fts_dirp); +- if (dp == NULL) ++ if (dp == NULL) { ++ if (errno) { ++ cur->fts_errno = errno; ++ /* If we've not read any items yet, treat ++ the error as if we can't access the dir. */ ++ cur->fts_info = (continue_readdir || nitems) ++ ? FTS_ERR : FTS_DNR; ++ } + break; ++ } + if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name)) + continue; + +@@ -1550,19 +1571,10 @@ mem1: saved_errno = errno; + to caller, when possible. */ + set_stat_type (p->fts_statp, D_TYPE (dp)); + fts_set_stat_required(p, !skip_stat); +- is_dir = (ISSET(FTS_PHYSICAL) +- && DT_MUST_BE(dp, DT_DIR)); + } else { + p->fts_info = fts_stat(sp, p, false); +- is_dir = (p->fts_info == FTS_D +- || p->fts_info == FTS_DC +- || p->fts_info == FTS_DOT); + } + +- /* Decrement link count if applicable. */ +- if (nlinks > 0 && is_dir) +- nlinks -= nostat; +- + /* We walk in directory order so "ls -f" doesn't get upset. */ + p->fts_link = NULL; + if (head == NULL) +@@ -1621,7 +1633,8 @@ mem1: saved_errno = errno; + + /* If didn't find anything, return NULL. */ + if (!nitems) { +- if (type == BREAD) ++ if (type == BREAD ++ && cur->fts_info != FTS_DNR && cur->fts_info != FTS_ERR) + cur->fts_info = FTS_DP; + fts_lfree(head); + return (NULL); +@@ -1633,8 +1646,7 @@ mem1: saved_errno = errno; + inode numbers. */ + if (nitems > _FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD + && !sp->fts_compar +- && ISSET (FTS_CWDFD) +- && dirent_inode_sort_may_be_useful (sp->fts_cwd_fd)) { ++ && dirent_inode_sort_may_be_useful (cur)) { + sp->fts_compar = fts_compare_ino; + head = fts_sort (sp, head, nitems); + sp->fts_compar = NULL; +@@ -1757,7 +1769,7 @@ fd_ring_check (FTS const *sp) + I_ring fd_w = sp->fts_fd_ring; + + int cwd_fd = sp->fts_cwd_fd; +- cwd_fd = dup (cwd_fd); ++ cwd_fd = fcntl (cwd_fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); + char *dot = getcwdat (cwd_fd, NULL, 0); + error (0, 0, "===== check ===== cwd: %s", dot); + free (dot); +@@ -1766,7 +1778,8 @@ fd_ring_check (FTS const *sp) + int fd = i_ring_pop (&fd_w); + if (0 <= fd) + { +- int parent_fd = openat (cwd_fd, "..", O_SEARCH | O_NOATIME); ++ int open_flags = O_SEARCH | O_CLOEXEC | O_NOATIME; ++ int parent_fd = openat (cwd_fd, "..", open_flags); + if (parent_fd < 0) + { + // Warn? +@@ -1795,7 +1808,6 @@ internal_function + fts_stat(FTS *sp, register FTSENT *p, bool follow) + { + struct stat *sbp = p->fts_statp; +- int saved_errno; + + if (p->fts_level == FTS_ROOTLEVEL && ISSET(FTS_COMFOLLOW)) + follow = true; +@@ -1807,13 +1819,12 @@ fts_stat(FTS *sp, register FTSENT *p, bool follow) + */ + if (ISSET(FTS_LOGICAL) || follow) { + if (stat(p->fts_accpath, sbp)) { +- saved_errno = errno; + if (errno == ENOENT + && lstat(p->fts_accpath, sbp) == 0) { + __set_errno (0); + return (FTS_SLNONE); + } +- p->fts_errno = saved_errno; ++ p->fts_errno = errno; + goto err; + } + } else if (fstatat(sp->fts_cwd_fd, p->fts_accpath, sbp, +@@ -1824,8 +1835,11 @@ err: memset(sbp, 0, sizeof(struct stat)); + } + + if (S_ISDIR(sbp->st_mode)) { +- p->fts_n_dirs_remaining = (sbp->st_nlink +- - (ISSET(FTS_SEEDOT) ? 0 : 2)); ++ p->fts_n_dirs_remaining ++ = ((sbp->st_nlink < MIN_DIR_NLINK ++ || p->fts_level <= FTS_ROOTLEVEL) ++ ? -1 ++ : sbp->st_nlink - (ISSET (FTS_SEEDOT) ? 0 : MIN_DIR_NLINK)); + if (ISDOT(p->fts_name)) { + /* Command-line "." and ".." are real directories. */ + return (p->fts_level == FTS_ROOTLEVEL ? FTS_D : FTS_DOT); +@@ -1914,17 +1928,7 @@ fts_alloc (FTS *sp, const char *name, register size_t namelen) + * The file name is a variable length array. Allocate the FTSENT + * structure and the file name in one chunk. + */ +- len = offsetof(FTSENT, fts_name) + namelen + 1; +- /* Align the allocation size so that it works for FTSENT, +- so that trailing padding may be referenced by direct access +- to the flexible array members, without triggering undefined behavior +- by accessing bytes beyond the heap allocation. This implicit access +- was seen for example with ISDOT() and GCC 5.1.1 at -O2. +- Do not use alignof (FTSENT) here, since C11 prohibits +- taking the alignment of a structure containing a flexible +- array member. */ +- len += alignof (max_align_t) - 1; +- len &= ~ (alignof (max_align_t) - 1); ++ len = FLEXSIZEOF(FTSENT, fts_name, namelen + 1); + if ((p = malloc(len)) == NULL) + return (NULL); + +diff --git a/gl/lib/fts_.h b/gl/lib/fts_.h +index b9a3f12..70cc9e3 100644 +--- a/gl/lib/fts_.h ++++ b/gl/lib/fts_.h +@@ -1,6 +1,6 @@ + /* Traverse a file hierarchy. + +- Copyright (C) 2004-2015 Free Software Foundation, Inc. ++ Copyright (C) 2004-2018 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +@@ -13,7 +13,7 @@ + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License +- along with this program. If not, see . */ ++ along with this program. If not, see . */ + + /* + * Copyright (c) 1989, 1993 +@@ -220,7 +220,11 @@ typedef struct _ftsent { + ptrdiff_t fts_level; /* depth (-1 to N) */ + + size_t fts_namelen; /* strlen(fts_name) */ +- nlink_t fts_n_dirs_remaining; /* count down from st_nlink */ ++ ++ /* If not (nlink_t) -1, an upper bound on the number of ++ remaining subdirectories of interest. If this becomes ++ zero, some work can be avoided. */ ++ nlink_t fts_n_dirs_remaining; + + # define FTS_D 1 /* preorder directory */ + # define FTS_DC 2 /* directory that causes cycles */ +-- +2.13.6 + + +From ea88dd373c60feab541fe037369805f326dc3494 Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Mon, 12 Feb 2018 18:58:30 +0100 +Subject: [PATCH 2/2] fts: remove dependency on gnulib's fleximember.h + +... by reverting upstream commit edb9d82948cb23f67a19e1b435047a0570225df3 +--- + gl/lib/fts.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index bfa73e3..c37ebe2 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -71,7 +71,6 @@ static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; + + #if ! _LIBC + # include "fcntl--.h" +-# include "flexmember.h" + # include "openat.h" + # include "same-inode.h" + #endif +@@ -1928,7 +1927,17 @@ fts_alloc (FTS *sp, const char *name, register size_t namelen) + * The file name is a variable length array. Allocate the FTSENT + * structure and the file name in one chunk. + */ +- len = FLEXSIZEOF(FTSENT, fts_name, namelen + 1); ++ len = offsetof(FTSENT, fts_name) + namelen + 1; ++ /* Align the allocation size so that it works for FTSENT, ++ so that trailing padding may be referenced by direct access ++ to the flexible array members, without triggering undefined behavior ++ by accessing bytes beyond the heap allocation. This implicit access ++ was seen for example with ISDOT() and GCC 5.1.1 at -O2. ++ Do not use alignof (FTSENT) here, since C11 prohibits ++ taking the alignment of a structure containing a flexible ++ array member. */ ++ len += alignof (max_align_t) - 1; ++ len &= ~ (alignof (max_align_t) - 1); + if ((p = malloc(len)) == NULL) + return (NULL); + +-- +2.13.6 + diff --git a/findutils-4.6.0-leaf-opt.patch b/findutils-4.6.0-leaf-opt.patch new file mode 100644 index 0000000..7fb3035 --- /dev/null +++ b/findutils-4.6.0-leaf-opt.patch @@ -0,0 +1,83 @@ +From 1328926a705fdb4728c1f255dd368de928736d39 Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Fri, 25 Sep 2015 16:09:39 +0200 +Subject: [PATCH 1/2] fts: introduce the FTS_NOLEAF flag + +The flag is needed to implement the -noleaf option of find. +* lib/fts.c (link_count_optimize_ok): Implement the FTS_NOLEAF flag. +* lib/fts_.h (FTS_NOLEAF): New macro, shifted conflicting constants. +--- + gl/lib/fts.c | 4 ++++ + gl/lib/fts_.h | 12 +++++++++--- + 2 files changed, 13 insertions(+), 3 deletions(-) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index d2d404f..808466f 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -736,6 +736,10 @@ filesystem_type (FTSENT const *p) + struct dev_type *ent; + struct statfs fs_buf; + ++ if (ISSET(FTS_NOLEAF)) ++ /* leaf optimization explicitly disabled by the FTS_NOLEAF flag */ ++ return 0; ++ + /* If we're not in CWDFD mode, don't bother with this optimization, + since the caller is not serious about performance. */ + if (!ISSET (FTS_CWDFD)) +diff --git a/gl/lib/fts_.h b/gl/lib/fts_.h +index 63d4b74..f1d519b 100644 +--- a/gl/lib/fts_.h ++++ b/gl/lib/fts_.h +@@ -155,10 +155,16 @@ typedef struct { + from input path names during fts_open initialization. */ + # define FTS_VERBATIM 0x1000 + +-# define FTS_OPTIONMASK 0x1fff /* valid user option mask */ ++ /* Disable leaf optimization (which eliminates stat() calls during traversal, ++ based on the count of nested directories stored in stat.st_nlink of each ++ directory). Note that the optimization is by default enabled only for ++ selected file systems, and only if the FTS_CWDFD flag is set. */ ++# define FTS_NOLEAF 0x2000 + +-# define FTS_NAMEONLY 0x2000 /* (private) child names only */ +-# define FTS_STOP 0x4000 /* (private) unrecoverable error */ ++# define FTS_OPTIONMASK 0x3fff /* valid user option mask */ ++ ++# define FTS_NAMEONLY 0x4000 /* (private) child names only */ ++# define FTS_STOP 0x8000 /* (private) unrecoverable error */ + int fts_options; /* fts_open options, global flags */ + + /* Map a directory's device number to a boolean. The boolean is +-- +2.5.0 + + +From c186934e6e37ddadf7511abb9b1045192757618e Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Fri, 25 Sep 2015 19:13:15 +0200 +Subject: [PATCH 2/2] ftsfind: propagate the -noleaf option to FTS + +* find/ftsfind.c (find): Propagate the -noleaf option to FTS. +--- + find/ftsfind.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/find/ftsfind.c b/find/ftsfind.c +index 5159470..e34b672 100644 +--- a/find/ftsfind.c ++++ b/find/ftsfind.c +@@ -559,6 +559,9 @@ find (char *arg) + if (options.stay_on_filesystem) + ftsoptions |= FTS_XDEV; + ++ if (options.no_leaf_check) ++ ftsoptions |= FTS_NOLEAF; ++ + p = fts_open (arglist, ftsoptions, NULL); + if (NULL == p) + { +-- +2.5.0 + diff --git a/findutils.spec b/findutils.spec index 260bdb3..7e38d95 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 15%{?dist} +Release: 16%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -27,15 +27,18 @@ Patch5: findutils-4.6.0-man-exec.patch # make sure that find -exec + passes all arguments (upstream bug #48030) Patch6: findutils-4.6.0-exec-args.patch -# implement the -noleaf option of find (#1252549) -Patch8: findutils-4.5.15-leaf-opt.patch - # avoid SIGSEGV in case the internal -noop option is used (#1346471) Patch9: findutils-4.6.0-internal-noop.patch # test-lock: disable the rwlock test Patch10: findutils-4.6.0-test-lock.patch +# import gnulib's FTS module from upstream commit 281b825e (#1544429) +Patch11: findutils-4.6.0-fts-update.patch + +# implement the -noleaf option of find (#1252549) +Patch12: findutils-4.6.0-leaf-opt.patch + Requires(post): /sbin/install-info Requires(preun): /sbin/install-info Conflicts: filesystem < 3 @@ -136,6 +139,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Mon Feb 12 2018 Kamil Dudka - 1:4.6.0-16 +- import gnulib's FTS module from upstream commit 281b825e (#1544429) + * Wed Feb 07 2018 Fedora Release Engineering - 1:4.6.0-15 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild From 74060ab73fa1e1167ba9a9dfacdde7c2c4eb0299 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Mon, 19 Feb 2018 16:35:02 +0100 Subject: [PATCH 11/59] add explicit BR for the gcc compiler ... as instructed at: https://fedoraproject.org/wiki/Packaging:C_and_C%2B%2B --- findutils.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 7e38d95..6e7972b 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 16%{?dist} +Release: 17%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -48,6 +48,7 @@ Provides: bundled(gnulib) BuildRequires: automake BuildRequires: dejagnu BuildRequires: gettext-devel +BuildRequires: gcc BuildRequires: git BuildRequires: libselinux-devel BuildRequires: texinfo @@ -139,6 +140,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Mon Feb 19 2018 Kamil Dudka - 1:4.6.0-17 +- add explicit BR for the gcc compiler + * Mon Feb 12 2018 Kamil Dudka - 1:4.6.0-16 - import gnulib's FTS module from upstream commit 281b825e (#1544429) From 048e4fadab5dcf0d2b709f27563f2b6179c22ea7 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Tue, 6 Mar 2018 12:10:54 +0100 Subject: [PATCH 12/59] fix build failure with glibc-2.28 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported at: https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html freadahead.c: In function ‘freadahead’: freadahead.c:97:3: error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib." #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib." ^~~~~ --- findutils-4.6.0-gnulib-fflush.patch | 142 ++++++++++++++++++++++++++++ findutils.spec | 9 +- 2 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 findutils-4.6.0-gnulib-fflush.patch diff --git a/findutils-4.6.0-gnulib-fflush.patch b/findutils-4.6.0-gnulib-fflush.patch new file mode 100644 index 0000000..47ac93b --- /dev/null +++ b/findutils-4.6.0-gnulib-fflush.patch @@ -0,0 +1,142 @@ +From 80cdfba079627e15129a926a133825b961d41e36 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Mon, 5 Mar 2018 10:56:29 -0800 +Subject: [PATCH] fflush: adjust to glibc 2.28 libio.h removal +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Problem reported by Daniel P. Berrangé in: +https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html +* lib/fflush.c (clear_ungetc_buffer_preserving_position) +(disable_seek_optimization, rpl_fflush): +* lib/fpurge.c (fpurge): +* lib/freadahead.c (freadahead): +* lib/freading.c (freading): +* lib/fseeko.c (fseeko): +* lib/stdio-impl.h (_IO_IN_BACKUP) [_IO_EOF_SEEN]: +Define if not already defined. + +Upstream-commit: 4af4a4a71827c0bc5e0ec67af23edef4f15cee8e +Signed-off-by: Kamil Dudka +--- + gl/lib/fflush.c | 6 +++--- + gl/lib/fpurge.c | 2 +- + gl/lib/freadahead.c | 2 +- + gl/lib/freading.c | 2 +- + gl/lib/fseeko.c | 4 ++-- + gl/lib/stdio-impl.h | 6 ++++++ + 6 files changed, 14 insertions(+), 8 deletions(-) + +diff --git a/gl/lib/fflush.c b/gl/lib/fflush.c +index 5ae3e41..7a82470 100644 +--- a/gl/lib/fflush.c ++++ b/gl/lib/fflush.c +@@ -33,7 +33,7 @@ + #undef fflush + + +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + + /* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */ + static void +@@ -72,7 +72,7 @@ clear_ungetc_buffer (FILE *fp) + + #endif + +-#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) ++#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) + + # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ +@@ -148,7 +148,7 @@ rpl_fflush (FILE *stream) + if (stream == NULL || ! freading (stream)) + return fflush (stream); + +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + + clear_ungetc_buffer_preserving_position (stream); + +diff --git a/gl/lib/fpurge.c b/gl/lib/fpurge.c +index f313b22..ecdf82d 100644 +--- a/gl/lib/fpurge.c ++++ b/gl/lib/fpurge.c +@@ -62,7 +62,7 @@ fpurge (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_IO_read_end = fp->_IO_read_ptr; + fp->_IO_write_ptr = fp->_IO_write_base; + /* Avoid memory leak when there is an active ungetc buffer. */ +diff --git a/gl/lib/freadahead.c b/gl/lib/freadahead.c +index 094daab..3f8101e 100644 +--- a/gl/lib/freadahead.c ++++ b/gl/lib/freadahead.c +@@ -25,7 +25,7 @@ + size_t + freadahead (FILE *fp) + { +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + if (fp->_IO_write_ptr > fp->_IO_write_base) + return 0; + return (fp->_IO_read_end - fp->_IO_read_ptr) +diff --git a/gl/lib/freading.c b/gl/lib/freading.c +index 0512b19..8c48fe4 100644 +--- a/gl/lib/freading.c ++++ b/gl/lib/freading.c +@@ -31,7 +31,7 @@ freading (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + return ((fp->_flags & _IO_NO_WRITES) != 0 + || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0 + && fp->_IO_read_base != NULL)); +diff --git a/gl/lib/fseeko.c b/gl/lib/fseeko.c +index 1c65d2a..9026408 100644 +--- a/gl/lib/fseeko.c ++++ b/gl/lib/fseeko.c +@@ -47,7 +47,7 @@ fseeko (FILE *fp, off_t offset, int whence) + #endif + + /* These tests are based on fpurge.c. */ +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + if (fp->_IO_read_end == fp->_IO_read_ptr + && fp->_IO_write_ptr == fp->_IO_write_base + && fp->_IO_save_base == NULL) +@@ -123,7 +123,7 @@ fseeko (FILE *fp, off_t offset, int whence) + return -1; + } + +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags &= ~_IO_EOF_SEEN; + fp->_offset = pos; + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ +diff --git a/gl/lib/stdio-impl.h b/gl/lib/stdio-impl.h +index 502d891..ea38ee2 100644 +--- a/gl/lib/stdio-impl.h ++++ b/gl/lib/stdio-impl.h +@@ -18,6 +18,12 @@ + the same implementation of stdio extension API, except that some fields + have different naming conventions, or their access requires some casts. */ + ++/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this ++ problem by defining it ourselves. FIXME: Do not rely on glibc ++ internals. */ ++#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN ++# define _IO_IN_BACKUP 0x100 ++#endif + + /* BSD stdio derived implementations. */ + +-- +2.16.2 + diff --git a/findutils.spec b/findutils.spec index 6e7972b..d58d263 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 17%{?dist} +Release: 18%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -14,6 +14,10 @@ Patch0: findutils-4.6.0-mbrtowc-tests.patch # do not build locate Patch1: findutils-4.5.15-no-locate.patch +# fix build failure with glibc-2.28 +# https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html +Patch2: findutils-4.6.0-gnulib-fflush.patch + # add a new option -xautofs to find to not descend into directories on autofs # file systems Patch3: findutils-4.4.2-xautofs.patch @@ -140,6 +144,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Tue Mar 06 2018 Kamil Dudka - 1:4.6.0-18 +- fix build failure with glibc-2.28 + * Mon Feb 19 2018 Kamil Dudka - 1:4.6.0-17 - add explicit BR for the gcc compiler From 99e4b132c271774580bfded4ab21ccc48fb2f012 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Tue, 6 Mar 2018 12:32:06 +0100 Subject: [PATCH 13/59] fix build failure with glibc-2.25+ ../../../gl/lib/mountlist.c: In function 'read_file_system_list': ../../../gl/lib/mountlist.c:532:26: warning: implicit declaration of function 'makedev' [-Wimplicit-function-declaration] me->me_dev = makedev (devmaj, devmin); ^~~~~~~ [...] gcc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -mcet -fcf-protection -D__SUPPORT_SNAN__ -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o find ftsfind.o ./libfindtools.a ../lib/libfind.a ../gl/lib/libgnulib.a -lselinux -lm -lm ../gl/lib/libgnulib.a(mountlist.o): In function `read_file_system_list': /home/kdudka/fedora/findutils/findutils-4.6.0/build/gl/lib/../../../gl/lib/mountlist.c:532: undefined reference to `makedev' collect2: error: ld returned 1 exit status --- findutils-4.6.0-gnulib-makedev.patch | 80 ++++++++++++++++++++++++++++ findutils.spec | 3 ++ 2 files changed, 83 insertions(+) create mode 100644 findutils-4.6.0-gnulib-makedev.patch diff --git a/findutils-4.6.0-gnulib-makedev.patch b/findutils-4.6.0-gnulib-makedev.patch new file mode 100644 index 0000000..5ed4b48 --- /dev/null +++ b/findutils-4.6.0-gnulib-makedev.patch @@ -0,0 +1,80 @@ +From 80628047a6cc83f82e0c410a82b8f7facd9d50f2 Mon Sep 17 00:00:00 2001 +From: Eric Blake +Date: Wed, 14 Sep 2016 19:21:42 -0500 +Subject: [PATCH] mountlist: include sysmacros.h for glibc + +On Fedora rawhide (glibc 2.25), './gnulib-tool --test mountlist' +reports: +../../gllib/mountlist.c: In function 'read_file_system_list': +../../gllib/mountlist.c:534:13: warning: '__makedev_from_sys_types' is deprecated: + In the GNU C Library, `makedev' is defined by . + For historical compatibility, it is currently defined by + as well, but we plan to remove this soon. + To use `makedev', include directly. + If you did not intend to use a system-defined macro `makedev', + you should #undef it after including . + [-Wdeprecated-declarations] + me->me_dev = makedev (devmaj, devmin); + ^~ +In file included from /usr/include/features.h:397:0, + from /usr/include/sys/types.h:25, + from ./sys/types.h:28, + from ../../gllib/mountlist.h:23, + from ../../gllib/mountlist.c:20: +/usr/include/sys/sysmacros.h:89:1: note: declared here + __SYSMACROS_DEFINE_MAKEDEV (__SYSMACROS_FST_IMPL_TEMPL) + ^ + +Fix it by including the right headers. We also need a fix to +autoconf's AC_HEADER_MAJOR, but that's a separate patch. + +* m4/mountlist.m4 (gl_PREREQ_MOUTLIST_EXTRA): Include +AC_HEADER_MAJOR. +* lib/mountlist.c (includes): Use correct headers. + +Signed-off-by: Eric Blake + +Upstream-commit: 4da63c5881f60f71999a943612da9112232b9161 +Signed-off-by: Kamil Dudka +--- + gl/lib/mountlist.c | 6 ++++++ + gl/m4/mountlist.m4 | 3 ++- + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/gl/lib/mountlist.c b/gl/lib/mountlist.c +index c3d2852..0b6f92e 100644 +--- a/gl/lib/mountlist.c ++++ b/gl/lib/mountlist.c +@@ -37,6 +37,12 @@ + # include + #endif + ++#if MAJOR_IN_MKDEV ++# include ++#elif MAJOR_IN_SYSMACROS ++# include ++#endif ++ + #if defined MOUNTED_GETFSSTAT /* OSF_1 and Darwin1.3.x */ + # if HAVE_SYS_UCRED_H + # include /* needed on OSF V4.0 for definition of NGROUPS, +diff --git a/gl/m4/mountlist.m4 b/gl/m4/mountlist.m4 +index ec58dc8..82b2dcb 100644 +--- a/gl/m4/mountlist.m4 ++++ b/gl/m4/mountlist.m4 +@@ -1,4 +1,4 @@ +-# serial 11 ++# serial 12 + dnl Copyright (C) 2002-2006, 2009-2015 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, +@@ -15,5 +15,6 @@ AC_DEFUN([gl_PREREQ_MOUNTLIST_EXTRA], + [ + dnl Note gl_LIST_MOUNTED_FILE_SYSTEMS checks for mntent.h, not sys/mntent.h. + AC_CHECK_HEADERS([sys/mntent.h]) ++ AC_HEADER_MAJOR()dnl for use of makedev () + gl_FSTYPENAME + ]) +-- +2.16.2 + diff --git a/findutils.spec b/findutils.spec index d58d263..a2ec894 100644 --- a/findutils.spec +++ b/findutils.spec @@ -31,6 +31,9 @@ Patch5: findutils-4.6.0-man-exec.patch # make sure that find -exec + passes all arguments (upstream bug #48030) Patch6: findutils-4.6.0-exec-args.patch +# fix build failure with glibc-2.25+ +Patch7: findutils-4.6.0-gnulib-makedev.patch + # avoid SIGSEGV in case the internal -noop option is used (#1346471) Patch9: findutils-4.6.0-internal-noop.patch From f41447a0f47a4126c8f0c4e28d21e18bf819174c Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 20 Apr 2018 16:52:25 +0200 Subject: [PATCH 14/59] Resolves: #1558249 - fix crash caused by mistakenly enabled leaf optimization --- findutils-4.6.0-fts-update.patch | 241 ++++++++++++++++++++++++++++++- findutils.spec | 5 +- 2 files changed, 239 insertions(+), 7 deletions(-) diff --git a/findutils-4.6.0-fts-update.patch b/findutils-4.6.0-fts-update.patch index ad6289b..6025514 100644 --- a/findutils-4.6.0-fts-update.patch +++ b/findutils-4.6.0-fts-update.patch @@ -1,7 +1,7 @@ From f3337786e55909538aacfd7c29b1cf58ff444fbf Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Mon, 12 Feb 2018 12:45:36 +0100 -Subject: [PATCH 1/2] import gnulib's FTS module from upstream commit 281b825e +Subject: [PATCH 1/4] import gnulib's FTS module from upstream commit 281b825e --- gl/lib/fts.c | 424 +++++++++++++++++++++++++++++----------------------------- @@ -474,10 +474,11 @@ index c91d7a1..bfa73e3 100644 size_t len, maxlen, new_len; char *cp; int dir_fd; -@@ -1370,24 +1394,6 @@ fts_build (register FTS *sp, int type) +@@ -1369,24 +1393,6 @@ fts_build (register FTS *sp, int type) + sorting, yet not so large that we risk exhausting memory. */ max_entries = sp->fts_compar ? SIZE_MAX : FTS_MAX_READDIR_ENTRIES; - /* +- /* - * Nlinks is the number of possible entries of type directory in the - * directory if we're cheating on stat calls, 0 if we're not doing - * any stat calls at all, (nlink_t) -1 if we're statting everything. @@ -495,10 +496,9 @@ index c91d7a1..bfa73e3 100644 - nostat = false; - } - -- /* + /* * If we're going to need to stat anything or we want to descend * and stay in the directory, chdir. If this fails we keep going, - * but set a flag so we don't chdir after the post-order visit. @@ -1408,15 +1414,22 @@ fts_build (register FTS *sp, int type) the required dirp and dir_fd. */ descend = true; @@ -718,7 +718,7 @@ index b9a3f12..70cc9e3 100644 From ea88dd373c60feab541fe037369805f326dc3494 Mon Sep 17 00:00:00 2001 From: rpm-build Date: Mon, 12 Feb 2018 18:58:30 +0100 -Subject: [PATCH 2/2] fts: remove dependency on gnulib's fleximember.h +Subject: [PATCH 2/4] fts: remove dependency on gnulib's fleximember.h ... by reverting upstream commit edb9d82948cb23f67a19e1b435047a0570225df3 --- @@ -759,3 +759,232 @@ index bfa73e3..c37ebe2 100644 -- 2.13.6 + +From 9c1720c99bbf8998dfdaa5976bca8bdc6d93f8e7 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Thu, 5 Apr 2018 08:48:01 -0700 +Subject: [PATCH 3/4] fts: treat CIFS like NFS + +Problem reported by Kamil Dudka in: +https://lists.gnu.org/r/bug-gnulib/2018-04/msg00015.html +* lib/fts.c (S_MAGIC_CIFS): New macro. +(dirent_inode_sort_may_be_useful, leaf_optimization): +Treat CIFS like NFS. + +Upstream-commit: 2e53df541a30d438859087ed4b5a396e04697b9b +Signed-off-by: Kamil Dudka +--- + gl/lib/fts.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index c37ebe2..508ceac 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -684,6 +684,7 @@ enum leaf_optimization + + /* Linux-specific constants from coreutils' src/fs.h */ + # define S_MAGIC_AFS 0x5346414F ++# define S_MAGIC_CIFS 0xFF534D42 + # define S_MAGIC_NFS 0x6969 + # define S_MAGIC_PROC 0x9FA0 + # define S_MAGIC_REISERFS 0x52654973 +@@ -791,8 +792,9 @@ dirent_inode_sort_may_be_useful (FTSENT const *p) + + switch (filesystem_type (p)) + { +- case S_MAGIC_TMPFS: ++ case S_MAGIC_CIFS: + case S_MAGIC_NFS: ++ case S_MAGIC_TMPFS: + /* On a file system of any of these types, sorting + is unnecessary, and hence wasteful. */ + return false; +@@ -826,6 +828,10 @@ leaf_optimization (FTSENT const *p) + /* Although AFS mount points are not counted in st_nlink, they + act like directories. See . */ + FALLTHROUGH; ++ case S_MAGIC_CIFS: ++ /* Leaf optimization causes 'find' to abort. See ++ . */ ++ FALLTHROUGH; + case S_MAGIC_NFS: + /* NFS provides usable dirent.d_type but not necessarily for all entries + of large directories, so as per +-- +2.14.3 + + +From ff64329a046e76ba553c15373ed61bbed814d286 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Wed, 11 Apr 2018 12:50:35 -0700 +Subject: [PATCH 4/4] fts: fix bug in find across filesystems + +This fixes a bug I introduced last summer. +Problem reported by Kamil Dudka in: +https://lists.gnu.org/r/bug-gnulib/2018-04/msg00033.html +* lib/fts.c (filesystem_type, dirent_inode_sort_may_be_useful) +(leaf_optimization): +New arg for file descriptor. All callers changed. +(fts_build): Check for whether inodes should be sorted +before closing the directory. + +Upstream-commit: 81b8c0d3be98f5a77403599de3d06329b3e7673e +Signed-off-by: Kamil Dudka +--- + gl/lib/fts.c | 55 +++++++++++++++++++++++++++++++------------------------ + 1 file changed, 31 insertions(+), 24 deletions(-) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index 508ceac..175f12a 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -725,11 +725,12 @@ dev_type_compare (void const *x, void const *y) + return ax->st_dev == ay->st_dev; + } + +-/* Return the file system type of P, or 0 if not known. ++/* Return the file system type of P with file descriptor FD, or 0 if not known. ++ If FD is negative, P's file descriptor is unavailable. + Try to cache known values. */ + + static fsword +-filesystem_type (FTSENT const *p) ++filesystem_type (FTSENT const *p, int fd) + { + FTS *sp = p->fts_fts; + Hash_table *h = sp->fts_leaf_optimization_works_ht; +@@ -755,7 +756,7 @@ filesystem_type (FTSENT const *p) + } + + /* Look-up failed. Query directly and cache the result. */ +- if (fstatfs (p->fts_fts->fts_cwd_fd, &fs_buf) != 0) ++ if (fd < 0 || fstatfs (fd, &fs_buf) != 0) + return 0; + + if (h) +@@ -777,12 +778,12 @@ filesystem_type (FTSENT const *p) + return fs_buf.f_type; + } + +-/* Return false if it is easy to determine the file system type of the +- directory P, and sorting dirents on inode numbers is known not to +- improve traversal performance with that type of file system. +- Otherwise, return true. */ ++/* Return true if sorting dirents on inode numbers is known to improve ++ traversal performance for the directory P with descriptor DIR_FD. ++ Return false otherwise. When in doubt, return true. ++ DIR_FD is negative if unavailable. */ + static bool +-dirent_inode_sort_may_be_useful (FTSENT const *p) ++dirent_inode_sort_may_be_useful (FTSENT const *p, int dir_fd) + { + /* Skip the sort only if we can determine efficiently + that skipping it is the right thing to do. +@@ -790,7 +791,7 @@ dirent_inode_sort_may_be_useful (FTSENT const *p) + while the cost of *not* performing it can be O(N^2) with + a very large constant. */ + +- switch (filesystem_type (p)) ++ switch (filesystem_type (p, dir_fd)) + { + case S_MAGIC_CIFS: + case S_MAGIC_NFS: +@@ -804,16 +805,17 @@ dirent_inode_sort_may_be_useful (FTSENT const *p) + } + } + +-/* Given an FTS entry P for a directory D, ++/* Given an FTS entry P for a directory with descriptor DIR_FD, + return true if it is both useful and valid to apply leaf optimization. + The optimization is useful only for file systems that lack usable + dirent.d_type info. The optimization is valid if an st_nlink value + of at least MIN_DIR_NLINK is an upper bound on the number of +- subdirectories of D, counting "." and ".." as subdirectories. */ ++ subdirectories of D, counting "." and ".." as subdirectories. ++ DIR_FD is negative if unavailable. */ + static enum leaf_optimization +-leaf_optimization (FTSENT const *p) ++leaf_optimization (FTSENT const *p, int dir_fd) + { +- switch (filesystem_type (p)) ++ switch (filesystem_type (p, dir_fd)) + { + /* List here the file system types that may lack usable dirent.d_type + info, yet for which the optimization does apply. */ +@@ -850,12 +852,13 @@ leaf_optimization (FTSENT const *p) + + #else + static bool +-dirent_inode_sort_may_be_useful (FTSENT const *p _GL_UNUSED) ++dirent_inode_sort_may_be_useful (FTSENT const *p _GL_UNUSED, ++ int dir_fd _GL_UNUSED) + { + return true; + } + static enum leaf_optimization +-leaf_optimization (FTSENT const *p _GL_UNUSED) ++leaf_optimization (FTSENT const *p _GL_UNUSED, int dir_fd _GL_UNUSED) + { + return NO_LEAF_OPTIMIZATION; + } +@@ -1049,7 +1052,7 @@ check_for_dir: + if (parent->fts_n_dirs_remaining == 0 + && ISSET(FTS_NOSTAT) + && ISSET(FTS_PHYSICAL) +- && (leaf_optimization (parent) ++ && (leaf_optimization (parent, sp->fts_cwd_fd) + == NOSTAT_LEAF_OPTIMIZATION)) + { + /* nothing more needed */ +@@ -1334,6 +1337,7 @@ fts_build (register FTS *sp, int type) + int dir_fd; + FTSENT *cur = sp->fts_cur; + bool continue_readdir = !!cur->fts_dirp; ++ bool sort_by_inode = false; + size_t max_entries; + + /* When cur->fts_dirp is non-NULL, that means we should +@@ -1427,7 +1431,7 @@ fts_build (register FTS *sp, int type) + && ! (ISSET (FTS_NOSTAT) && ISSET (FTS_PHYSICAL) + && ! ISSET (FTS_SEEDOT) + && cur->fts_statp->st_nlink == MIN_DIR_NLINK +- && (leaf_optimization (cur) ++ && (leaf_optimization (cur, dir_fd) + != NO_LEAF_OPTIMIZATION))); + if (descend || type == BREAD) + { +@@ -1588,6 +1592,15 @@ mem1: saved_errno = errno; + tail->fts_link = p; + tail = p; + } ++ ++ /* If there are many entries, no sorting function has been ++ specified, and this file system is of a type that may be ++ slow with a large number of entries, arrange to sort the ++ directory entries on increasing inode numbers. */ ++ if (nitems == _FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD ++ && !sp->fts_compar) ++ sort_by_inode = dirent_inode_sort_may_be_useful (cur, dir_fd); ++ + ++nitems; + if (max_entries <= nitems) { + /* When there are too many dir entries, leave +@@ -1645,13 +1658,7 @@ mem1: saved_errno = errno; + return (NULL); + } + +- /* If there are many entries, no sorting function has been specified, +- and this file system is of a type that may be slow with a large +- number of entries, then sort the directory entries on increasing +- inode numbers. */ +- if (nitems > _FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD +- && !sp->fts_compar +- && dirent_inode_sort_may_be_useful (cur)) { ++ if (sort_by_inode) { + sp->fts_compar = fts_compare_ino; + head = fts_sort (sp, head, nitems); + sp->fts_compar = NULL; +-- +2.14.3 + diff --git a/findutils.spec b/findutils.spec index a2ec894..c0b52fe 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 18%{?dist} +Release: 19%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -147,6 +147,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Fri Apr 20 2018 Kamil Dudka - 1:4.6.0-19 +- fix crash caused by mistakenly enabled leaf optimization (#1558249) + * Tue Mar 06 2018 Kamil Dudka - 1:4.6.0-18 - fix build failure with glibc-2.28 From 97ba2d7a18d1f9ae761b6ff0b4f1c4d33d7a8efc Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 13 Jul 2018 00:34:32 +0000 Subject: [PATCH 15/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index c0b52fe..6ff97ee 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 19%{?dist} +Release: 20%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -147,6 +147,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Fri Jul 13 2018 Fedora Release Engineering - 1:4.6.0-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + * Fri Apr 20 2018 Kamil Dudka - 1:4.6.0-19 - fix crash caused by mistakenly enabled leaf optimization (#1558249) From a6f38a9e3d68e089c61ffea3c3e8001e9b4facfe Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Mon, 5 Nov 2018 15:07:21 +0100 Subject: [PATCH 16/59] fix programming mistakes detected by static analysis --- findutils-4.6.0-covscan.patch | 116 ++++++++++++++++++++++++++++++++++ findutils.spec | 8 ++- 2 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 findutils-4.6.0-covscan.patch diff --git a/findutils-4.6.0-covscan.patch b/findutils-4.6.0-covscan.patch new file mode 100644 index 0000000..1b07276 --- /dev/null +++ b/findutils-4.6.0-covscan.patch @@ -0,0 +1,116 @@ +From 6b041f2bd5d84003d3945fc9ae18329f024b8d2a Mon Sep 17 00:00:00 2001 +From: Bernhard Voelker +Date: Thu, 2 Feb 2017 00:17:20 +0100 +Subject: [PATCH 1/2] maint: avoid warnings from GCC 6.2.1 + +buildcmd.c: In function 'bc_push_arg': +buildcmd.c:362:11: error: this 'if' clause does not guard... [-Werror=misleading-indentation] + if (ctl->replace_pat + ^~ +buildcmd.c:366:13: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if' + bc_do_exec (ctl, state); + ^~~~~~~~~~ +pred.c: In function 'print_optlist': +pred.c:1328:46: error: format '%ld' expects argument of type 'long int', but argument 3 has type 'long unsigned int' [-Werror=format=] + fprintf (fp, "[real success rate %ld/%ld", p->perf.successes, p->perf.visits); + ^ +pred.c:1328:50: error: format '%ld' expects argument of type 'long int', but argument 4 has type 'long unsigned int' [-Werror=format=] + fprintf (fp, "[real success rate %ld/%ld", p->perf.successes, p->perf.visits); + ^ +print.c: In function 'scan_for_digit_differences': +print.c:449:46: error: logical 'or' of equal expressions [-Werror=logical-op] + if (!isdigit ((unsigned char)q[i]) || !isdigit ((unsigned char)q[i])) + ^~ +cc1: all warnings being treated as errors + +* find/pred.c (print_optlist): Use %lu for unsigned long int. +* find/print.c (scan_for_digit_differences): Check p[i] too rather than +q[i] two times. +* lib/buildcmd.c (bc_push_arg): Fix indentation. +Use %lu format for unsigned long int. + +Upstream-commit: 4bbc9e7a4a46d83ac5316cc5a57ad7ec5e12f74c +Signed-off-by: Kamil Dudka +--- + find/pred.c | 2 +- + find/print.c | 2 +- + lib/buildcmd.c | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/find/pred.c b/find/pred.c +index 32938fb..5c8086e 100644 +--- a/find/pred.c ++++ b/find/pred.c +@@ -1278,7 +1278,7 @@ print_optlist (FILE *fp, const struct predicate *p) + fprintf (fp, " [%g] ", p->est_success_rate); + if (options.debug_options & DebugSuccessRates) + { +- fprintf (fp, "[%ld/%ld", p->perf.successes, p->perf.visits); ++ fprintf (fp, "[%lu/%lu", p->perf.successes, p->perf.visits); + if (p->perf.visits) + { + double real_rate = (double)p->perf.successes / (double)p->perf.visits; +diff --git a/find/print.c b/find/print.c +index e4c28ad..17b9320 100644 +--- a/find/print.c ++++ b/find/print.c +@@ -451,7 +451,7 @@ scan_for_digit_differences (const char *p, const char *q, + { + if (p[i] != q[i]) + { +- if (!isdigit ((unsigned char)q[i]) || !isdigit ((unsigned char)q[i])) ++ if (!isdigit ((unsigned char)p[i]) || !isdigit ((unsigned char)q[i])) + return false; + + if (!seen) +diff --git a/lib/buildcmd.c b/lib/buildcmd.c +index a58f67e..016ab1d 100644 +--- a/lib/buildcmd.c ++++ b/lib/buildcmd.c +@@ -374,7 +374,7 @@ bc_push_arg (struct buildcmd_control *ctl, + || (ctl->exit_if_size_exceeded && + (ctl->lines_per_exec || ctl->args_per_exec))) + error (EXIT_FAILURE, 0, _("argument list too long")); +- bc_do_exec (ctl, state); ++ bc_do_exec (ctl, state); + } + if (bc_argc_limit_reached (initial_args, ctl, state)) + bc_do_exec (ctl, state); +-- +2.17.2 + + +From 55691f606c8aefa29a4b2f3061797e7f2b85981c Mon Sep 17 00:00:00 2001 +From: Bernhard Voelker +Date: Sun, 4 Feb 2018 18:20:25 +0100 +Subject: [PATCH 2/2] maint: add missing va_end + +'va_start' must have a corresponding 'va_end'. Depending on the +implementation, the consequence of a missing 'va_end' may be a +corrupted stack. + +* find/print.c (checked_fprintf): Add va_end. + +Spotted by coverity analysis. + +Upstream-commit: 76d7e2dcb45a3a558033209982772d21f68a6ea4 +Signed-off-by: Kamil Dudka +--- + find/print.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/find/print.c b/find/print.c +index 17b9320..ab1afc1 100644 +--- a/find/print.c ++++ b/find/print.c +@@ -810,6 +810,7 @@ checked_fprintf (struct format_val *dest, const char *fmt, ...) + + va_start (ap, fmt); + rv = vfprintf (dest->stream, fmt, ap); ++ va_end (ap); + if (rv < 0) + nonfatal_nontarget_file_error (errno, dest->filename); + } +-- +2.17.2 + diff --git a/findutils.spec b/findutils.spec index 6ff97ee..cc3e2a1 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 20%{?dist} +Release: 21%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -46,6 +46,9 @@ Patch11: findutils-4.6.0-fts-update.patch # implement the -noleaf option of find (#1252549) Patch12: findutils-4.6.0-leaf-opt.patch +# fix programming mistakes detected by static analysis +Patch13: findutils-4.6.0-covscan.patch + Requires(post): /sbin/install-info Requires(preun): /sbin/install-info Conflicts: filesystem < 3 @@ -147,6 +150,9 @@ fi %{_infodir}/find-maint.info.gz %changelog +* Mon Nov 05 2018 Kamil Dudka - 1:4.6.0-21 +- fix programming mistakes detected by static analysis + * Fri Jul 13 2018 Fedora Release Engineering - 1:4.6.0-20 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild From 1b7cb86fdf40d2bc1546fdc2bb0c7e44acba3993 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Sun, 27 Jan 2019 15:30:28 +0100 Subject: [PATCH 17/59] Remove obsolete scriptlets References: https://fedoraproject.org/wiki/Changes/RemoveObsoleteScriptlets Signed-off-by: Igor Gnatenko --- findutils.spec | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/findutils.spec b/findutils.spec index cc3e2a1..6055017 100644 --- a/findutils.spec +++ b/findutils.spec @@ -49,8 +49,6 @@ Patch12: findutils-4.6.0-leaf-opt.patch # fix programming mistakes detected by static analysis Patch13: findutils-4.6.0-covscan.patch -Requires(post): /sbin/install-info -Requires(preun): /sbin/install-info Conflicts: filesystem < 3 Provides: /bin/find Provides: bundled(gnulib) @@ -126,18 +124,6 @@ rm -f %{buildroot}%{_infodir}/dir %find_lang %{name} -%post -if [ -f %{_infodir}/find.info.gz ]; then - /sbin/install-info %{_infodir}/find.info.gz %{_infodir}/dir || : -fi - -%preun -if [ $1 = 0 ]; then - if [ -f %{_infodir}/find.info.gz ]; then - /sbin/install-info --delete %{_infodir}/find.info.gz %{_infodir}/dir || : - fi -fi - %files -f %{name}.lang %{!?_licensedir:%global license %%doc} %license COPYING From b3b4a0b27b8da279dc33aff42538c0325048bcc8 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Mon, 28 Jan 2019 20:17:44 +0100 Subject: [PATCH 18/59] Remove obsolete Group tag References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag --- findutils.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 6055017..ea3c5a6 100644 --- a/findutils.spec +++ b/findutils.spec @@ -4,7 +4,6 @@ Version: 4.6.0 Release: 21%{?dist} Epoch: 1 License: GPLv3+ -Group: Applications/File URL: http://www.gnu.org/software/findutils/ Source0: ftp://ftp.gnu.org/pub/gnu/findutils/%{name}-%{version}.tar.gz From 288dd79a90488193f89b50f08ec51c7f1061b8f9 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 31 Jan 2019 19:43:22 +0000 Subject: [PATCH 19/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index ea3c5a6..8e09f63 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 21%{?dist} +Release: 22%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ @@ -135,6 +135,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.gz %changelog +* Thu Jan 31 2019 Fedora Release Engineering - 1:4.6.0-22 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + * Mon Nov 05 2018 Kamil Dudka - 1:4.6.0-21 - fix programming mistakes detected by static analysis From b1143c39d1d9ff530a1e00f17ae6a613facba4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= Date: Wed, 24 Apr 2019 14:56:31 +0200 Subject: [PATCH 20/59] Remove hardcoded gzip suffix from GNU info pages --- findutils.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/findutils.spec b/findutils.spec index 8e09f63..92ae686 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 22%{?dist} +Release: 23%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ @@ -132,9 +132,12 @@ rm -f %{buildroot}%{_infodir}/dir %{_mandir}/man1/find.1* %{_mandir}/man1/xargs.1* %{_infodir}/find.info* -%{_infodir}/find-maint.info.gz +%{_infodir}/find-maint.info.* %changelog +* Wed Apr 24 2019 Björn Esser - 1:4.6.0-23 +- Remove hardcoded gzip suffix from GNU info pages + * Thu Jan 31 2019 Fedora Release Engineering - 1:4.6.0-22 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild From 41d9918095625acd2bd3fec18995e59f0531ad32 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 25 Jul 2019 00:34:57 +0000 Subject: [PATCH 21/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 92ae686..8c8599b 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.6.0 -Release: 23%{?dist} +Release: 24%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ @@ -135,6 +135,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Thu Jul 25 2019 Fedora Release Engineering - 1:4.6.0-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Wed Apr 24 2019 Björn Esser - 1:4.6.0-23 - Remove hardcoded gzip suffix from GNU info pages From 497096c6ae02e71227c6caf3bf61753016b18205 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 30 Aug 2019 09:50:49 +0200 Subject: [PATCH 22/59] new upstream release: findutils-4.7.0 --- .gitignore | 2 +- findutils-4.4.2-xautofs.patch | 50 +- findutils-4.5.13-warnings.patch | 31 +- findutils-4.5.15-no-locate.patch | 102 ++- findutils-4.6.0-covscan.patch | 116 ---- findutils-4.6.0-exec-args.patch | 226 ------ findutils-4.6.0-fts-update.patch | 990 --------------------------- findutils-4.6.0-gnulib-fflush.patch | 142 ---- findutils-4.6.0-gnulib-makedev.patch | 80 --- findutils-4.6.0-internal-noop.patch | 195 ------ findutils-4.6.0-leaf-opt.patch | 47 +- findutils-4.6.0-man-exec.patch | 44 -- findutils-4.6.0-mbrtowc-tests.patch | 35 - findutils-4.6.0-test-lock.patch | 8 +- findutils-4.6.0.tar.gz.sig | Bin 152 -> 0 bytes findutils-4.7.0.tar.xz.sig | 11 + findutils.spec | 49 +- sources | 2 +- 18 files changed, 145 insertions(+), 1985 deletions(-) delete mode 100644 findutils-4.6.0-covscan.patch delete mode 100644 findutils-4.6.0-exec-args.patch delete mode 100644 findutils-4.6.0-fts-update.patch delete mode 100644 findutils-4.6.0-gnulib-fflush.patch delete mode 100644 findutils-4.6.0-gnulib-makedev.patch delete mode 100644 findutils-4.6.0-internal-noop.patch delete mode 100644 findutils-4.6.0-man-exec.patch delete mode 100644 findutils-4.6.0-mbrtowc-tests.patch delete mode 100644 findutils-4.6.0.tar.gz.sig create mode 100644 findutils-4.7.0.tar.xz.sig diff --git a/.gitignore b/.gitignore index 3c70664..43bcb9f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/findutils-4.*.*.tar.gz +/findutils-4.*.*.tar.?z diff --git a/findutils-4.4.2-xautofs.patch b/findutils-4.4.2-xautofs.patch index c1ea81e..d8ebd51 100644 --- a/findutils-4.4.2-xautofs.patch +++ b/findutils-4.4.2-xautofs.patch @@ -1,22 +1,22 @@ From 17e470dc1acca4824b70328d733d5f99c12d0d65 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Wed, 11 May 2011 16:46:45 +0200 -Subject: [PATCH 3/4] findutils-4.4.2-xautofs.patch +Subject: [PATCH] findutils-4.4.2-xautofs.patch --- doc/find.texi | 4 ++++ find/defs.h | 3 +++ find/find.1 | 3 +++ find/ftsfind.c | 6 ++++++ - find/parser.c | 11 ++++++++++- - find/util.c | 1 + + find/parser.c | 9 +++++++++ + find/util.c | 3 ++- 6 files changed, 27 insertions(+), 1 deletions(-) diff --git a/doc/find.texi b/doc/find.texi index c584298..9731b71 100644 --- a/doc/find.texi +++ b/doc/find.texi -@@ -1446,6 +1446,10 @@ them. +@@ -1474,6 +1474,10 @@ them. There are two ways to avoid searching certain filesystems. One way is to tell @code{find} to only search one filesystem: @@ -31,7 +31,7 @@ diff --git a/find/defs.h b/find/defs.h index 11d1d00..f95ce72 100644 --- a/find/defs.h +++ b/find/defs.h -@@ -557,6 +557,9 @@ struct options +@@ -574,6 +574,9 @@ struct options /* If true, don't cross filesystem boundaries. */ bool stay_on_filesystem; @@ -45,7 +45,7 @@ diff --git a/find/find.1 b/find/find.1 index e851f82..a4799ff 100644 --- a/find/find.1 +++ b/find/find.1 -@@ -520,6 +520,9 @@ to stat them; this gives a significant increase in search speed. +@@ -567,6 +567,9 @@ to stat them; this gives a significant increase in search speed. .IP "\-version, \-\-version" Print the \fBfind\fR version number and exit. @@ -59,7 +59,7 @@ diff --git a/find/ftsfind.c b/find/ftsfind.c index 9fdb8ef..bd7cc37 100644 --- a/find/ftsfind.c +++ b/find/ftsfind.c -@@ -485,6 +485,12 @@ consider_visiting (FTS *p, FTSENT *ent) +@@ -479,6 +479,12 @@ consider_visiting (FTS *p, FTSENT *ent) } } @@ -76,50 +76,50 @@ diff --git a/find/parser.c b/find/parser.c index 52a1ef6..995aec3 100644 --- a/find/parser.c +++ b/find/parser.c -@@ -146,6 +146,7 @@ static bool parse_user (const struct parser_table*, char *argv[], int * - static bool parse_version (const struct parser_table*, char *argv[], int *arg_ptr); +@@ -138,6 +138,7 @@ static bool parse_used (const struct parser_table*, char *argv[], int * + static bool parse_user (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_wholename (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_xdev (const struct parser_table*, char *argv[], int *arg_ptr); +static bool parse_xautofs (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_ignore_race (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_noignore_race (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_warn (const struct parser_table*, char *argv[], int *arg_ptr); -@@ -306,6 +307,7 @@ static struct parser_table const parse_table[] = - PARSE_TEST_NP ("wholename", wholename), /* GNU, replaced -path, but anyway -path will soon be in POSIX */ +@@ -302,6 +303,7 @@ static struct parser_table const parse_table[] = + PARSE_TEST_NP ("wholename", wholename), /* GNU, replaced -path, but now -path is standardized since POSIX 2008 */ {ARG_TEST, "writable", parse_accesscheck, pred_writable}, /* GNU, 4.3.0+ */ PARSE_OPTION ("xdev", xdev), /* POSIX */ + PARSE_OPTION ("xautofs", xautofs), PARSE_TEST ("xtype", xtype), /* GNU */ #ifdef UNIMPLEMENTED_UNIX /* It's pretty ugly for find to know about archive formats. -@@ -1239,7 +1241,7 @@ operators (decreasing precedence; -and is implicit where no others are given):\n - positional options (always true): -daystart -follow -regextype\n\n\ - normal options (always true, specified before other expressions):\n\ - -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n\ -- --version -xdev -ignore_readdir_race -noignore_readdir_race\n")); -+ --version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race\n")); - puts (_("\ - tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n\ - -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n\ -@@ -2683,6 +2685,13 @@ parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) +@@ -2603,6 +2605,13 @@ parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) + return parse_noop (entry, argv, arg_ptr); } - static bool ++static bool +parse_xautofs (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + options.bypass_autofs = true; + return parse_noop (entry, argv, arg_ptr); +} + -+static bool + static bool parse_ignore_race (const struct parser_table* entry, char **argv, int *arg_ptr) { - options.ignore_readdir_race = true; diff --git a/find/util.c b/find/util.c index 8577396..4d45f84 100644 --- a/find/util.c +++ b/find/util.c -@@ -1017,6 +1017,7 @@ set_option_defaults (struct options *p) +@@ -181,7 +181,7 @@ operators (decreasing precedence; -and is implicit where no others are given):\n + positional options (always true): -daystart -follow -regextype\n\n\ + normal options (always true, specified before other expressions):\n\ + -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n\ +- --version -xdev -ignore_readdir_race -noignore_readdir_race\n")); ++ --version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race\n")); + HTL (_("\ + tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n\ + -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n\ +@@ -1044,6 +1044,7 @@ set_option_defaults (struct options *p) p->full_days = false; p->stay_on_filesystem = false; diff --git a/findutils-4.5.13-warnings.patch b/findutils-4.5.13-warnings.patch index d04f6f8..cb7ee9b 100644 --- a/findutils-4.5.13-warnings.patch +++ b/findutils-4.5.13-warnings.patch @@ -1,7 +1,7 @@ From 690d4bd9f29a805999a3ce4651dac9585ccc9917 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Wed, 11 May 2011 16:46:57 +0200 -Subject: [PATCH 1/2] findutils-4.5.7-warnings.patch +Subject: [PATCH] findutils-4.5.7-warnings.patch --- xargs/xargs.c | 3 ++- @@ -11,7 +11,7 @@ diff --git a/xargs/xargs.c b/xargs/xargs.c index 5e373f2..c0a8676 100644 --- a/xargs/xargs.c +++ b/xargs/xargs.c -@@ -1289,7 +1289,8 @@ xargs_do_exec (struct buildcmd_control *ctl, void *usercontext, int argc, char * +@@ -1299,7 +1299,8 @@ xargs_do_exec (struct buildcmd_control *ctl, void *usercontext, int argc, char * * utility if we run it, for POSIX compliance on the * handling of exit values. */ @@ -24,30 +24,3 @@ index 5e373f2..c0a8676 100644 -- 1.7.1 - -From c5654b9ca5f50daa1ca406ebd7b4546f24d00db6 Mon Sep 17 00:00:00 2001 -From: Kamil Dudka -Date: Mon, 23 Sep 2013 15:04:03 +0200 -Subject: [PATCH 2/2] parser: silence a [-Wmaybe-uninitialized] GCC warning - -... caused by a missing model of error() ---- - find/parser.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/find/parser.c b/find/parser.c -index 89d8bcf..8c399d7 100644 ---- a/find/parser.c -+++ b/find/parser.c -@@ -2723,7 +2723,7 @@ insert_type (char **argv, int *arg_ptr, - const struct parser_table *entry, - PRED_FUNC which_pred) - { -- mode_t type_cell; -+ mode_t type_cell /* to silence GCC warning */ = 0; - struct predicate *our_pred; - float rate = 0.5; - const char *typeletter; --- -1.9.3 - diff --git a/findutils-4.5.15-no-locate.patch b/findutils-4.5.15-no-locate.patch index 7bf1f33..659c7cf 100644 --- a/findutils-4.5.15-no-locate.patch +++ b/findutils-4.5.15-no-locate.patch @@ -6,24 +6,9 @@ Subject: [PATCH 1/2] Revert "Don't include dblocation.texi from original spot, This reverts commit f59d88e456553dfe0b5185caf75e4041285fd595. --- - configure.ac | 2 +- - doc/Makefile.am | 8 +------- - doc/find.texi | 2 +- - 3 files changed, 3 insertions(+), 9 deletions(-) + doc/Makefile.am | 7 +------ + 1 file changed, 1 insertion(+), 6 deletions(-) -diff --git a/configure.ac b/configure.ac -index 7962719..ce0e768 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -70,7 +70,7 @@ AC_PROG_CPP - - dnl for gnulib - gl_EARLY --AC_PROG_LN_S -+ - AC_PROG_INSTALL - AC_CHECK_TOOLS([AR], [ar]) - AC_CHECK_TOOLS([RANLIB], [ranlib], [:]) diff --git a/doc/Makefile.am b/doc/Makefile.am index f6f7443..6fbf57b 100644 --- a/doc/Makefile.am @@ -36,32 +21,21 @@ index f6f7443..6fbf57b 100644 -nodist_find_TEXINFOS = dblocation.texi find_maint_TEXINFOS = fdl.texi MOSTLYCLEANFILES = find.cps --CLEANFILES = find.txt find_mono.html findutils.texi_html_node.tar.gz dblocation.texi -+CLEANFILES = find.txt find_mono.html findutils.texi_html_node.tar.gz - - MAKEINFOTXT = $(MAKEINFO) --plaintext - -@@ -69,7 +67,3 @@ find_mono.html: find.texi - # for "make all" or "make install" (or even "make check"). - findutils.texi_html_node.tar.gz: find.html +-CLEANFILES = find.txt find_mono.html findutils.texi_html_node.tar.gz dblocation.texi \ ++CLEANFILES = find.txt find_mono.html findutils.texi_html_node.tar.gz \ + find_mono.html findutils.texi_html_node.tar.gz \ + find-info.tar.gz find.texi find.texi.tar.gz \ + find.txt tmp-doc-install find_mono.html.gz +@@ -73,9 +71,6 @@ findutils.texi_html_node.tar.gz: find.html tar zcf $@ $< -- -- + + -dblocation.texi: ../locate/dblocation.texi - $(LN_S) ../locate/dblocation.texi $@ -diff --git a/doc/find.texi b/doc/find.texi -index a83a645..c2714dd 100644 ---- a/doc/find.texi -+++ b/doc/find.texi -@@ -7,7 +7,7 @@ - @c %**end of header - - @include version.texi --@include dblocation.texi -+@include ../locate/dblocation.texi - - @iftex - @finalout +- + find-info.tar.gz: + $(MKDIR_P) tmp-doc-install/info + $(MAKE) $(AM_MAKEFLAGS) \ -- 2.5.0 @@ -72,29 +46,30 @@ Date: Wed, 11 May 2011 16:46:13 +0200 Subject: [PATCH 2/2] findutils-4.4.0-no-locate.patch --- - Makefile.am | 2 +- - configure.ac | 2 -- - doc/find.texi | 24 ++++++++---------------- - 3 files changed, 9 insertions(+), 19 deletions(-) + Makefile.am | 2 +- + configure.ac | 2 -- + doc/find.texi | 24 ++++++++---------------- + tests/local.mk | 2 +- + 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/Makefile.am b/Makefile.am index af82d54..6ad453b 100644 --- a/Makefile.am +++ b/Makefile.am -@@ -9,7 +9,7 @@ DISTCLEANFILES = tool-versions.txt +@@ -35,7 +35,7 @@ DISTCLEANFILES = tool-versions.txt - # "tests" is the gnulib unit test dir. --SUBDIRS = gl tests build-aux lib find xargs locate doc po m4 -+SUBDIRS = gl tests build-aux lib find xargs doc po m4 + # "gnulib-tests" is the gnulib unit test dir. +-SUBDIRS = gl build-aux lib find xargs locate doc po m4 gnulib-tests ++SUBDIRS = gl build-aux lib find xargs doc po m4 gnulib-tests - ACLOCAL_AMFLAGS = -I gl/m4 -I m4 + ALL_RECURSIVE_TARGETS = diff --git a/configure.ac b/configure.ac index ce0e768..521e665 100644 --- a/configure.ac +++ b/configure.ac -@@ -248,8 +248,6 @@ find/testsuite/Makefile +@@ -309,8 +309,6 @@ find/testsuite/Makefile gl/Makefile gl/lib/Makefile lib/Makefile @@ -111,11 +86,11 @@ index c2714dd..01367a4 100644 @c %**end of header @include version.texi --@include ../locate/dblocation.texi +-@include dblocation.texi @iftex @finalout -@@ -571,8 +570,7 @@ the databases are updated, and the directories for which they contain +@@ -575,8 +574,7 @@ the databases are updated, and the directories for which they contain entries. Here is how to select which file name databases @code{locate} @@ -125,7 +100,7 @@ index c2714dd..01367a4 100644 @table @code @item --database=@var{path} -@@ -2892,13 +2890,9 @@ thrashing the network. +@@ -2929,13 +2927,9 @@ thrashing the network. directories are indexed by each database file. The default location for the locate database depends on how findutils @@ -142,7 +117,7 @@ index c2714dd..01367a4 100644 @node Database Formats @section Database Formats -@@ -3438,8 +3432,7 @@ present. +@@ -3460,8 +3454,7 @@ present. @item --database=@var{path} @itemx -d @var{path} @@ -152,7 +127,7 @@ index c2714dd..01367a4 100644 name databases in @var{path}, which is a colon-separated list of database file names. You can also use the environment variable @code{LOCATE_PATH} to set the list of database files to search. The -@@ -3614,8 +3607,7 @@ The environment variable @code{PRUNEFS} also sets this value. Default +@@ -3636,8 +3629,7 @@ The environment variable @code{PRUNEFS} also sets this value. Default is @file{nfs NFS proc}. @item --output=@var{dbfile} @@ -162,7 +137,7 @@ index c2714dd..01367a4 100644 @item --localuser=@var{user} The user to search the non-network directories as, using @code{su}. -@@ -5635,7 +5627,7 @@ why @code{xargs} is confused by your operating system). +@@ -5631,7 +5623,7 @@ See the manual of the system call @code{dup2(2)}. @section Error Messages From @code{locate} @table @samp @@ -171,7 +146,7 @@ index c2714dd..01367a4 100644 The @code{locate} program relies on a database which is periodically built by the @code{updatedb} program. That hasn't happened in a long time. To fix this problem, run @code{updatedb} manually. This can -@@ -5643,7 +5635,7 @@ often happen on systems that are generally not left on, so the +@@ -5639,7 +5631,7 @@ often happen on systems that are generally not left on, so the periodic ``cron'' task which normally does this doesn't get a chance to run. @@ -180,6 +155,19 @@ index c2714dd..01367a4 100644 This should not happen. Re-run @code{updatedb}. If that works, but @code{locate} still produces this error, run @code{locate --version} and @code{updatedb --version}. These should produce the same output. +diff --git a/tests/local.mk b/tests/local.mk +index 7e52a04..ae08a56 100644 +--- a/tests/local.mk ++++ b/tests/local.mk +@@ -15,7 +15,7 @@ + ## You should have received a copy of the GNU General Public License + ## along with this program. If not, see . + +-built_programs = find oldfind xargs frcode locate updatedb ++built_programs = find oldfind xargs + + # Indirections required so that we'll still be able to know the + # complete list of our tests even if the user overrides TESTS -- 2.5.0 diff --git a/findutils-4.6.0-covscan.patch b/findutils-4.6.0-covscan.patch deleted file mode 100644 index 1b07276..0000000 --- a/findutils-4.6.0-covscan.patch +++ /dev/null @@ -1,116 +0,0 @@ -From 6b041f2bd5d84003d3945fc9ae18329f024b8d2a Mon Sep 17 00:00:00 2001 -From: Bernhard Voelker -Date: Thu, 2 Feb 2017 00:17:20 +0100 -Subject: [PATCH 1/2] maint: avoid warnings from GCC 6.2.1 - -buildcmd.c: In function 'bc_push_arg': -buildcmd.c:362:11: error: this 'if' clause does not guard... [-Werror=misleading-indentation] - if (ctl->replace_pat - ^~ -buildcmd.c:366:13: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if' - bc_do_exec (ctl, state); - ^~~~~~~~~~ -pred.c: In function 'print_optlist': -pred.c:1328:46: error: format '%ld' expects argument of type 'long int', but argument 3 has type 'long unsigned int' [-Werror=format=] - fprintf (fp, "[real success rate %ld/%ld", p->perf.successes, p->perf.visits); - ^ -pred.c:1328:50: error: format '%ld' expects argument of type 'long int', but argument 4 has type 'long unsigned int' [-Werror=format=] - fprintf (fp, "[real success rate %ld/%ld", p->perf.successes, p->perf.visits); - ^ -print.c: In function 'scan_for_digit_differences': -print.c:449:46: error: logical 'or' of equal expressions [-Werror=logical-op] - if (!isdigit ((unsigned char)q[i]) || !isdigit ((unsigned char)q[i])) - ^~ -cc1: all warnings being treated as errors - -* find/pred.c (print_optlist): Use %lu for unsigned long int. -* find/print.c (scan_for_digit_differences): Check p[i] too rather than -q[i] two times. -* lib/buildcmd.c (bc_push_arg): Fix indentation. -Use %lu format for unsigned long int. - -Upstream-commit: 4bbc9e7a4a46d83ac5316cc5a57ad7ec5e12f74c -Signed-off-by: Kamil Dudka ---- - find/pred.c | 2 +- - find/print.c | 2 +- - lib/buildcmd.c | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/find/pred.c b/find/pred.c -index 32938fb..5c8086e 100644 ---- a/find/pred.c -+++ b/find/pred.c -@@ -1278,7 +1278,7 @@ print_optlist (FILE *fp, const struct predicate *p) - fprintf (fp, " [%g] ", p->est_success_rate); - if (options.debug_options & DebugSuccessRates) - { -- fprintf (fp, "[%ld/%ld", p->perf.successes, p->perf.visits); -+ fprintf (fp, "[%lu/%lu", p->perf.successes, p->perf.visits); - if (p->perf.visits) - { - double real_rate = (double)p->perf.successes / (double)p->perf.visits; -diff --git a/find/print.c b/find/print.c -index e4c28ad..17b9320 100644 ---- a/find/print.c -+++ b/find/print.c -@@ -451,7 +451,7 @@ scan_for_digit_differences (const char *p, const char *q, - { - if (p[i] != q[i]) - { -- if (!isdigit ((unsigned char)q[i]) || !isdigit ((unsigned char)q[i])) -+ if (!isdigit ((unsigned char)p[i]) || !isdigit ((unsigned char)q[i])) - return false; - - if (!seen) -diff --git a/lib/buildcmd.c b/lib/buildcmd.c -index a58f67e..016ab1d 100644 ---- a/lib/buildcmd.c -+++ b/lib/buildcmd.c -@@ -374,7 +374,7 @@ bc_push_arg (struct buildcmd_control *ctl, - || (ctl->exit_if_size_exceeded && - (ctl->lines_per_exec || ctl->args_per_exec))) - error (EXIT_FAILURE, 0, _("argument list too long")); -- bc_do_exec (ctl, state); -+ bc_do_exec (ctl, state); - } - if (bc_argc_limit_reached (initial_args, ctl, state)) - bc_do_exec (ctl, state); --- -2.17.2 - - -From 55691f606c8aefa29a4b2f3061797e7f2b85981c Mon Sep 17 00:00:00 2001 -From: Bernhard Voelker -Date: Sun, 4 Feb 2018 18:20:25 +0100 -Subject: [PATCH 2/2] maint: add missing va_end - -'va_start' must have a corresponding 'va_end'. Depending on the -implementation, the consequence of a missing 'va_end' may be a -corrupted stack. - -* find/print.c (checked_fprintf): Add va_end. - -Spotted by coverity analysis. - -Upstream-commit: 76d7e2dcb45a3a558033209982772d21f68a6ea4 -Signed-off-by: Kamil Dudka ---- - find/print.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/find/print.c b/find/print.c -index 17b9320..ab1afc1 100644 ---- a/find/print.c -+++ b/find/print.c -@@ -810,6 +810,7 @@ checked_fprintf (struct format_val *dest, const char *fmt, ...) - - va_start (ap, fmt); - rv = vfprintf (dest->stream, fmt, ap); -+ va_end (ap); - if (rv < 0) - nonfatal_nontarget_file_error (errno, dest->filename); - } --- -2.17.2 - diff --git a/findutils-4.6.0-exec-args.patch b/findutils-4.6.0-exec-args.patch deleted file mode 100644 index 7f80aee..0000000 --- a/findutils-4.6.0-exec-args.patch +++ /dev/null @@ -1,226 +0,0 @@ -From 443166adaf1c8b91e16a716f3b13f47493b895cc Mon Sep 17 00:00:00 2001 -From: Bernhard Voelker -Date: Tue, 31 May 2016 10:38:52 +0200 -Subject: [PATCH] Fix bug #48030: find: -exec + does not pass all arguments in - certain cases - -When the -exec arguments buffer (usually 128k) is full and the given -command has been executed with all that arguments, find(1) missed to -execute the command yet another time if only 1 another file would have -to be processed. -Both find(1), i.e., nowadays FTS-version, and oldfind are affected. -This bug was present since the implementation of '-exec +' in 2005, -see commit FINDUTILS_4_2_11-1-25-gf0a6ac6. - -* lib/buildcmd.c (bc_push_arg): Move the assignment to set 'state->todo' -to 1 down after the immediate execution which resets that flag. -* find/testsuite/sv-48030-exec-plus-bug.sh: Add a test. -* find/testsuite/Makefile.am (test_shell_progs): Reference the test. -* NEWS (Bug Fixes): Mention the fix. - -Reported by Joe Philip Ninan in -https://savannah.gnu.org/bugs/?48030 - -Upstream-commit: 8cdc9767e305c9566f537af9d1acf71d1bc6ee8e -Signed-off-by: Kamil Dudka ---- - find/testsuite/Makefile.am | 3 +- - find/testsuite/sv-48030-exec-plus-bug.sh | 143 +++++++++++++++++++++++++++++++ - lib/buildcmd.c | 10 +-- - 3 files changed, 150 insertions(+), 6 deletions(-) - create mode 100644 find/testsuite/sv-48030-exec-plus-bug.sh - -diff --git a/find/testsuite/Makefile.am b/find/testsuite/Makefile.am -index c1369c3..ab5dbe8 100644 ---- a/find/testsuite/Makefile.am -+++ b/find/testsuite/Makefile.am -@@ -258,7 +258,8 @@ test_escapechars.sh \ - test_escape_c.sh \ - test_inode.sh \ - sv-34079.sh \ --sv-34976-execdir-fd-leak.sh -+sv-34976-execdir-fd-leak.sh \ -+sv-48030-exec-plus-bug.sh - - EXTRA_DIST = $(EXTRA_DIST_EXP) $(EXTRA_DIST_XO) $(EXTRA_DIST_GOLDEN) \ - $(test_shell_progs) binary_locations.sh checklists.py -diff --git a/find/testsuite/sv-48030-exec-plus-bug.sh b/find/testsuite/sv-48030-exec-plus-bug.sh -new file mode 100755 -index 0000000..4dbf149 ---- /dev/null -+++ b/find/testsuite/sv-48030-exec-plus-bug.sh -@@ -0,0 +1,143 @@ -+#! /bin/sh -+# Copyright (C) 2016 Free Software Foundation, Inc. -+# -+# This program is free software: you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation, either version 3 of the License, or -+# (at your option) any later version. -+# -+# This program is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License -+# along with this program. If not, see . -+# -+ -+# This test verifies that find invokes the given command for the -+# multiple-argument sytax '-exec CMD {} +'. Between FINDUTILS-4.2.12 -+# and v4.6.0, find(1) would have failed to execute CMD another time -+# if there was only one last single file argument. -+ -+testname="$(basename $0)" -+ -+. "${srcdir}"/binary_locations.sh -+ -+die() { -+ echo "$@" >&2 -+ exit 1 -+} -+ -+# This is used to simplify checking of the return value -+# which is useful when ensuring a command fails as desired. -+# I.e., just doing `command ... &&fail=1` will not catch -+# a segfault in command for example. With this helper you -+# instead check an explicit exit code like -+# returns_ 1 command ... || fail -+returns_ () { -+ # Disable tracing so it doesn't interfere with stderr of the wrapped command -+ { set +x; } 2>/dev/null -+ -+ local exp_exit="$1" -+ shift -+ "$@" -+ test $? -eq $exp_exit && ret_=0 || ret_=1 -+ -+ set -x -+ { return $ret_; } 2>/dev/null -+} -+ -+# Define the nicest compare available (borrowed from gnulib). -+if diff_out_=`exec 2>/dev/null; diff -u "$0" "$0" < /dev/null` \ -+ && diff -u Makefile "$0" 2>/dev/null | grep '^[+]#!' >/dev/null; then -+ # diff accepts the -u option and does not (like AIX 7 'diff') produce an -+ # extra space on column 1 of every content line. -+ if test -z "$diff_out_"; then -+ compare () { diff -u "$@"; } -+ else -+ compare () -+ { -+ if diff -u "$@" > diff.out; then -+ # No differences were found, but Solaris 'diff' produces output -+ # "No differences encountered". Hide this output. -+ rm -f diff.out -+ true -+ else -+ cat diff.out -+ rm -f diff.out -+ false -+ fi -+ } -+ fi -+elif diff_out_=`exec 2>/dev/null; diff -c "$0" "$0" < /dev/null`; then -+ if test -z "$diff_out_"; then -+ compare () { diff -c "$@"; } -+ else -+ compare () -+ { -+ if diff -c "$@" > diff.out; then -+ # No differences were found, but AIX and HP-UX 'diff' produce output -+ # "No differences encountered" or "There are no differences between the -+ # files.". Hide this output. -+ rm -f diff.out -+ true -+ else -+ cat diff.out -+ rm -f diff.out -+ false -+ fi -+ } -+ fi -+elif cmp -s /dev/null /dev/null 2>/dev/null; then -+ compare () { cmp -s "$@"; } -+else -+ compare () { cmp "$@"; } -+fi -+ -+DIR='RashuBug' -+# Name of the CMD to execute: the file name must be 6 characters long -+# (to trigger the bug in combination with the test files). -+CMD='tstcmd' -+ -+# Create test files. -+make_test_data() { -+ # Create the CMD script and check that it works. -+ mkdir "$DIR" 'bin' \ -+ && echo 'printf "%s\n" "$@"' > "bin/$CMD" \ -+ && chmod +x "bin/$CMD" \ -+ && PATH="$PWD/bin:$PATH" \ -+ && [ $( "${ftsfind}" bin -maxdepth 0 -exec "$CMD" '{}' + ) = 'bin' ] \ -+ || return 1 -+ -+ # Create expected output file - also used for creating the test data. -+ { seq -f "${DIR}/abcdefghijklmnopqrstuv%04g" 901 && -+ seq -f "${DIR}/abcdefghijklmnopqrstu%04g" 902 3719 -+ } > exp2 \ -+ && LC_ALL=C sort exp2 > exp \ -+ && rm exp2 \ -+ || return 1 -+ -+ # Create test files, and check if test data has been created correctly. -+ xargs touch < exp \ -+ && [ -f "${DIR}/abcdefghijklmnopqrstu3719" ] \ -+ && [ 3719 = $( "${ftsfind}" "$DIR" -type f | wc -l ) ] \ -+ || return 1 -+} -+ -+set -x -+tmpdir="$(mktemp -d)" \ -+ && cd "$tmpdir" \ -+ && make_test_data "${tmpdir}" \ -+ || die "FAIL: failed to set up the test in ${tmpdir}" -+ -+fail=0 -+for exe in "${ftsfind}" "${oldfind}"; do -+ "$exe" "$DIR" -type f -exec "$CMD" '{}' + > out || fail=1 -+ LC_ALL=C sort out > out2 || fail=1 -+ compare exp out2 || fail=1 -+done -+ -+cd .. -+rm -rf "${tmpdir}" || exit 1 -+exit $fail -diff --git a/lib/buildcmd.c b/lib/buildcmd.c -index a58f67e..27e9ce5 100644 ---- a/lib/buildcmd.c -+++ b/lib/buildcmd.c -@@ -356,11 +356,6 @@ bc_push_arg (struct buildcmd_control *ctl, - - assert (arg != NULL); - -- if (!initial_args) -- { -- state->todo = 1; -- } -- - if (!terminate) - { - if (state->cmd_argv_chars + len + pfxlen > ctl->arg_max) -@@ -380,6 +375,11 @@ bc_push_arg (struct buildcmd_control *ctl, - bc_do_exec (ctl, state); - } - -+ if (!initial_args) -+ { -+ state->todo = 1; -+ } -+ - if (state->cmd_argc >= state->cmd_argv_alloc) - { - /* XXX: we could use extendbuf() here. */ --- -2.5.5 - diff --git a/findutils-4.6.0-fts-update.patch b/findutils-4.6.0-fts-update.patch deleted file mode 100644 index 6025514..0000000 --- a/findutils-4.6.0-fts-update.patch +++ /dev/null @@ -1,990 +0,0 @@ -From f3337786e55909538aacfd7c29b1cf58ff444fbf Mon Sep 17 00:00:00 2001 -From: Kamil Dudka -Date: Mon, 12 Feb 2018 12:45:36 +0100 -Subject: [PATCH 1/4] import gnulib's FTS module from upstream commit 281b825e - ---- - gl/lib/fts.c | 424 +++++++++++++++++++++++++++++----------------------------- - gl/lib/fts_.h | 10 +- - 2 files changed, 221 insertions(+), 213 deletions(-) - -diff --git a/gl/lib/fts.c b/gl/lib/fts.c -index c91d7a1..bfa73e3 100644 ---- a/gl/lib/fts.c -+++ b/gl/lib/fts.c -@@ -1,6 +1,6 @@ - /* Traverse a file hierarchy. - -- Copyright (C) 2004-2015 Free Software Foundation, Inc. -+ Copyright (C) 2004-2018 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by -@@ -13,7 +13,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program. If not, see . */ -+ along with this program. If not, see . */ - - /*- - * Copyright (c) 1990, 1993, 1994 -@@ -46,9 +46,9 @@ - - #include - --#if defined(LIBC_SCCS) && !defined(lint) -+#if defined LIBC_SCCS && !defined GCC_LINT && !defined lint - static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; --#endif /* LIBC_SCCS and not lint */ -+#endif - - #include "fts_.h" - -@@ -71,11 +71,7 @@ static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; - - #if ! _LIBC - # include "fcntl--.h" --# include "dirent--.h" --# include "unistd--.h" --/* FIXME - use fcntl(F_DUPFD_CLOEXEC)/openat(O_CLOEXEC) once they are -- supported. */ --# include "cloexec.h" -+# include "flexmember.h" - # include "openat.h" - # include "same-inode.h" - #endif -@@ -202,6 +198,14 @@ enum Fts_stat - while (false) - #endif - -+#ifndef FALLTHROUGH -+# if __GNUC__ < 7 -+# define FALLTHROUGH ((void) 0) -+# else -+# define FALLTHROUGH __attribute__ ((__fallthrough__)) -+# endif -+#endif -+ - static FTSENT *fts_alloc (FTS *, const char *, size_t) internal_function; - static FTSENT *fts_build (FTS *, int) internal_function; - static void fts_lfree (FTSENT *) internal_function; -@@ -296,14 +300,13 @@ static DIR * - internal_function - opendirat (int fd, char const *dir, int extra_flags, int *pdir_fd) - { -- int new_fd = openat (fd, dir, -- (O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK -- | extra_flags)); -+ int open_flags = (O_RDONLY | O_CLOEXEC | O_DIRECTORY | O_NOCTTY -+ | O_NONBLOCK | extra_flags); -+ int new_fd = openat (fd, dir, open_flags); - DIR *dirp; - - if (new_fd < 0) - return NULL; -- set_cloexec_flag (new_fd, true); - dirp = fdopendir (new_fd); - if (dirp) - *pdir_fd = new_fd; -@@ -366,15 +369,13 @@ static int - internal_function - diropen (FTS const *sp, char const *dir) - { -- int open_flags = (O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK -+ int open_flags = (O_SEARCH | O_CLOEXEC | O_DIRECTORY | O_NOCTTY | O_NONBLOCK - | (ISSET (FTS_PHYSICAL) ? O_NOFOLLOW : 0) - | (ISSET (FTS_NOATIME) ? O_NOATIME : 0)); - - int fd = (ISSET (FTS_CWDFD) - ? openat (sp->fts_cwd_fd, dir, open_flags) - : open (dir, open_flags)); -- if (0 <= fd) -- set_cloexec_flag (fd, true); - return fd; - } - -@@ -470,6 +471,7 @@ fts_open (char * const *argv, - if ((parent = fts_alloc(sp, "", 0)) == NULL) - goto mem2; - parent->fts_level = FTS_ROOTPARENTLEVEL; -+ parent->fts_n_dirs_remaining = -1; - } - - /* The classic fts implementation would call fts_stat with -@@ -656,39 +658,139 @@ fts_close (FTS *sp) - return (0); - } - -+/* Minimum link count of a traditional Unix directory. When leaf -+ optimization is OK and MIN_DIR_NLINK <= st_nlink, then st_nlink is -+ an upper bound on the number of subdirectories (counting "." and -+ ".."). */ -+enum { MIN_DIR_NLINK = 2 }; -+ -+/* Whether leaf optimization is OK for a directory. */ -+enum leaf_optimization -+ { -+ /* st_nlink is not reliable for this directory's subdirectories. */ -+ NO_LEAF_OPTIMIZATION, -+ -+ /* Leaf optimization is OK, but is not useful for avoiding stat calls. */ -+ OK_LEAF_OPTIMIZATION, -+ -+ /* Leaf optimization is not only OK: it is useful for avoiding -+ stat calls, because dirent.d_type does not work. */ -+ NOSTAT_LEAF_OPTIMIZATION -+ }; -+ - #if defined __linux__ \ - && HAVE_SYS_VFS_H && HAVE_FSTATFS && HAVE_STRUCT_STATFS_F_TYPE - - # include - - /* Linux-specific constants from coreutils' src/fs.h */ --# define S_MAGIC_TMPFS 0x1021994 -+# define S_MAGIC_AFS 0x5346414F - # define S_MAGIC_NFS 0x6969 -+# define S_MAGIC_PROC 0x9FA0 - # define S_MAGIC_REISERFS 0x52654973 -+# define S_MAGIC_TMPFS 0x1021994 - # define S_MAGIC_XFS 0x58465342 --# define S_MAGIC_PROC 0x9FA0 - --/* Return false if it is easy to determine the file system type of -- the directory on which DIR_FD is open, and sorting dirents on -- inode numbers is known not to improve traversal performance with -- that type of file system. Otherwise, return true. */ -+# ifdef HAVE___FSWORD_T -+typedef __fsword_t fsword; -+# else -+typedef long int fsword; -+# endif -+ -+/* Map a stat.st_dev number to a file system type number f_ftype. */ -+struct dev_type -+{ -+ dev_t st_dev; -+ fsword f_type; -+}; -+ -+/* Use a tiny initial size. If a traversal encounters more than -+ a few devices, the cost of growing/rehashing this table will be -+ rendered negligible by the number of inodes processed. */ -+enum { DEV_TYPE_HT_INITIAL_SIZE = 13 }; -+ -+static size_t -+dev_type_hash (void const *x, size_t table_size) -+{ -+ struct dev_type const *ax = x; -+ uintmax_t dev = ax->st_dev; -+ return dev % table_size; -+} -+ - static bool --dirent_inode_sort_may_be_useful (int dir_fd) -+dev_type_compare (void const *x, void const *y) -+{ -+ struct dev_type const *ax = x; -+ struct dev_type const *ay = y; -+ return ax->st_dev == ay->st_dev; -+} -+ -+/* Return the file system type of P, or 0 if not known. -+ Try to cache known values. */ -+ -+static fsword -+filesystem_type (FTSENT const *p) -+{ -+ FTS *sp = p->fts_fts; -+ Hash_table *h = sp->fts_leaf_optimization_works_ht; -+ struct dev_type *ent; -+ struct statfs fs_buf; -+ -+ /* If we're not in CWDFD mode, don't bother with this optimization, -+ since the caller is not serious about performance. */ -+ if (!ISSET (FTS_CWDFD)) -+ return 0; -+ -+ if (! h) -+ h = sp->fts_leaf_optimization_works_ht -+ = hash_initialize (DEV_TYPE_HT_INITIAL_SIZE, NULL, dev_type_hash, -+ dev_type_compare, free); -+ if (h) -+ { -+ struct dev_type tmp; -+ tmp.st_dev = p->fts_statp->st_dev; -+ ent = hash_lookup (h, &tmp); -+ if (ent) -+ return ent->f_type; -+ } -+ -+ /* Look-up failed. Query directly and cache the result. */ -+ if (fstatfs (p->fts_fts->fts_cwd_fd, &fs_buf) != 0) -+ return 0; -+ -+ if (h) -+ { -+ struct dev_type *t2 = malloc (sizeof *t2); -+ if (t2) -+ { -+ t2->st_dev = p->fts_statp->st_dev; -+ t2->f_type = fs_buf.f_type; -+ -+ ent = hash_insert (h, t2); -+ if (ent) -+ fts_assert (ent == t2); -+ else -+ free (t2); -+ } -+ } -+ -+ return fs_buf.f_type; -+} -+ -+/* Return false if it is easy to determine the file system type of the -+ directory P, and sorting dirents on inode numbers is known not to -+ improve traversal performance with that type of file system. -+ Otherwise, return true. */ -+static bool -+dirent_inode_sort_may_be_useful (FTSENT const *p) - { - /* Skip the sort only if we can determine efficiently - that skipping it is the right thing to do. - The cost of performing an unnecessary sort is negligible, - while the cost of *not* performing it can be O(N^2) with - a very large constant. */ -- struct statfs fs_buf; -- -- /* If fstatfs fails, assume sorting would be useful. */ -- if (fstatfs (dir_fd, &fs_buf) != 0) -- return true; - -- /* FIXME: what about when f_type is not an integral type? -- deal with that if/when it's encountered. */ -- switch (fs_buf.f_type) -+ switch (filesystem_type (p)) - { - case S_MAGIC_TMPFS: - case S_MAGIC_NFS: -@@ -701,133 +803,58 @@ dirent_inode_sort_may_be_useful (int dir_fd) - } - } - --/* Given a file descriptor DIR_FD open on a directory D, -- return true if it is valid to apply the leaf-optimization -- technique of counting directories in D via stat.st_nlink. */ --static bool --leaf_optimization_applies (int dir_fd) -+/* Given an FTS entry P for a directory D, -+ return true if it is both useful and valid to apply leaf optimization. -+ The optimization is useful only for file systems that lack usable -+ dirent.d_type info. The optimization is valid if an st_nlink value -+ of at least MIN_DIR_NLINK is an upper bound on the number of -+ subdirectories of D, counting "." and ".." as subdirectories. */ -+static enum leaf_optimization -+leaf_optimization (FTSENT const *p) - { -- struct statfs fs_buf; -- -- /* If fstatfs fails, assume we can't use the optimization. */ -- if (fstatfs (dir_fd, &fs_buf) != 0) -- return false; -- -- /* FIXME: do we need to detect AFS mount points? I doubt it, -- unless fstatfs can report S_MAGIC_REISERFS for such a directory. */ -- -- switch (fs_buf.f_type) -+ switch (filesystem_type (p)) - { -- case S_MAGIC_NFS: -- /* NFS provides usable dirent.d_type but not necessarily for all entries -- of large directories. See . */ -- return true; -- -- /* List here the file system types that lack usable dirent.d_type -+ /* List here the file system types that may lack usable dirent.d_type - info, yet for which the optimization does apply. */ - case S_MAGIC_REISERFS: -- case S_MAGIC_XFS: -- return true; -- -+ case S_MAGIC_XFS: /* XFS lacked it until 2013-08-22 commit. */ -+ return NOSTAT_LEAF_OPTIMIZATION; -+ -+ case 0: -+ /* Leaf optimization is unsafe if the file system type is unknown. */ -+ FALLTHROUGH; -+ case S_MAGIC_AFS: -+ /* Although AFS mount points are not counted in st_nlink, they -+ act like directories. See . */ -+ FALLTHROUGH; -+ case S_MAGIC_NFS: -+ /* NFS provides usable dirent.d_type but not necessarily for all entries -+ of large directories, so as per -+ NFS should return true. However st_nlink values are not accurate on -+ all implementations as per . */ -+ FALLTHROUGH; - case S_MAGIC_PROC: -- /* Explicitly listing this or any other file system type for which -- the optimization is not applicable is not necessary, but we leave -- it here to document the risk. Per http://bugs.debian.org/143111, -- /proc may have bogus stat.st_nlink values. */ -- /* fall through */ -+ /* Per /proc -+ may have bogus stat.st_nlink values. */ -+ return NO_LEAF_OPTIMIZATION; -+ - default: -- return false; -+ return OK_LEAF_OPTIMIZATION; - } - } - - #else - static bool --dirent_inode_sort_may_be_useful (int dir_fd _GL_UNUSED) { return true; } --static bool --leaf_optimization_applies (int dir_fd _GL_UNUSED) { return false; } --#endif -- --/* link-count-optimization entry: -- map a stat.st_dev number to a boolean: leaf_optimization_works */ --struct LCO_ent --{ -- dev_t st_dev; -- bool opt_ok; --}; -- --/* Use a tiny initial size. If a traversal encounters more than -- a few devices, the cost of growing/rehashing this table will be -- rendered negligible by the number of inodes processed. */ --enum { LCO_HT_INITIAL_SIZE = 13 }; -- --static size_t --LCO_hash (void const *x, size_t table_size) --{ -- struct LCO_ent const *ax = x; -- return (uintmax_t) ax->st_dev % table_size; --} -- --static bool --LCO_compare (void const *x, void const *y) -+dirent_inode_sort_may_be_useful (FTSENT const *p _GL_UNUSED) - { -- struct LCO_ent const *ax = x; -- struct LCO_ent const *ay = y; -- return ax->st_dev == ay->st_dev; -+ return true; - } -- --/* Ask the same question as leaf_optimization_applies, but query -- the cache first (FTS.fts_leaf_optimization_works_ht), and if necessary, -- update that cache. */ --static bool --link_count_optimize_ok (FTSENT const *p) -+static enum leaf_optimization -+leaf_optimization (FTSENT const *p _GL_UNUSED) - { -- FTS *sp = p->fts_fts; -- Hash_table *h = sp->fts_leaf_optimization_works_ht; -- struct LCO_ent tmp; -- struct LCO_ent *ent; -- bool opt_ok; -- struct LCO_ent *t2; -- -- /* If we're not in CWDFD mode, don't bother with this optimization, -- since the caller is not serious about performance. */ -- if (!ISSET(FTS_CWDFD)) -- return false; -- -- /* map st_dev to the boolean, leaf_optimization_works */ -- if (h == NULL) -- { -- h = sp->fts_leaf_optimization_works_ht -- = hash_initialize (LCO_HT_INITIAL_SIZE, NULL, LCO_hash, -- LCO_compare, free); -- if (h == NULL) -- return false; -- } -- tmp.st_dev = p->fts_statp->st_dev; -- ent = hash_lookup (h, &tmp); -- if (ent) -- return ent->opt_ok; -- -- /* Look-up failed. Query directly and cache the result. */ -- t2 = malloc (sizeof *t2); -- if (t2 == NULL) -- return false; -- -- /* Is it ok to perform the optimization in the dir, FTS_CWD_FD? */ -- opt_ok = leaf_optimization_applies (sp->fts_cwd_fd); -- t2->opt_ok = opt_ok; -- t2->st_dev = p->fts_statp->st_dev; -- -- ent = hash_insert (h, t2); -- if (ent == NULL) -- { -- /* insertion failed */ -- free (t2); -- return false; -- } -- fts_assert (ent == t2); -- -- return opt_ok; -+ return NO_LEAF_OPTIMIZATION; - } -+#endif - - /* - * Special case of "/" at the end of the file name so that slashes aren't -@@ -1014,13 +1041,11 @@ check_for_dir: - if (p->fts_statp->st_size == FTS_STAT_REQUIRED) - { - FTSENT *parent = p->fts_parent; -- if (FTS_ROOTLEVEL < p->fts_level -- /* ->fts_n_dirs_remaining is not valid -- for command-line-specified names. */ -- && parent->fts_n_dirs_remaining == 0 -+ if (parent->fts_n_dirs_remaining == 0 - && ISSET(FTS_NOSTAT) - && ISSET(FTS_PHYSICAL) -- && link_count_optimize_ok (parent)) -+ && (leaf_optimization (parent) -+ == NOSTAT_LEAF_OPTIMIZATION)) - { - /* nothing more needed */ - } -@@ -1029,7 +1054,8 @@ check_for_dir: - p->fts_info = fts_stat(sp, p, false); - if (S_ISDIR(p->fts_statp->st_mode) - && p->fts_level != FTS_ROOTLEVEL -- && parent->fts_n_dirs_remaining) -+ && 0 < parent->fts_n_dirs_remaining -+ && parent->fts_n_dirs_remaining != (nlink_t) -1) - parent->fts_n_dirs_remaining--; - } - } -@@ -1298,8 +1324,6 @@ fts_build (register FTS *sp, int type) - bool descend; - bool doadjust; - ptrdiff_t level; -- nlink_t nlinks; -- bool nostat; - size_t len, maxlen, new_len; - char *cp; - int dir_fd; -@@ -1369,24 +1393,6 @@ fts_build (register FTS *sp, int type) - sorting, yet not so large that we risk exhausting memory. */ - max_entries = sp->fts_compar ? SIZE_MAX : FTS_MAX_READDIR_ENTRIES; - -- /* -- * Nlinks is the number of possible entries of type directory in the -- * directory if we're cheating on stat calls, 0 if we're not doing -- * any stat calls at all, (nlink_t) -1 if we're statting everything. -- */ -- if (type == BNAMES) { -- nlinks = 0; -- /* Be quiet about nostat, GCC. */ -- nostat = false; -- } else if (ISSET(FTS_NOSTAT) && ISSET(FTS_PHYSICAL)) { -- nlinks = (cur->fts_statp->st_nlink -- - (ISSET(FTS_SEEDOT) ? 0 : 2)); -- nostat = true; -- } else { -- nlinks = -1; -- nostat = false; -- } -- - /* - * If we're going to need to stat anything or we want to descend - * and stay in the directory, chdir. If this fails we keep going, -@@ -1408,15 +1414,22 @@ fts_build (register FTS *sp, int type) - the required dirp and dir_fd. */ - descend = true; - } -- else if (nlinks || type == BREAD) { -+ else -+ { -+ /* Try to descend unless it is a names-only fts_children, -+ or the directory is known to lack subdirectories. */ -+ descend = (type != BNAMES -+ && ! (ISSET (FTS_NOSTAT) && ISSET (FTS_PHYSICAL) -+ && ! ISSET (FTS_SEEDOT) -+ && cur->fts_statp->st_nlink == MIN_DIR_NLINK -+ && (leaf_optimization (cur) -+ != NO_LEAF_OPTIMIZATION))); -+ if (descend || type == BREAD) -+ { - if (ISSET(FTS_CWDFD)) -- { -- dir_fd = dup (dir_fd); -- if (0 <= dir_fd) -- set_cloexec_flag (dir_fd, true); -- } -+ dir_fd = fcntl (dir_fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); - if (dir_fd < 0 || fts_safe_changedir(sp, cur, dir_fd, NULL)) { -- if (nlinks && type == BREAD) -+ if (descend && type == BREAD) - cur->fts_errno = errno; - cur->fts_flags |= FTS_DONTCHDIR; - descend = false; -@@ -1426,8 +1439,8 @@ fts_build (register FTS *sp, int type) - cur->fts_dirp = NULL; - } else - descend = true; -- } else -- descend = false; -+ } -+ } - - /* - * Figure out the max file name length that can be stored in the -@@ -1458,11 +1471,19 @@ fts_build (register FTS *sp, int type) - tail = NULL; - nitems = 0; - while (cur->fts_dirp) { -- bool is_dir; - size_t d_namelen; -+ __set_errno (0); - struct dirent *dp = readdir(cur->fts_dirp); -- if (dp == NULL) -+ if (dp == NULL) { -+ if (errno) { -+ cur->fts_errno = errno; -+ /* If we've not read any items yet, treat -+ the error as if we can't access the dir. */ -+ cur->fts_info = (continue_readdir || nitems) -+ ? FTS_ERR : FTS_DNR; -+ } - break; -+ } - if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name)) - continue; - -@@ -1550,19 +1571,10 @@ mem1: saved_errno = errno; - to caller, when possible. */ - set_stat_type (p->fts_statp, D_TYPE (dp)); - fts_set_stat_required(p, !skip_stat); -- is_dir = (ISSET(FTS_PHYSICAL) -- && DT_MUST_BE(dp, DT_DIR)); - } else { - p->fts_info = fts_stat(sp, p, false); -- is_dir = (p->fts_info == FTS_D -- || p->fts_info == FTS_DC -- || p->fts_info == FTS_DOT); - } - -- /* Decrement link count if applicable. */ -- if (nlinks > 0 && is_dir) -- nlinks -= nostat; -- - /* We walk in directory order so "ls -f" doesn't get upset. */ - p->fts_link = NULL; - if (head == NULL) -@@ -1621,7 +1633,8 @@ mem1: saved_errno = errno; - - /* If didn't find anything, return NULL. */ - if (!nitems) { -- if (type == BREAD) -+ if (type == BREAD -+ && cur->fts_info != FTS_DNR && cur->fts_info != FTS_ERR) - cur->fts_info = FTS_DP; - fts_lfree(head); - return (NULL); -@@ -1633,8 +1646,7 @@ mem1: saved_errno = errno; - inode numbers. */ - if (nitems > _FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD - && !sp->fts_compar -- && ISSET (FTS_CWDFD) -- && dirent_inode_sort_may_be_useful (sp->fts_cwd_fd)) { -+ && dirent_inode_sort_may_be_useful (cur)) { - sp->fts_compar = fts_compare_ino; - head = fts_sort (sp, head, nitems); - sp->fts_compar = NULL; -@@ -1757,7 +1769,7 @@ fd_ring_check (FTS const *sp) - I_ring fd_w = sp->fts_fd_ring; - - int cwd_fd = sp->fts_cwd_fd; -- cwd_fd = dup (cwd_fd); -+ cwd_fd = fcntl (cwd_fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); - char *dot = getcwdat (cwd_fd, NULL, 0); - error (0, 0, "===== check ===== cwd: %s", dot); - free (dot); -@@ -1766,7 +1778,8 @@ fd_ring_check (FTS const *sp) - int fd = i_ring_pop (&fd_w); - if (0 <= fd) - { -- int parent_fd = openat (cwd_fd, "..", O_SEARCH | O_NOATIME); -+ int open_flags = O_SEARCH | O_CLOEXEC | O_NOATIME; -+ int parent_fd = openat (cwd_fd, "..", open_flags); - if (parent_fd < 0) - { - // Warn? -@@ -1795,7 +1808,6 @@ internal_function - fts_stat(FTS *sp, register FTSENT *p, bool follow) - { - struct stat *sbp = p->fts_statp; -- int saved_errno; - - if (p->fts_level == FTS_ROOTLEVEL && ISSET(FTS_COMFOLLOW)) - follow = true; -@@ -1807,13 +1819,12 @@ fts_stat(FTS *sp, register FTSENT *p, bool follow) - */ - if (ISSET(FTS_LOGICAL) || follow) { - if (stat(p->fts_accpath, sbp)) { -- saved_errno = errno; - if (errno == ENOENT - && lstat(p->fts_accpath, sbp) == 0) { - __set_errno (0); - return (FTS_SLNONE); - } -- p->fts_errno = saved_errno; -+ p->fts_errno = errno; - goto err; - } - } else if (fstatat(sp->fts_cwd_fd, p->fts_accpath, sbp, -@@ -1824,8 +1835,11 @@ err: memset(sbp, 0, sizeof(struct stat)); - } - - if (S_ISDIR(sbp->st_mode)) { -- p->fts_n_dirs_remaining = (sbp->st_nlink -- - (ISSET(FTS_SEEDOT) ? 0 : 2)); -+ p->fts_n_dirs_remaining -+ = ((sbp->st_nlink < MIN_DIR_NLINK -+ || p->fts_level <= FTS_ROOTLEVEL) -+ ? -1 -+ : sbp->st_nlink - (ISSET (FTS_SEEDOT) ? 0 : MIN_DIR_NLINK)); - if (ISDOT(p->fts_name)) { - /* Command-line "." and ".." are real directories. */ - return (p->fts_level == FTS_ROOTLEVEL ? FTS_D : FTS_DOT); -@@ -1914,17 +1928,7 @@ fts_alloc (FTS *sp, const char *name, register size_t namelen) - * The file name is a variable length array. Allocate the FTSENT - * structure and the file name in one chunk. - */ -- len = offsetof(FTSENT, fts_name) + namelen + 1; -- /* Align the allocation size so that it works for FTSENT, -- so that trailing padding may be referenced by direct access -- to the flexible array members, without triggering undefined behavior -- by accessing bytes beyond the heap allocation. This implicit access -- was seen for example with ISDOT() and GCC 5.1.1 at -O2. -- Do not use alignof (FTSENT) here, since C11 prohibits -- taking the alignment of a structure containing a flexible -- array member. */ -- len += alignof (max_align_t) - 1; -- len &= ~ (alignof (max_align_t) - 1); -+ len = FLEXSIZEOF(FTSENT, fts_name, namelen + 1); - if ((p = malloc(len)) == NULL) - return (NULL); - -diff --git a/gl/lib/fts_.h b/gl/lib/fts_.h -index b9a3f12..70cc9e3 100644 ---- a/gl/lib/fts_.h -+++ b/gl/lib/fts_.h -@@ -1,6 +1,6 @@ - /* Traverse a file hierarchy. - -- Copyright (C) 2004-2015 Free Software Foundation, Inc. -+ Copyright (C) 2004-2018 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by -@@ -13,7 +13,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program. If not, see . */ -+ along with this program. If not, see . */ - - /* - * Copyright (c) 1989, 1993 -@@ -220,7 +220,11 @@ typedef struct _ftsent { - ptrdiff_t fts_level; /* depth (-1 to N) */ - - size_t fts_namelen; /* strlen(fts_name) */ -- nlink_t fts_n_dirs_remaining; /* count down from st_nlink */ -+ -+ /* If not (nlink_t) -1, an upper bound on the number of -+ remaining subdirectories of interest. If this becomes -+ zero, some work can be avoided. */ -+ nlink_t fts_n_dirs_remaining; - - # define FTS_D 1 /* preorder directory */ - # define FTS_DC 2 /* directory that causes cycles */ --- -2.13.6 - - -From ea88dd373c60feab541fe037369805f326dc3494 Mon Sep 17 00:00:00 2001 -From: rpm-build -Date: Mon, 12 Feb 2018 18:58:30 +0100 -Subject: [PATCH 2/4] fts: remove dependency on gnulib's fleximember.h - -... by reverting upstream commit edb9d82948cb23f67a19e1b435047a0570225df3 ---- - gl/lib/fts.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/gl/lib/fts.c b/gl/lib/fts.c -index bfa73e3..c37ebe2 100644 ---- a/gl/lib/fts.c -+++ b/gl/lib/fts.c -@@ -71,7 +71,6 @@ static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; - - #if ! _LIBC - # include "fcntl--.h" --# include "flexmember.h" - # include "openat.h" - # include "same-inode.h" - #endif -@@ -1928,7 +1927,17 @@ fts_alloc (FTS *sp, const char *name, register size_t namelen) - * The file name is a variable length array. Allocate the FTSENT - * structure and the file name in one chunk. - */ -- len = FLEXSIZEOF(FTSENT, fts_name, namelen + 1); -+ len = offsetof(FTSENT, fts_name) + namelen + 1; -+ /* Align the allocation size so that it works for FTSENT, -+ so that trailing padding may be referenced by direct access -+ to the flexible array members, without triggering undefined behavior -+ by accessing bytes beyond the heap allocation. This implicit access -+ was seen for example with ISDOT() and GCC 5.1.1 at -O2. -+ Do not use alignof (FTSENT) here, since C11 prohibits -+ taking the alignment of a structure containing a flexible -+ array member. */ -+ len += alignof (max_align_t) - 1; -+ len &= ~ (alignof (max_align_t) - 1); - if ((p = malloc(len)) == NULL) - return (NULL); - --- -2.13.6 - - -From 9c1720c99bbf8998dfdaa5976bca8bdc6d93f8e7 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Thu, 5 Apr 2018 08:48:01 -0700 -Subject: [PATCH 3/4] fts: treat CIFS like NFS - -Problem reported by Kamil Dudka in: -https://lists.gnu.org/r/bug-gnulib/2018-04/msg00015.html -* lib/fts.c (S_MAGIC_CIFS): New macro. -(dirent_inode_sort_may_be_useful, leaf_optimization): -Treat CIFS like NFS. - -Upstream-commit: 2e53df541a30d438859087ed4b5a396e04697b9b -Signed-off-by: Kamil Dudka ---- - gl/lib/fts.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/gl/lib/fts.c b/gl/lib/fts.c -index c37ebe2..508ceac 100644 ---- a/gl/lib/fts.c -+++ b/gl/lib/fts.c -@@ -684,6 +684,7 @@ enum leaf_optimization - - /* Linux-specific constants from coreutils' src/fs.h */ - # define S_MAGIC_AFS 0x5346414F -+# define S_MAGIC_CIFS 0xFF534D42 - # define S_MAGIC_NFS 0x6969 - # define S_MAGIC_PROC 0x9FA0 - # define S_MAGIC_REISERFS 0x52654973 -@@ -791,8 +792,9 @@ dirent_inode_sort_may_be_useful (FTSENT const *p) - - switch (filesystem_type (p)) - { -- case S_MAGIC_TMPFS: -+ case S_MAGIC_CIFS: - case S_MAGIC_NFS: -+ case S_MAGIC_TMPFS: - /* On a file system of any of these types, sorting - is unnecessary, and hence wasteful. */ - return false; -@@ -826,6 +828,10 @@ leaf_optimization (FTSENT const *p) - /* Although AFS mount points are not counted in st_nlink, they - act like directories. See . */ - FALLTHROUGH; -+ case S_MAGIC_CIFS: -+ /* Leaf optimization causes 'find' to abort. See -+ . */ -+ FALLTHROUGH; - case S_MAGIC_NFS: - /* NFS provides usable dirent.d_type but not necessarily for all entries - of large directories, so as per --- -2.14.3 - - -From ff64329a046e76ba553c15373ed61bbed814d286 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Wed, 11 Apr 2018 12:50:35 -0700 -Subject: [PATCH 4/4] fts: fix bug in find across filesystems - -This fixes a bug I introduced last summer. -Problem reported by Kamil Dudka in: -https://lists.gnu.org/r/bug-gnulib/2018-04/msg00033.html -* lib/fts.c (filesystem_type, dirent_inode_sort_may_be_useful) -(leaf_optimization): -New arg for file descriptor. All callers changed. -(fts_build): Check for whether inodes should be sorted -before closing the directory. - -Upstream-commit: 81b8c0d3be98f5a77403599de3d06329b3e7673e -Signed-off-by: Kamil Dudka ---- - gl/lib/fts.c | 55 +++++++++++++++++++++++++++++++------------------------ - 1 file changed, 31 insertions(+), 24 deletions(-) - -diff --git a/gl/lib/fts.c b/gl/lib/fts.c -index 508ceac..175f12a 100644 ---- a/gl/lib/fts.c -+++ b/gl/lib/fts.c -@@ -725,11 +725,12 @@ dev_type_compare (void const *x, void const *y) - return ax->st_dev == ay->st_dev; - } - --/* Return the file system type of P, or 0 if not known. -+/* Return the file system type of P with file descriptor FD, or 0 if not known. -+ If FD is negative, P's file descriptor is unavailable. - Try to cache known values. */ - - static fsword --filesystem_type (FTSENT const *p) -+filesystem_type (FTSENT const *p, int fd) - { - FTS *sp = p->fts_fts; - Hash_table *h = sp->fts_leaf_optimization_works_ht; -@@ -755,7 +756,7 @@ filesystem_type (FTSENT const *p) - } - - /* Look-up failed. Query directly and cache the result. */ -- if (fstatfs (p->fts_fts->fts_cwd_fd, &fs_buf) != 0) -+ if (fd < 0 || fstatfs (fd, &fs_buf) != 0) - return 0; - - if (h) -@@ -777,12 +778,12 @@ filesystem_type (FTSENT const *p) - return fs_buf.f_type; - } - --/* Return false if it is easy to determine the file system type of the -- directory P, and sorting dirents on inode numbers is known not to -- improve traversal performance with that type of file system. -- Otherwise, return true. */ -+/* Return true if sorting dirents on inode numbers is known to improve -+ traversal performance for the directory P with descriptor DIR_FD. -+ Return false otherwise. When in doubt, return true. -+ DIR_FD is negative if unavailable. */ - static bool --dirent_inode_sort_may_be_useful (FTSENT const *p) -+dirent_inode_sort_may_be_useful (FTSENT const *p, int dir_fd) - { - /* Skip the sort only if we can determine efficiently - that skipping it is the right thing to do. -@@ -790,7 +791,7 @@ dirent_inode_sort_may_be_useful (FTSENT const *p) - while the cost of *not* performing it can be O(N^2) with - a very large constant. */ - -- switch (filesystem_type (p)) -+ switch (filesystem_type (p, dir_fd)) - { - case S_MAGIC_CIFS: - case S_MAGIC_NFS: -@@ -804,16 +805,17 @@ dirent_inode_sort_may_be_useful (FTSENT const *p) - } - } - --/* Given an FTS entry P for a directory D, -+/* Given an FTS entry P for a directory with descriptor DIR_FD, - return true if it is both useful and valid to apply leaf optimization. - The optimization is useful only for file systems that lack usable - dirent.d_type info. The optimization is valid if an st_nlink value - of at least MIN_DIR_NLINK is an upper bound on the number of -- subdirectories of D, counting "." and ".." as subdirectories. */ -+ subdirectories of D, counting "." and ".." as subdirectories. -+ DIR_FD is negative if unavailable. */ - static enum leaf_optimization --leaf_optimization (FTSENT const *p) -+leaf_optimization (FTSENT const *p, int dir_fd) - { -- switch (filesystem_type (p)) -+ switch (filesystem_type (p, dir_fd)) - { - /* List here the file system types that may lack usable dirent.d_type - info, yet for which the optimization does apply. */ -@@ -850,12 +852,13 @@ leaf_optimization (FTSENT const *p) - - #else - static bool --dirent_inode_sort_may_be_useful (FTSENT const *p _GL_UNUSED) -+dirent_inode_sort_may_be_useful (FTSENT const *p _GL_UNUSED, -+ int dir_fd _GL_UNUSED) - { - return true; - } - static enum leaf_optimization --leaf_optimization (FTSENT const *p _GL_UNUSED) -+leaf_optimization (FTSENT const *p _GL_UNUSED, int dir_fd _GL_UNUSED) - { - return NO_LEAF_OPTIMIZATION; - } -@@ -1049,7 +1052,7 @@ check_for_dir: - if (parent->fts_n_dirs_remaining == 0 - && ISSET(FTS_NOSTAT) - && ISSET(FTS_PHYSICAL) -- && (leaf_optimization (parent) -+ && (leaf_optimization (parent, sp->fts_cwd_fd) - == NOSTAT_LEAF_OPTIMIZATION)) - { - /* nothing more needed */ -@@ -1334,6 +1337,7 @@ fts_build (register FTS *sp, int type) - int dir_fd; - FTSENT *cur = sp->fts_cur; - bool continue_readdir = !!cur->fts_dirp; -+ bool sort_by_inode = false; - size_t max_entries; - - /* When cur->fts_dirp is non-NULL, that means we should -@@ -1427,7 +1431,7 @@ fts_build (register FTS *sp, int type) - && ! (ISSET (FTS_NOSTAT) && ISSET (FTS_PHYSICAL) - && ! ISSET (FTS_SEEDOT) - && cur->fts_statp->st_nlink == MIN_DIR_NLINK -- && (leaf_optimization (cur) -+ && (leaf_optimization (cur, dir_fd) - != NO_LEAF_OPTIMIZATION))); - if (descend || type == BREAD) - { -@@ -1588,6 +1592,15 @@ mem1: saved_errno = errno; - tail->fts_link = p; - tail = p; - } -+ -+ /* If there are many entries, no sorting function has been -+ specified, and this file system is of a type that may be -+ slow with a large number of entries, arrange to sort the -+ directory entries on increasing inode numbers. */ -+ if (nitems == _FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD -+ && !sp->fts_compar) -+ sort_by_inode = dirent_inode_sort_may_be_useful (cur, dir_fd); -+ - ++nitems; - if (max_entries <= nitems) { - /* When there are too many dir entries, leave -@@ -1645,13 +1658,7 @@ mem1: saved_errno = errno; - return (NULL); - } - -- /* If there are many entries, no sorting function has been specified, -- and this file system is of a type that may be slow with a large -- number of entries, then sort the directory entries on increasing -- inode numbers. */ -- if (nitems > _FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD -- && !sp->fts_compar -- && dirent_inode_sort_may_be_useful (cur)) { -+ if (sort_by_inode) { - sp->fts_compar = fts_compare_ino; - head = fts_sort (sp, head, nitems); - sp->fts_compar = NULL; --- -2.14.3 - diff --git a/findutils-4.6.0-gnulib-fflush.patch b/findutils-4.6.0-gnulib-fflush.patch deleted file mode 100644 index 47ac93b..0000000 --- a/findutils-4.6.0-gnulib-fflush.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 80cdfba079627e15129a926a133825b961d41e36 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Mon, 5 Mar 2018 10:56:29 -0800 -Subject: [PATCH] fflush: adjust to glibc 2.28 libio.h removal -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Problem reported by Daniel P. Berrangé in: -https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html -* lib/fflush.c (clear_ungetc_buffer_preserving_position) -(disable_seek_optimization, rpl_fflush): -* lib/fpurge.c (fpurge): -* lib/freadahead.c (freadahead): -* lib/freading.c (freading): -* lib/fseeko.c (fseeko): -* lib/stdio-impl.h (_IO_IN_BACKUP) [_IO_EOF_SEEN]: -Define if not already defined. - -Upstream-commit: 4af4a4a71827c0bc5e0ec67af23edef4f15cee8e -Signed-off-by: Kamil Dudka ---- - gl/lib/fflush.c | 6 +++--- - gl/lib/fpurge.c | 2 +- - gl/lib/freadahead.c | 2 +- - gl/lib/freading.c | 2 +- - gl/lib/fseeko.c | 4 ++-- - gl/lib/stdio-impl.h | 6 ++++++ - 6 files changed, 14 insertions(+), 8 deletions(-) - -diff --git a/gl/lib/fflush.c b/gl/lib/fflush.c -index 5ae3e41..7a82470 100644 ---- a/gl/lib/fflush.c -+++ b/gl/lib/fflush.c -@@ -33,7 +33,7 @@ - #undef fflush - - --#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ -+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ - - /* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */ - static void -@@ -72,7 +72,7 @@ clear_ungetc_buffer (FILE *fp) - - #endif - --#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) -+#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) - - # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ -@@ -148,7 +148,7 @@ rpl_fflush (FILE *stream) - if (stream == NULL || ! freading (stream)) - return fflush (stream); - --#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ -+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ - - clear_ungetc_buffer_preserving_position (stream); - -diff --git a/gl/lib/fpurge.c b/gl/lib/fpurge.c -index f313b22..ecdf82d 100644 ---- a/gl/lib/fpurge.c -+++ b/gl/lib/fpurge.c -@@ -62,7 +62,7 @@ fpurge (FILE *fp) - /* Most systems provide FILE as a struct and the necessary bitmask in - , because they need it for implementing getc() and putc() as - fast macros. */ --# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ -+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ - fp->_IO_read_end = fp->_IO_read_ptr; - fp->_IO_write_ptr = fp->_IO_write_base; - /* Avoid memory leak when there is an active ungetc buffer. */ -diff --git a/gl/lib/freadahead.c b/gl/lib/freadahead.c -index 094daab..3f8101e 100644 ---- a/gl/lib/freadahead.c -+++ b/gl/lib/freadahead.c -@@ -25,7 +25,7 @@ - size_t - freadahead (FILE *fp) - { --#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ -+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ - if (fp->_IO_write_ptr > fp->_IO_write_base) - return 0; - return (fp->_IO_read_end - fp->_IO_read_ptr) -diff --git a/gl/lib/freading.c b/gl/lib/freading.c -index 0512b19..8c48fe4 100644 ---- a/gl/lib/freading.c -+++ b/gl/lib/freading.c -@@ -31,7 +31,7 @@ freading (FILE *fp) - /* Most systems provide FILE as a struct and the necessary bitmask in - , because they need it for implementing getc() and putc() as - fast macros. */ --# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ -+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ - return ((fp->_flags & _IO_NO_WRITES) != 0 - || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0 - && fp->_IO_read_base != NULL)); -diff --git a/gl/lib/fseeko.c b/gl/lib/fseeko.c -index 1c65d2a..9026408 100644 ---- a/gl/lib/fseeko.c -+++ b/gl/lib/fseeko.c -@@ -47,7 +47,7 @@ fseeko (FILE *fp, off_t offset, int whence) - #endif - - /* These tests are based on fpurge.c. */ --#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ -+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ - if (fp->_IO_read_end == fp->_IO_read_ptr - && fp->_IO_write_ptr == fp->_IO_write_base - && fp->_IO_save_base == NULL) -@@ -123,7 +123,7 @@ fseeko (FILE *fp, off_t offset, int whence) - return -1; - } - --#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ -+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ - fp->_flags &= ~_IO_EOF_SEEN; - fp->_offset = pos; - #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ -diff --git a/gl/lib/stdio-impl.h b/gl/lib/stdio-impl.h -index 502d891..ea38ee2 100644 ---- a/gl/lib/stdio-impl.h -+++ b/gl/lib/stdio-impl.h -@@ -18,6 +18,12 @@ - the same implementation of stdio extension API, except that some fields - have different naming conventions, or their access requires some casts. */ - -+/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this -+ problem by defining it ourselves. FIXME: Do not rely on glibc -+ internals. */ -+#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN -+# define _IO_IN_BACKUP 0x100 -+#endif - - /* BSD stdio derived implementations. */ - --- -2.16.2 - diff --git a/findutils-4.6.0-gnulib-makedev.patch b/findutils-4.6.0-gnulib-makedev.patch deleted file mode 100644 index 5ed4b48..0000000 --- a/findutils-4.6.0-gnulib-makedev.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 80628047a6cc83f82e0c410a82b8f7facd9d50f2 Mon Sep 17 00:00:00 2001 -From: Eric Blake -Date: Wed, 14 Sep 2016 19:21:42 -0500 -Subject: [PATCH] mountlist: include sysmacros.h for glibc - -On Fedora rawhide (glibc 2.25), './gnulib-tool --test mountlist' -reports: -../../gllib/mountlist.c: In function 'read_file_system_list': -../../gllib/mountlist.c:534:13: warning: '__makedev_from_sys_types' is deprecated: - In the GNU C Library, `makedev' is defined by . - For historical compatibility, it is currently defined by - as well, but we plan to remove this soon. - To use `makedev', include directly. - If you did not intend to use a system-defined macro `makedev', - you should #undef it after including . - [-Wdeprecated-declarations] - me->me_dev = makedev (devmaj, devmin); - ^~ -In file included from /usr/include/features.h:397:0, - from /usr/include/sys/types.h:25, - from ./sys/types.h:28, - from ../../gllib/mountlist.h:23, - from ../../gllib/mountlist.c:20: -/usr/include/sys/sysmacros.h:89:1: note: declared here - __SYSMACROS_DEFINE_MAKEDEV (__SYSMACROS_FST_IMPL_TEMPL) - ^ - -Fix it by including the right headers. We also need a fix to -autoconf's AC_HEADER_MAJOR, but that's a separate patch. - -* m4/mountlist.m4 (gl_PREREQ_MOUTLIST_EXTRA): Include -AC_HEADER_MAJOR. -* lib/mountlist.c (includes): Use correct headers. - -Signed-off-by: Eric Blake - -Upstream-commit: 4da63c5881f60f71999a943612da9112232b9161 -Signed-off-by: Kamil Dudka ---- - gl/lib/mountlist.c | 6 ++++++ - gl/m4/mountlist.m4 | 3 ++- - 2 files changed, 8 insertions(+), 1 deletion(-) - -diff --git a/gl/lib/mountlist.c b/gl/lib/mountlist.c -index c3d2852..0b6f92e 100644 ---- a/gl/lib/mountlist.c -+++ b/gl/lib/mountlist.c -@@ -37,6 +37,12 @@ - # include - #endif - -+#if MAJOR_IN_MKDEV -+# include -+#elif MAJOR_IN_SYSMACROS -+# include -+#endif -+ - #if defined MOUNTED_GETFSSTAT /* OSF_1 and Darwin1.3.x */ - # if HAVE_SYS_UCRED_H - # include /* needed on OSF V4.0 for definition of NGROUPS, -diff --git a/gl/m4/mountlist.m4 b/gl/m4/mountlist.m4 -index ec58dc8..82b2dcb 100644 ---- a/gl/m4/mountlist.m4 -+++ b/gl/m4/mountlist.m4 -@@ -1,4 +1,4 @@ --# serial 11 -+# serial 12 - dnl Copyright (C) 2002-2006, 2009-2015 Free Software Foundation, Inc. - dnl This file is free software; the Free Software Foundation - dnl gives unlimited permission to copy and/or distribute it, -@@ -15,5 +15,6 @@ AC_DEFUN([gl_PREREQ_MOUNTLIST_EXTRA], - [ - dnl Note gl_LIST_MOUNTED_FILE_SYSTEMS checks for mntent.h, not sys/mntent.h. - AC_CHECK_HEADERS([sys/mntent.h]) -+ AC_HEADER_MAJOR()dnl for use of makedev () - gl_FSTYPENAME - ]) --- -2.16.2 - diff --git a/findutils-4.6.0-internal-noop.patch b/findutils-4.6.0-internal-noop.patch deleted file mode 100644 index 1c8fdd9..0000000 --- a/findutils-4.6.0-internal-noop.patch +++ /dev/null @@ -1,195 +0,0 @@ -From d844b7bbf3952998a906f21ba432aa62a3b9c7c6 Mon Sep 17 00:00:00 2001 -From: Bernhard Voelker -Date: Tue, 14 Jun 2016 20:49:42 +0200 -Subject: [PATCH] Fix bug #48180: find: avoid segfault for internal '-noop' - option - -The pseudo-option '-noop' was never meant to be exposed to the user -interface. If specified by the user, find(1) segfaulted. -Bug introduced in commit FINDUTILS_4_3_0-1-12-g6b8a4db. - -* find/parser.c (struct parser_table): Rename the parser_name element of -the ARG_NOOP entry from 'noop' to '--noop', thus indicating its pure -internal character. -(found_parser): Return NULL when the user has passed the '---noop' option; -the caller does the error handling. -* find/testsuite/sv-48180-refuse-noop.sh: Add test. -* find/testsuite/Makefile.am (test_shell_progs): Reference the test. -* NEWS (Bug fixes): Document the fix. - -Reported by Tavian Barnes in - https://savannah.gnu.org/bugs/?48180 - -Upstream-commit: 595060f28eb5f658fa8d98970959c617fab0f078 -Signed-off-by: Kamil Dudka ---- - find/parser.c | 6 +- - find/testsuite/Makefile.am | 3 +- - find/testsuite/sv-48180-refuse-noop.sh | 117 +++++++++++++++++++++++++++++++++ - 3 files changed, 124 insertions(+), 2 deletions(-) - create mode 100644 find/testsuite/sv-48180-refuse-noop.sh - -diff --git a/find/parser.c b/find/parser.c -index 2d45349..697b2a2 100644 ---- a/find/parser.c -+++ b/find/parser.c -@@ -321,7 +321,8 @@ static struct parser_table const parse_table[] = - */ - {ARG_TEST, "false", parse_false, pred_false}, /* GNU */ - {ARG_TEST, "true", parse_true, pred_true }, /* GNU */ -- {ARG_NOOP, "noop", NULL, pred_true }, /* GNU, internal use only */ -+ /* Internal pseudo-option, therefore 3 minus: ---noop. */ -+ {ARG_NOOP, "--noop", NULL, pred_true }, /* GNU, internal use only */ - - /* Various other cases that don't fit neatly into our macro scheme. */ - {ARG_TEST, "help", parse_help, NULL}, /* GNU */ -@@ -596,6 +597,9 @@ found_parser (const char *original_arg, const struct parser_table *entry) - */ - if (entry->type != ARG_POSITIONAL_OPTION) - { -+ if (entry->type == ARG_NOOP) -+ return NULL; /* internal use only, trap -noop here. */ -+ - /* Something other than -follow/-daystart. - * If this is an option, check if it followed - * a non-option and if so, issue a warning. -diff --git a/find/testsuite/Makefile.am b/find/testsuite/Makefile.am -index ab5dbe8..1371c70 100644 ---- a/find/testsuite/Makefile.am -+++ b/find/testsuite/Makefile.am -@@ -259,7 +259,8 @@ test_escape_c.sh \ - test_inode.sh \ - sv-34079.sh \ - sv-34976-execdir-fd-leak.sh \ --sv-48030-exec-plus-bug.sh -+sv-48030-exec-plus-bug.sh \ -+sv-48180-refuse-noop.sh - - EXTRA_DIST = $(EXTRA_DIST_EXP) $(EXTRA_DIST_XO) $(EXTRA_DIST_GOLDEN) \ - $(test_shell_progs) binary_locations.sh checklists.py -diff --git a/find/testsuite/sv-48180-refuse-noop.sh b/find/testsuite/sv-48180-refuse-noop.sh -new file mode 100755 -index 0000000..974f0f0 ---- /dev/null -+++ b/find/testsuite/sv-48180-refuse-noop.sh -@@ -0,0 +1,117 @@ -+#! /bin/sh -+# Copyright (C) 2016 Free Software Foundation, Inc. -+# -+# This program is free software: you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation, either version 3 of the License, or -+# (at your option) any later version. -+# -+# This program is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License -+# along with this program. If not, see . -+# -+ -+# This test verifies that find refuses the internal -noop, ---noop option. -+# Between findutils-4.3.1 and 4.6, find dumped core ($? = 139). -+ -+testname="$(basename $0)" -+ -+. "${srcdir}"/binary_locations.sh -+ -+die() { -+ echo "$@" >&2 -+ exit 1 -+} -+ -+# This is used to simplify checking of the return value -+# which is useful when ensuring a command fails as desired. -+# I.e., just doing `command ... &&fail=1` will not catch -+# a segfault in command for example. With this helper you -+# instead check an explicit exit code like -+# returns_ 1 command ... || fail -+returns_ () { -+ # Disable tracing so it doesn't interfere with stderr of the wrapped command -+ { set +x; } 2>/dev/null -+ -+ local exp_exit="$1" -+ shift -+ "$@" -+ test $? -eq $exp_exit && ret_=0 || ret_=1 -+ -+ set -x -+ { return $ret_; } 2>/dev/null -+} -+ -+# Define the nicest compare available (borrowed from gnulib). -+if diff_out_=`exec 2>/dev/null; diff -u "$0" "$0" < /dev/null` \ -+ && diff -u Makefile "$0" 2>/dev/null | grep '^[+]#!' >/dev/null; then -+ # diff accepts the -u option and does not (like AIX 7 'diff') produce an -+ # extra space on column 1 of every content line. -+ if test -z "$diff_out_"; then -+ compare () { diff -u "$@"; } -+ else -+ compare () -+ { -+ if diff -u "$@" > diff.out; then -+ # No differences were found, but Solaris 'diff' produces output -+ # "No differences encountered". Hide this output. -+ rm -f diff.out -+ true -+ else -+ cat diff.out -+ rm -f diff.out -+ false -+ fi -+ } -+ fi -+elif diff_out_=`exec 2>/dev/null; diff -c "$0" "$0" < /dev/null`; then -+ if test -z "$diff_out_"; then -+ compare () { diff -c "$@"; } -+ else -+ compare () -+ { -+ if diff -c "$@" > diff.out; then -+ # No differences were found, but AIX and HP-UX 'diff' produce output -+ # "No differences encountered" or "There are no differences between the -+ # files.". Hide this output. -+ rm -f diff.out -+ true -+ else -+ cat diff.out -+ rm -f diff.out -+ false -+ fi -+ } -+ fi -+elif cmp -s /dev/null /dev/null 2>/dev/null; then -+ compare () { cmp -s "$@"; } -+else -+ compare () { cmp "$@"; } -+fi -+ -+set -x -+tmpdir="$(mktemp -d)" \ -+ && cd "$tmpdir" \ -+ || die "FAIL: failed to set up the test in ${tmpdir}" -+ -+fail=0 -+# Exercise both the previous name of the pseudo-option '-noop', -+# and the now renamed '---noop' option for both find executables. -+for exe in "${ftsfind}" "${oldfind}"; do -+ for opt in 'noop' '--noop'; do -+ out="${exe}${opt}.out" -+ err="${exe}${opt}.err" -+ returns_ 1 "$exe" "-${opt}" >"$out" 2> "$err" || fail=1 -+ compare /dev/null "$out" || fail=1 -+ grep "find: unknown predicate .-${opt}." "$err" \ -+ || { cat "$err"; fail=1; } -+ done -+done -+ -+cd .. -+rm -rf "$tmpdir" || exit 1 -+exit $fail --- -2.5.5 - diff --git a/findutils-4.6.0-leaf-opt.patch b/findutils-4.6.0-leaf-opt.patch index 7fb3035..c4e0f44 100644 --- a/findutils-4.6.0-leaf-opt.patch +++ b/findutils-4.6.0-leaf-opt.patch @@ -1,7 +1,46 @@ +From 547e7145f335dc07144f35eaacc520475068852e Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Fri, 30 Aug 2019 10:22:22 +0200 +Subject: [PATCH 1/3] Revert "fts: cleanup after FTS_NOATIME removal" + +This reverts commit dce8759f0f0236a860a3e68b63c5e99cc6f168f9. +--- + gl/lib/fts_.h | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/gl/lib/fts_.h b/gl/lib/fts_.h +index fb5558f..0122262 100644 +--- a/gl/lib/fts_.h ++++ b/gl/lib/fts_.h +@@ -149,14 +149,16 @@ typedef struct { + dirent.d_type data. */ + # define FTS_DEFER_STAT 0x0400 + ++/* 0x0800 unused, was non-working FTS_NOATIME */ ++ + /* Use this flag to disable stripping of trailing slashes + from input path names during fts_open initialization. */ +-# define FTS_VERBATIM 0x0800 ++# define FTS_VERBATIM 0x1000 + +-# define FTS_OPTIONMASK 0x0fff /* valid user option mask */ ++# define FTS_OPTIONMASK 0x1fff /* valid user option mask */ + +-# define FTS_NAMEONLY 0x1000 /* (private) child names only */ +-# define FTS_STOP 0x2000 /* (private) unrecoverable error */ ++# define FTS_NAMEONLY 0x2000 /* (private) child names only */ ++# define FTS_STOP 0x4000 /* (private) unrecoverable error */ + int fts_options; /* fts_open options, global flags */ + + /* Map a directory's device number to a boolean. The boolean is +-- +2.20.1 + + From 1328926a705fdb4728c1f255dd368de928736d39 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 25 Sep 2015 16:09:39 +0200 -Subject: [PATCH 1/2] fts: introduce the FTS_NOLEAF flag +Subject: [PATCH 2/3] fts: introduce the FTS_NOLEAF flag The flag is needed to implement the -noleaf option of find. * lib/fts.c (link_count_optimize_ok): Implement the FTS_NOLEAF flag. @@ -15,7 +54,7 @@ diff --git a/gl/lib/fts.c b/gl/lib/fts.c index d2d404f..808466f 100644 --- a/gl/lib/fts.c +++ b/gl/lib/fts.c -@@ -736,6 +736,10 @@ filesystem_type (FTSENT const *p) +@@ -713,6 +713,10 @@ filesystem_type (FTSENT const *p, int fd) struct dev_type *ent; struct statfs fs_buf; @@ -57,7 +96,7 @@ index 63d4b74..f1d519b 100644 From c186934e6e37ddadf7511abb9b1045192757618e Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 25 Sep 2015 19:13:15 +0200 -Subject: [PATCH 2/2] ftsfind: propagate the -noleaf option to FTS +Subject: [PATCH 3/3] ftsfind: propagate the -noleaf option to FTS * find/ftsfind.c (find): Propagate the -noleaf option to FTS. --- @@ -68,7 +107,7 @@ diff --git a/find/ftsfind.c b/find/ftsfind.c index 5159470..e34b672 100644 --- a/find/ftsfind.c +++ b/find/ftsfind.c -@@ -559,6 +559,9 @@ find (char *arg) +@@ -553,6 +553,9 @@ find (char *arg) if (options.stay_on_filesystem) ftsoptions |= FTS_XDEV; diff --git a/findutils-4.6.0-man-exec.patch b/findutils-4.6.0-man-exec.patch deleted file mode 100644 index 6a64568..0000000 --- a/findutils-4.6.0-man-exec.patch +++ /dev/null @@ -1,44 +0,0 @@ -From a8ff1e964b2b8cd0b60362c76bd92795cee6b3c3 Mon Sep 17 00:00:00 2001 -From: Kamil Dudka -Date: Sun, 17 Apr 2016 22:36:13 +0200 -Subject: [PATCH] doc: clarify exit status handling of -exec command {} + - -* find/find.1 (-exec): Explain how exit status is propagated if the --exec command {} + syntax is used. -(-execdir): Likewise. - -Reported at https://bugzilla.redhat.com/1325049 - -Upstream-commit: ae424b959c5e9bd23f9f686cb34653bc4cd1270e -Signed-off-by: Kamil Dudka ---- - find/find.1 | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/find/find.1 b/find/find.1 -index a36a0bc..c4aaf17 100644 ---- a/find/find.1 -+++ b/find/find.1 -@@ -1069,6 +1069,9 @@ command line is built in much the same way that - .B xargs - builds its command lines. Only one instance of `{}' is allowed within - the command. The command is executed in the starting directory. If -+any invocation returns a non-zero value as exit status, then -+.B find -+returns a non-zero exit status. If - .B find - encounters an error, this can sometimes cause an - immediate exit, so some pending commands may not be run -@@ -1104,6 +1107,9 @@ appropriately-named file in a directory in which you will run - The same applies to having entries in - .B $PATH - which are empty or which are not absolute directory names. If -+any invocation returns a non-zero value as exit status, then -+.B find -+returns a non-zero exit status. If - .B find - encounters an error, this can sometimes cause an - immediate exit, so some pending commands may not be run --- -2.5.5 - diff --git a/findutils-4.6.0-mbrtowc-tests.patch b/findutils-4.6.0-mbrtowc-tests.patch deleted file mode 100644 index a140654..0000000 --- a/findutils-4.6.0-mbrtowc-tests.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 06a46ba755195810f2aeda01b12d1ccfe7c2dcfd Mon Sep 17 00:00:00 2001 -From: Daiki Ueno -Date: Mon, 28 Dec 2015 06:27:42 +0900 -Subject: [PATCH] maint: fix operator precedence in mbrtowc test - -This is a fix for test breakage introduced by commit 45228d96; the -equality expression must be parenthesized when negated with '!', -otherwise we always get: - - test-mbrtowc.c:49: assertion 'ret == (size_t)(-2)' failed - -* m4/mbrtowc.m4 (gl_MBRTOWC_EMPTY_INPUT): Negate the entire expression. - -Upstream-commit: 1f63650823cebf52044df840c81062ccb52163a2 -Signed-off-by: Kamil Dudka ---- - gl/m4/mbrtowc.m4 | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/gl/m4/mbrtowc.m4 b/gl/m4/mbrtowc.m4 -index deb9f06..be2e9d6 100644 ---- a/gl/m4/mbrtowc.m4 -+++ b/gl/m4/mbrtowc.m4 -@@ -569,7 +569,7 @@ changequote([,])dnl - int - main (void) - { -- return ! mbrtowc (&wc, "", 0, &mbs) == (size_t) -2; -+ return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; - }]])], - [gl_cv_func_mbrtowc_empty_input=yes], - [gl_cv_func_mbrtowc_empty_input=no], --- -2.5.0 - diff --git a/findutils-4.6.0-test-lock.patch b/findutils-4.6.0-test-lock.patch index 780987e..b74c0dc 100644 --- a/findutils-4.6.0-test-lock.patch +++ b/findutils-4.6.0-test-lock.patch @@ -8,13 +8,13 @@ prevent writer starvation (and glibc does not implement it). Bug: http://www.mail-archive.com/bug-gnulib@gnu.org/msg33017.html --- - tests/test-lock.c | 2 +- + gnulib-tests/test-lock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/tests/test-lock.c b/tests/test-lock.c +diff --git a/gnulib-tests/test-lock.c b/gnulib-tests/test-lock.c index a992f64..fd9c014 100644 ---- a/tests/test-lock.c -+++ b/tests/test-lock.c +--- a/gnulib-tests/test-lock.c ++++ b/gnulib-tests/test-lock.c @@ -42,7 +42,7 @@ Uncomment some of these, to verify that all tests crash if no locking is enabled. */ diff --git a/findutils-4.6.0.tar.gz.sig b/findutils-4.6.0.tar.gz.sig deleted file mode 100644 index 16a395934e9949f697047a451973c6c5d3fe7496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmV;J0B8S+0F?s;09Jvm>!Dk6S!AhR(zXGDRmDynB{ZQw4MVEkkATq4<`x4>k^q_q|OiWH5Dt*gT4|LOBSZjkE` GR?lKA*iGU9 diff --git a/findutils-4.7.0.tar.xz.sig b/findutils-4.7.0.tar.xz.sig new file mode 100644 index 0000000..a6cfc51 --- /dev/null +++ b/findutils-4.7.0.tar.xz.sig @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- + +iQEzBAABCAAdFiEEpRidtpwRZNMwApNmRlAu95aRcZUFAl1oMFIACgkQRlAu95aR +cZW3SAgAkWnO8T7D2ljH3BU7h1VRdZyqCsyinorRt7/LdGVIGZ3pcc0pux+dhOxo +p1ZuwSBczXJ7+R9WCMTx6wlfn2wXerBGWjxVsU1J8LIhxou8su4Otp2NPSf1iRqe +TfJ8Fj2uJB3FzOPz93jq6MQhwn0DZyI5++TgxtuRIFEKHZh29Op3i3ceb+KUBknd +dIf/p7B25pc7OG8sn1ClaL6+fORvMcVg/VoVrD4KYXLkKgIHuwUutCGXlkaEx0tD +sZQ9Rzh1A4NF5gyHkeSWZFS8MHnOixOykPtxJWfrQRFkTLRNgICy+vBsKiL5tupG +EvOKD0mniJnHJW/jal/8hIz4zoq31A== +=YyBw +-----END PGP SIGNATURE----- diff --git a/findutils.spec b/findutils.spec index 8c8599b..70456e3 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,52 +1,26 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils -Version: 4.6.0 -Release: 24%{?dist} +Version: 4.7.0 +Release: 1%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ -Source0: ftp://ftp.gnu.org/pub/gnu/findutils/%{name}-%{version}.tar.gz - -# prevent mbrtowc tests from failing (#1294016) -Patch0: findutils-4.6.0-mbrtowc-tests.patch +Source0: https://ftp.gnu.org/pub/gnu/%{name}/%{name}-%{version}.tar.xz # do not build locate -Patch1: findutils-4.5.15-no-locate.patch +Patch1: findutils-4.5.15-no-locate.patch -# fix build failure with glibc-2.28 -# https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html -Patch2: findutils-4.6.0-gnulib-fflush.patch - -# add a new option -xautofs to find to not descend into directories on autofs -# file systems -Patch3: findutils-4.4.2-xautofs.patch +# add -xautofs option to not descend into directories on autofs file systems +Patch2: findutils-4.4.2-xautofs.patch # eliminate compile-time warnings -Patch4: findutils-4.5.13-warnings.patch - -# clarify exit status handling of -exec cmd {} + in find(1) man page (#1325049) -Patch5: findutils-4.6.0-man-exec.patch - -# make sure that find -exec + passes all arguments (upstream bug #48030) -Patch6: findutils-4.6.0-exec-args.patch - -# fix build failure with glibc-2.25+ -Patch7: findutils-4.6.0-gnulib-makedev.patch - -# avoid SIGSEGV in case the internal -noop option is used (#1346471) -Patch9: findutils-4.6.0-internal-noop.patch +Patch3: findutils-4.5.13-warnings.patch # test-lock: disable the rwlock test -Patch10: findutils-4.6.0-test-lock.patch - -# import gnulib's FTS module from upstream commit 281b825e (#1544429) -Patch11: findutils-4.6.0-fts-update.patch +Patch4: findutils-4.6.0-test-lock.patch # implement the -noleaf option of find (#1252549) -Patch12: findutils-4.6.0-leaf-opt.patch - -# fix programming mistakes detected by static analysis -Patch13: findutils-4.6.0-covscan.patch +Patch5: findutils-4.6.0-leaf-opt.patch Conflicts: filesystem < 3 Provides: /bin/find @@ -108,7 +82,7 @@ export CFLAGS="$RPM_OPT_FLAGS -D__SUPPORT_SNAN__" mkdir build cd build -ln -s ../configure +%global _configure ../configure %configure make %{?_smp_mflags} @@ -135,6 +109,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Fri Aug 30 2019 Kamil Dudka - 1:4.7.0-1 +- new upstream release + * Thu Jul 25 2019 Fedora Release Engineering - 1:4.6.0-24 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild diff --git a/sources b/sources index a38edfb..17f916f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -9936aa8009438ce185bea2694a997fc1 findutils-4.6.0.tar.gz +SHA512 (findutils-4.7.0.tar.xz) = 650a24507f8f4ebff83ad28dd27daa4785b4038dcaadc4fe00823b976e848527074cce3f9ec34065b7f037436d2aa6e9ec099bc05d7472c29864ac2c69de7f2e From 15101dc4a64e39b597ca63133e60d82e9be56617 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 28 Jan 2020 18:30:27 +0000 Subject: [PATCH 23/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 70456e3..44ff8b9 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.7.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ @@ -109,6 +109,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Tue Jan 28 2020 Fedora Release Engineering - 1:4.7.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + * Fri Aug 30 2019 Kamil Dudka - 1:4.7.0-1 - new upstream release From 9f5b30bd1100762a4d304850ac89898a4de1a425 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Tue, 11 Feb 2020 10:31:17 +0100 Subject: [PATCH 24/59] Resolves: #1799064 - make upstream test-suite work with root privileges --- findutils-4.7.0-root-tests.patch | 132 +++++++++++++++++++++++++++++++ findutils.spec | 8 +- 2 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 findutils-4.7.0-root-tests.patch diff --git a/findutils-4.7.0-root-tests.patch b/findutils-4.7.0-root-tests.patch new file mode 100644 index 0000000..5207ac4 --- /dev/null +++ b/findutils-4.7.0-root-tests.patch @@ -0,0 +1,132 @@ +From 498674f70816bb380ce11e62b620e4ece7763fd0 Mon Sep 17 00:00:00 2001 +From: Bernhard Voelker +Date: Sun, 9 Feb 2020 19:58:07 +0100 +Subject: [PATCH] tests: avoid FP when run as root + +Test 'sv-bug-54171' produced a false-positive error as 'find' would +not fail for an unreadable directory when run as root. +Migrate the test to the newer shell-based tests, and add the +'skip_if_root_' guard to avoid a false-positive. + +* find/testsuite/find.posix/sv-bug-54171.exp: Remove. +* find/testsuite/find.posix/sv-bug-54171.xo: Remove. +* find/testsuite/Makefile.am (EXTRA_DIST_XO, EXTRA_DIST_EXP): Remove the +above deleted test. +* tests/find/depth-unreadable-dir.sh: Add test. +* tests/local.mk (all_tests): Reference it. + +Test FP introduced in commit v4.6.0-178-gdf4610d0. +Fixes https://savannah.gnu.org/bugs/?57762 +and https://bugzilla.redhat.com/1799064 + +Upstream-commit: 2f9fff9e1f0c0b7a9034d7c46ca197ce693c4736 +Signed-off-by: Kamil Dudka +--- + find/testsuite/Makefile.am | 2 -- + find/testsuite/find.posix/sv-bug-54171.exp | 5 --- + find/testsuite/find.posix/sv-bug-54171.xo | 1 - + tests/find/depth-unreadable-dir.sh | 39 ++++++++++++++++++++++ + tests/local.mk | 1 + + 5 files changed, 40 insertions(+), 8 deletions(-) + delete mode 100644 find/testsuite/find.posix/sv-bug-54171.exp + delete mode 100644 find/testsuite/find.posix/sv-bug-54171.xo + create mode 100755 tests/find/depth-unreadable-dir.sh + +diff --git a/find/testsuite/Makefile.am b/find/testsuite/Makefile.am +index d252451a..77a2902c 100644 +--- a/find/testsuite/Makefile.am ++++ b/find/testsuite/Makefile.am +@@ -119,7 +119,6 @@ find.posix/prune-stat.xo \ + find.posix/sizetype.xo \ + find.posix/sv-bug-15235.xo \ + find.posix/sv-bug-19613.xo \ +-find.posix/sv-bug-54171.xo \ + find.posix/typesize.xo + + +@@ -246,7 +245,6 @@ find.posix/sv-bug-15235.exp \ + find.posix/sv-bug-19605.exp \ + find.posix/sv-bug-19613.exp \ + find.posix/sv-bug-19617.exp \ +-find.posix/sv-bug-54171.exp \ + find.posix/typesize.exp \ + find.posix/user-empty.exp \ + find.posix/user-missing.exp +diff --git a/find/testsuite/find.posix/sv-bug-54171.exp b/find/testsuite/find.posix/sv-bug-54171.exp +deleted file mode 100644 +index 8e5448fb..00000000 +--- a/find/testsuite/find.posix/sv-bug-54171.exp ++++ /dev/null +@@ -1,5 +0,0 @@ +-exec rm -rf tmp +-exec mkdir tmp tmp/dir +-exec chmod 0311 tmp/dir +-find_start f {tmp -depth -name dir } +-exec rm -rf tmp +diff --git a/find/testsuite/find.posix/sv-bug-54171.xo b/find/testsuite/find.posix/sv-bug-54171.xo +deleted file mode 100644 +index 2dc4706a..00000000 +--- a/find/testsuite/find.posix/sv-bug-54171.xo ++++ /dev/null +@@ -1 +0,0 @@ +-tmp/dir +diff --git a/tests/find/depth-unreadable-dir.sh b/tests/find/depth-unreadable-dir.sh +new file mode 100755 +index 00000000..86e2fd60 +--- /dev/null ++++ b/tests/find/depth-unreadable-dir.sh +@@ -0,0 +1,39 @@ ++#!/bin/sh ++# find -depth: ensure to output an unreadable directory. ++ ++# Copyright (C) 2020 Free Software Foundation, Inc. ++ ++# This program is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation, either version 3 of the License, or ++# (at your option) any later version. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++ ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++. "${srcdir=.}/tests/init.sh"; fu_path_prepend_ ++print_ver_ find ++ ++# Find run as root would not fail for an unreadable directory. ++skip_if_root_ ++ ++# Prepare an unreadable directory, and the expected stdout/stderr. ++mkdir tmp tmp/dir \ ++ && chmod 0311 tmp/dir \ ++ && echo 'tmp/dir' > exp \ ++ && echo "find: 'tmp/dir': Permission denied" > experr \ ++ || framework_failure_ ++ ++# Run FTS-based find with -depth; versions < 4.7.0 failed to output ++# an unreadable directory (see #54171). ++returns_ 1 find tmp -depth -name dir > out 2> err || fail=1 ++ ++compare exp out || fail=1 ++compare experr err || fail=1 ++ ++Exit $fail +diff --git a/tests/local.mk b/tests/local.mk +index dccc7342..986df55e 100644 +--- a/tests/local.mk ++++ b/tests/local.mk +@@ -106,6 +106,7 @@ check-root: + + all_tests = \ + tests/misc/help-version.sh \ ++ tests/find/depth-unreadable-dir.sh \ + tests/find/many-dir-entries-vs-OOM.sh \ + tests/find/name-lbracket-literal.sh \ + tests/find/printf_escapechars.sh \ +-- +2.21.1 + diff --git a/findutils.spec b/findutils.spec index 44ff8b9..fd70900 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.7.0 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ @@ -22,6 +22,9 @@ Patch4: findutils-4.6.0-test-lock.patch # implement the -noleaf option of find (#1252549) Patch5: findutils-4.6.0-leaf-opt.patch +# make upstream test-suite work with root privileges (#1799064) +Patch6: findutils-4.7.0-root-tests.patch + Conflicts: filesystem < 3 Provides: /bin/find Provides: bundled(gnulib) @@ -109,6 +112,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Tue Feb 11 2020 Kamil Dudka - 1:4.7.0-3 +- make upstream test-suite work with root privileges (#1799064) + * Tue Jan 28 2020 Fedora Release Engineering - 1:4.7.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild From d84db4f6726a6306fd66eafb1479ba3979271cd2 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Thu, 16 Apr 2020 18:35:05 +0200 Subject: [PATCH 25/59] Resolves: #1823247 simplify leaf optimization for XFS --- findutils-4.7.0-leaf-opt-xfs.patch | 164 +++++++++++++++++++++++++++++ findutils.spec | 8 +- 2 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 findutils-4.7.0-leaf-opt-xfs.patch diff --git a/findutils-4.7.0-leaf-opt-xfs.patch b/findutils-4.7.0-leaf-opt-xfs.patch new file mode 100644 index 0000000..ce8e93b --- /dev/null +++ b/findutils-4.7.0-leaf-opt-xfs.patch @@ -0,0 +1,164 @@ +From b9f9ed14bda93ecb407129b69e6476813c250046 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Wed, 15 Apr 2020 20:50:32 -0700 +Subject: [PATCH] fts: remove NOSTAT_LEAF_OPTIMIZATION +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It caused ‘find’ and ‘du’ to dump core, and it was useful +only for obsolescent Linux filesystems anyway. Problem reported in: +https://lists.gnu.org/r/bug-gnulib/2020-04/msg00068.html +Quite possibly there is still a serious underlying fts bug with +tight-loop-check and mutating file systems, but if so this patch +should cause the bug to be triggered less often. +* lib/fts.c (enum leaf_optimization): Remove +NOSTAT_LEAF_OPTIMIZATION, as it’s problematic. +(S_MAGIC_REISERFS, S_MAGIC_XFS): Remove; no longer needed. +(leaf_optimization): Remove special cases for ReiserFS and XFS. +(fts_read): Remove NOSTAT_LEAF_OPTIMIZATION code. +* lib/fts_.h (struct _ftsent.fts_n_dirs_remaining): +Remove. All uses removed. + +Upstream-commit: 47bf2cf3184027c1eb9c1dfeea5c5b8b2d69710d +Signed-off-by: Kamil Dudka +--- + gl/lib/fts.c | 56 ++++++++------------------------------------------- + gl/lib/fts_.h | 5 ----- + 2 files changed, 8 insertions(+), 53 deletions(-) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index 1093ce5..dfe3fef 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -445,7 +445,6 @@ fts_open (char * const *argv, + if ((parent = fts_alloc(sp, "", 0)) == NULL) + goto mem2; + parent->fts_level = FTS_ROOTPARENTLEVEL; +- parent->fts_n_dirs_remaining = -1; + } + + /* The classic fts implementation would call fts_stat with +@@ -634,9 +633,8 @@ fts_close (FTS *sp) + } + + /* Minimum link count of a traditional Unix directory. When leaf +- optimization is OK and MIN_DIR_NLINK <= st_nlink, then st_nlink is +- an upper bound on the number of subdirectories (counting "." and +- ".."). */ ++ optimization is OK and a directory's st_nlink == MIN_DIR_NLINK, ++ then the directory has no subdirectories. */ + enum { MIN_DIR_NLINK = 2 }; + + /* Whether leaf optimization is OK for a directory. */ +@@ -645,12 +643,8 @@ enum leaf_optimization + /* st_nlink is not reliable for this directory's subdirectories. */ + NO_LEAF_OPTIMIZATION, + +- /* Leaf optimization is OK, but is not useful for avoiding stat calls. */ +- OK_LEAF_OPTIMIZATION, +- +- /* Leaf optimization is not only OK: it is useful for avoiding +- stat calls, because dirent.d_type does not work. */ +- NOSTAT_LEAF_OPTIMIZATION ++ /* st_nlink == 2 means the directory lacks subdirectories. */ ++ OK_LEAF_OPTIMIZATION + }; + + #if (defined __linux__ || defined __ANDROID__) \ +@@ -663,9 +657,7 @@ enum leaf_optimization + # define S_MAGIC_CIFS 0xFF534D42 + # define S_MAGIC_NFS 0x6969 + # define S_MAGIC_PROC 0x9FA0 +-# define S_MAGIC_REISERFS 0x52654973 + # define S_MAGIC_TMPFS 0x1021994 +-# define S_MAGIC_XFS 0x58465342 + + # ifdef HAVE___FSWORD_T + typedef __fsword_t fsword; +@@ -786,23 +778,15 @@ dirent_inode_sort_may_be_useful (FTSENT const *p, int dir_fd) + } + + /* Given an FTS entry P for a directory with descriptor DIR_FD, +- return true if it is both useful and valid to apply leaf optimization. +- The optimization is useful only for file systems that lack usable +- dirent.d_type info. The optimization is valid if an st_nlink value +- of at least MIN_DIR_NLINK is an upper bound on the number of +- subdirectories of D, counting "." and ".." as subdirectories. ++ return whether it is valid to apply leaf optimization. ++ The optimization is valid if a directory's st_nlink value equal ++ to MIN_DIR_NLINK means the directory has no subdirectories. + DIR_FD is negative if unavailable. */ + static enum leaf_optimization + leaf_optimization (FTSENT const *p, int dir_fd) + { + switch (filesystem_type (p, dir_fd)) + { +- /* List here the file system types that may lack usable dirent.d_type +- info, yet for which the optimization does apply. */ +- case S_MAGIC_REISERFS: +- case S_MAGIC_XFS: /* XFS lacked it until 2013-08-22 commit. */ +- return NOSTAT_LEAF_OPTIMIZATION; +- + case 0: + /* Leaf optimization is unsafe if the file system type is unknown. */ + FALLTHROUGH; +@@ -1027,26 +1011,7 @@ check_for_dir: + if (p->fts_info == FTS_NSOK) + { + if (p->fts_statp->st_size == FTS_STAT_REQUIRED) +- { +- FTSENT *parent = p->fts_parent; +- if (parent->fts_n_dirs_remaining == 0 +- && ISSET(FTS_NOSTAT) +- && ISSET(FTS_PHYSICAL) +- && (leaf_optimization (parent, sp->fts_cwd_fd) +- == NOSTAT_LEAF_OPTIMIZATION)) +- { +- /* nothing more needed */ +- } +- else +- { +- p->fts_info = fts_stat(sp, p, false); +- if (S_ISDIR(p->fts_statp->st_mode) +- && p->fts_level != FTS_ROOTLEVEL +- && 0 < parent->fts_n_dirs_remaining +- && parent->fts_n_dirs_remaining != (nlink_t) -1) +- parent->fts_n_dirs_remaining--; +- } +- } ++ p->fts_info = fts_stat(sp, p, false); + else + fts_assert (p->fts_statp->st_size == FTS_NO_STAT_REQUIRED); + } +@@ -1830,11 +1795,6 @@ err: memset(sbp, 0, sizeof(struct stat)); + } + + if (S_ISDIR(sbp->st_mode)) { +- p->fts_n_dirs_remaining +- = ((sbp->st_nlink < MIN_DIR_NLINK +- || p->fts_level <= FTS_ROOTLEVEL) +- ? -1 +- : sbp->st_nlink - (ISSET (FTS_SEEDOT) ? 0 : MIN_DIR_NLINK)); + if (ISDOT(p->fts_name)) { + /* Command-line "." and ".." are real directories. */ + return (p->fts_level == FTS_ROOTLEVEL ? FTS_D : FTS_DOT); +diff --git a/gl/lib/fts_.h b/gl/lib/fts_.h +index d40a116..2e76cc4 100644 +--- a/gl/lib/fts_.h ++++ b/gl/lib/fts_.h +@@ -227,11 +227,6 @@ typedef struct _ftsent { + + size_t fts_namelen; /* strlen(fts_name) */ + +- /* If not (nlink_t) -1, an upper bound on the number of +- remaining subdirectories of interest. If this becomes +- zero, some work can be avoided. */ +- nlink_t fts_n_dirs_remaining; +- + # define FTS_D 1 /* preorder directory */ + # define FTS_DC 2 /* directory that causes cycles */ + # define FTS_DEFAULT 3 /* none of the above */ +-- +2.21.1 + diff --git a/findutils.spec b/findutils.spec index fd70900..0ff8c5e 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.7.0 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ @@ -25,6 +25,9 @@ Patch5: findutils-4.6.0-leaf-opt.patch # make upstream test-suite work with root privileges (#1799064) Patch6: findutils-4.7.0-root-tests.patch +# simplify leaf optimization for XFS (#1823247) +Patch7: findutils-4.7.0-leaf-opt-xfs.patch + Conflicts: filesystem < 3 Provides: /bin/find Provides: bundled(gnulib) @@ -112,6 +115,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Fri Apr 17 2020 Kamil Dudka - 1:4.7.0-4 +- simplify leaf optimization for XFS (#1823247) + * Tue Feb 11 2020 Kamil Dudka - 1:4.7.0-3 - make upstream test-suite work with root privileges (#1799064) From 024138372e0d5933fbb0171b11faaae34c26c23a Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Mon, 13 Jul 2020 19:30:56 +0000 Subject: [PATCH 26/59] Use make macros https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro --- findutils.spec | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/findutils.spec b/findutils.spec index 0ff8c5e..1fd91aa 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.7.0 -Release: 4%{?dist} +Release: 5%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ @@ -91,10 +91,10 @@ cd build %global _configure ../configure %configure -make %{?_smp_mflags} +%make_build %check -make %{?_smp_mflags} check -C build +%make_build check -C build %install %make_install -C build @@ -115,6 +115,10 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Mon Jul 13 2020 Tom Stellard - 1:4.7.0-5 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + * Fri Apr 17 2020 Kamil Dudka - 1:4.7.0-4 - simplify leaf optimization for XFS (#1823247) From a8811e0706a7e2e0272d1f2e54100b05367b4300 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Thu, 23 Jul 2020 17:16:03 +0200 Subject: [PATCH 27/59] make the output of %check human-readable again --- findutils.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 1fd91aa..af74482 100644 --- a/findutils.spec +++ b/findutils.spec @@ -94,7 +94,7 @@ cd build %make_build %check -%make_build check -C build +%make_build -C build -s check %install %make_install -C build From b0ca54752d3897f2b84bcf7ca2fba4c225afdc0a Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 24 Jul 2020 18:43:26 +0200 Subject: [PATCH 28/59] make the output of %check more verbose ... and colorful again in case a tty is attached --- findutils.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index af74482..033f4a0 100644 --- a/findutils.spec +++ b/findutils.spec @@ -94,7 +94,7 @@ cd build %make_build %check -%make_build -C build -s check +make %{?_smp_mflags} check -C build V=1 %install %make_install -C build From eebaae56fd6fa88f5e522daeec7e0fdd8581f348 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 24 Jul 2020 18:46:58 +0200 Subject: [PATCH 29/59] Related: #1294016 - do not compile with -D__SUPPORT_SNAN__ It seems to break test-isinf on ppc64le this time. --- findutils.spec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/findutils.spec b/findutils.spec index 033f4a0..1db548b 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.7.0 -Release: 5%{?dist} +Release: 6%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ @@ -83,9 +83,6 @@ git add --all . git commit -q -m "after invocation of autoreconf" %build -# prevent test-isinf from failing with gcc-5.3.1 on ppc64le (#1294016) -export CFLAGS="$RPM_OPT_FLAGS -D__SUPPORT_SNAN__" - mkdir build cd build %global _configure ../configure @@ -115,6 +112,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Fri Jul 24 2020 Kamil Dudka - 1:4.7.0-6 +- do not compile with -D__SUPPORT_SNAN__ (#1294016) + * Mon Jul 13 2020 Tom Stellard - 1:4.7.0-5 - Use make macros - https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro From 8de28b81abac3462697f96724158325a75c1d662 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 24 Jul 2020 18:51:12 +0200 Subject: [PATCH 30/59] Related: #1789115 - disable -flto on ppc64le to make test-float pass --- findutils.spec | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/findutils.spec b/findutils.spec index 1db548b..83c862d 100644 --- a/findutils.spec +++ b/findutils.spec @@ -83,6 +83,11 @@ git add --all . git commit -q -m "after invocation of autoreconf" %build +# disable -flto on ppc64le to make test-float pass (#1789115) +%ifarch ppc64le +export CFLAGS="$RPM_OPT_FLAGS -fno-lto" +%endif + mkdir build cd build %global _configure ../configure @@ -113,6 +118,7 @@ rm -f %{buildroot}%{_infodir}/dir %changelog * Fri Jul 24 2020 Kamil Dudka - 1:4.7.0-6 +- disable -flto on ppc64le to make test-float pass (#1789115) - do not compile with -D__SUPPORT_SNAN__ (#1294016) * Mon Jul 13 2020 Tom Stellard - 1:4.7.0-5 From 4194724211ce91dd85e2308a0bd91160d71495b0 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 24 Jul 2020 18:54:53 +0200 Subject: [PATCH 31/59] replace weirdo constant in gnulib tests ... causing test failures on armv7hl --- findutils.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/findutils.spec b/findutils.spec index 83c862d..bc9c56e 100644 --- a/findutils.spec +++ b/findutils.spec @@ -77,6 +77,10 @@ git commit -m "remove ignored files from git" # apply all patches %autopatch +# replace weirdo constant in gnulib tests causing test failures on armv7hl +sed -e 's/1729576/EPERM/' \ + -i gnulib-tests/test-{perror2,strerror_r}.c + # needed because of findutils-4.5.15-no-locate.patch autoreconf -fiv git add --all . From 253ce30f0955a2a05a156169bfd5b11e95fbccbc Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Mon, 27 Jul 2020 17:27:38 +0000 Subject: [PATCH 32/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index bc9c56e..ecd05c4 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.7.0 -Release: 6%{?dist} +Release: 7%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ @@ -121,6 +121,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Mon Jul 27 2020 Fedora Release Engineering - 1:4.7.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Fri Jul 24 2020 Kamil Dudka - 1:4.7.0-6 - disable -flto on ppc64le to make test-float pass (#1789115) - do not compile with -D__SUPPORT_SNAN__ (#1294016) From 7f5e33c6f3daf3083084a3cdc678ba8ae9b1f8d9 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Fri, 18 Dec 2020 22:38:22 +0000 Subject: [PATCH 33/59] Add BuildRequires: make https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot --- findutils.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/findutils.spec b/findutils.spec index ecd05c4..a79480a 100644 --- a/findutils.spec +++ b/findutils.spec @@ -39,6 +39,7 @@ BuildRequires: gcc BuildRequires: git BuildRequires: libselinux-devel BuildRequires: texinfo +BuildRequires: make %description The findutils package contains programs which will help you locate From 710681d5bd7fe55f680648d0550b7f3c23b92128 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Thu, 7 Jan 2021 09:01:02 +0100 Subject: [PATCH 34/59] findutils.spec: keep BR list alphabetically sorted --- findutils.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index a79480a..0ec165e 100644 --- a/findutils.spec +++ b/findutils.spec @@ -38,8 +38,8 @@ BuildRequires: gettext-devel BuildRequires: gcc BuildRequires: git BuildRequires: libselinux-devel -BuildRequires: texinfo BuildRequires: make +BuildRequires: texinfo %description The findutils package contains programs which will help you locate From 7e3826d7ba62b97930ad3a238f0e0c6a073b30d7 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Sat, 9 Jan 2021 20:32:24 +0100 Subject: [PATCH 35/59] new upstream release: findutils-4.8.0 --- findutils-4.5.15-no-locate.patch | 18 ++-- findutils-4.7.0-leaf-opt-xfs.patch | 164 ----------------------------- findutils-4.7.0-root-tests.patch | 132 ----------------------- findutils-4.7.0.tar.xz.sig | 11 -- findutils-4.8.0.tar.xz.sig | 11 ++ findutils.spec | 17 +-- sources | 2 +- 7 files changed, 26 insertions(+), 329 deletions(-) delete mode 100644 findutils-4.7.0-leaf-opt-xfs.patch delete mode 100644 findutils-4.7.0-root-tests.patch delete mode 100644 findutils-4.7.0.tar.xz.sig create mode 100644 findutils-4.8.0.tar.xz.sig diff --git a/findutils-4.5.15-no-locate.patch b/findutils-4.5.15-no-locate.patch index 659c7cf..7388730 100644 --- a/findutils-4.5.15-no-locate.patch +++ b/findutils-4.5.15-no-locate.patch @@ -24,10 +24,10 @@ index f6f7443..6fbf57b 100644 -CLEANFILES = find.txt find_mono.html findutils.texi_html_node.tar.gz dblocation.texi \ +CLEANFILES = find.txt find_mono.html findutils.texi_html_node.tar.gz \ find_mono.html findutils.texi_html_node.tar.gz \ - find-info.tar.gz find.texi find.texi.tar.gz \ + find-info.tar.gz find.texi.tar.gz \ find.txt tmp-doc-install find_mono.html.gz @@ -73,9 +71,6 @@ findutils.texi_html_node.tar.gz: find.html - tar zcf $@ $< + tar zcf $@ find.html -dblocation.texi: ../locate/dblocation.texi @@ -83,14 +83,14 @@ index c2714dd..01367a4 100644 --- a/doc/find.texi +++ b/doc/find.texi @@ -7,7 +7,6 @@ + @c @setchapternewpage odd @c %**end of header - @include version.texi -@include dblocation.texi @iftex @finalout -@@ -575,8 +574,7 @@ the databases are updated, and the directories for which they contain +@@ -572,8 +571,7 @@ the databases are updated, and the directories for which they contain entries. Here is how to select which file name databases @code{locate} @@ -100,7 +100,7 @@ index c2714dd..01367a4 100644 @table @code @item --database=@var{path} -@@ -2929,13 +2927,9 @@ thrashing the network. +@@ -2993,13 +2991,9 @@ thrashing the network. directories are indexed by each database file. The default location for the locate database depends on how findutils @@ -117,7 +117,7 @@ index c2714dd..01367a4 100644 @node Database Formats @section Database Formats -@@ -3460,8 +3454,7 @@ present. +@@ -3508,8 +3502,7 @@ present. @item --database=@var{path} @itemx -d @var{path} @@ -127,7 +127,7 @@ index c2714dd..01367a4 100644 name databases in @var{path}, which is a colon-separated list of database file names. You can also use the environment variable @code{LOCATE_PATH} to set the list of database files to search. The -@@ -3636,8 +3629,7 @@ The environment variable @code{PRUNEFS} also sets this value. Default +@@ -3684,8 +3677,7 @@ The environment variable @code{PRUNEFS} also sets this value. Default is @file{nfs NFS proc}. @item --output=@var{dbfile} @@ -137,7 +137,7 @@ index c2714dd..01367a4 100644 @item --localuser=@var{user} The user to search the non-network directories as, using @code{su}. -@@ -5631,7 +5623,7 @@ See the manual of the system call @code{dup2(2)}. +@@ -5709,7 +5701,7 @@ See the manual of the system call @code{dup2(2)}. @section Error Messages From @code{locate} @table @samp @@ -146,7 +146,7 @@ index c2714dd..01367a4 100644 The @code{locate} program relies on a database which is periodically built by the @code{updatedb} program. That hasn't happened in a long time. To fix this problem, run @code{updatedb} manually. This can -@@ -5639,7 +5631,7 @@ often happen on systems that are generally not left on, so the +@@ -5717,7 +5709,7 @@ often happen on systems that are generally not left on, so the periodic ``cron'' task which normally does this doesn't get a chance to run. diff --git a/findutils-4.7.0-leaf-opt-xfs.patch b/findutils-4.7.0-leaf-opt-xfs.patch deleted file mode 100644 index ce8e93b..0000000 --- a/findutils-4.7.0-leaf-opt-xfs.patch +++ /dev/null @@ -1,164 +0,0 @@ -From b9f9ed14bda93ecb407129b69e6476813c250046 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Wed, 15 Apr 2020 20:50:32 -0700 -Subject: [PATCH] fts: remove NOSTAT_LEAF_OPTIMIZATION -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -It caused ‘find’ and ‘du’ to dump core, and it was useful -only for obsolescent Linux filesystems anyway. Problem reported in: -https://lists.gnu.org/r/bug-gnulib/2020-04/msg00068.html -Quite possibly there is still a serious underlying fts bug with -tight-loop-check and mutating file systems, but if so this patch -should cause the bug to be triggered less often. -* lib/fts.c (enum leaf_optimization): Remove -NOSTAT_LEAF_OPTIMIZATION, as it’s problematic. -(S_MAGIC_REISERFS, S_MAGIC_XFS): Remove; no longer needed. -(leaf_optimization): Remove special cases for ReiserFS and XFS. -(fts_read): Remove NOSTAT_LEAF_OPTIMIZATION code. -* lib/fts_.h (struct _ftsent.fts_n_dirs_remaining): -Remove. All uses removed. - -Upstream-commit: 47bf2cf3184027c1eb9c1dfeea5c5b8b2d69710d -Signed-off-by: Kamil Dudka ---- - gl/lib/fts.c | 56 ++++++++------------------------------------------- - gl/lib/fts_.h | 5 ----- - 2 files changed, 8 insertions(+), 53 deletions(-) - -diff --git a/gl/lib/fts.c b/gl/lib/fts.c -index 1093ce5..dfe3fef 100644 ---- a/gl/lib/fts.c -+++ b/gl/lib/fts.c -@@ -445,7 +445,6 @@ fts_open (char * const *argv, - if ((parent = fts_alloc(sp, "", 0)) == NULL) - goto mem2; - parent->fts_level = FTS_ROOTPARENTLEVEL; -- parent->fts_n_dirs_remaining = -1; - } - - /* The classic fts implementation would call fts_stat with -@@ -634,9 +633,8 @@ fts_close (FTS *sp) - } - - /* Minimum link count of a traditional Unix directory. When leaf -- optimization is OK and MIN_DIR_NLINK <= st_nlink, then st_nlink is -- an upper bound on the number of subdirectories (counting "." and -- ".."). */ -+ optimization is OK and a directory's st_nlink == MIN_DIR_NLINK, -+ then the directory has no subdirectories. */ - enum { MIN_DIR_NLINK = 2 }; - - /* Whether leaf optimization is OK for a directory. */ -@@ -645,12 +643,8 @@ enum leaf_optimization - /* st_nlink is not reliable for this directory's subdirectories. */ - NO_LEAF_OPTIMIZATION, - -- /* Leaf optimization is OK, but is not useful for avoiding stat calls. */ -- OK_LEAF_OPTIMIZATION, -- -- /* Leaf optimization is not only OK: it is useful for avoiding -- stat calls, because dirent.d_type does not work. */ -- NOSTAT_LEAF_OPTIMIZATION -+ /* st_nlink == 2 means the directory lacks subdirectories. */ -+ OK_LEAF_OPTIMIZATION - }; - - #if (defined __linux__ || defined __ANDROID__) \ -@@ -663,9 +657,7 @@ enum leaf_optimization - # define S_MAGIC_CIFS 0xFF534D42 - # define S_MAGIC_NFS 0x6969 - # define S_MAGIC_PROC 0x9FA0 --# define S_MAGIC_REISERFS 0x52654973 - # define S_MAGIC_TMPFS 0x1021994 --# define S_MAGIC_XFS 0x58465342 - - # ifdef HAVE___FSWORD_T - typedef __fsword_t fsword; -@@ -786,23 +778,15 @@ dirent_inode_sort_may_be_useful (FTSENT const *p, int dir_fd) - } - - /* Given an FTS entry P for a directory with descriptor DIR_FD, -- return true if it is both useful and valid to apply leaf optimization. -- The optimization is useful only for file systems that lack usable -- dirent.d_type info. The optimization is valid if an st_nlink value -- of at least MIN_DIR_NLINK is an upper bound on the number of -- subdirectories of D, counting "." and ".." as subdirectories. -+ return whether it is valid to apply leaf optimization. -+ The optimization is valid if a directory's st_nlink value equal -+ to MIN_DIR_NLINK means the directory has no subdirectories. - DIR_FD is negative if unavailable. */ - static enum leaf_optimization - leaf_optimization (FTSENT const *p, int dir_fd) - { - switch (filesystem_type (p, dir_fd)) - { -- /* List here the file system types that may lack usable dirent.d_type -- info, yet for which the optimization does apply. */ -- case S_MAGIC_REISERFS: -- case S_MAGIC_XFS: /* XFS lacked it until 2013-08-22 commit. */ -- return NOSTAT_LEAF_OPTIMIZATION; -- - case 0: - /* Leaf optimization is unsafe if the file system type is unknown. */ - FALLTHROUGH; -@@ -1027,26 +1011,7 @@ check_for_dir: - if (p->fts_info == FTS_NSOK) - { - if (p->fts_statp->st_size == FTS_STAT_REQUIRED) -- { -- FTSENT *parent = p->fts_parent; -- if (parent->fts_n_dirs_remaining == 0 -- && ISSET(FTS_NOSTAT) -- && ISSET(FTS_PHYSICAL) -- && (leaf_optimization (parent, sp->fts_cwd_fd) -- == NOSTAT_LEAF_OPTIMIZATION)) -- { -- /* nothing more needed */ -- } -- else -- { -- p->fts_info = fts_stat(sp, p, false); -- if (S_ISDIR(p->fts_statp->st_mode) -- && p->fts_level != FTS_ROOTLEVEL -- && 0 < parent->fts_n_dirs_remaining -- && parent->fts_n_dirs_remaining != (nlink_t) -1) -- parent->fts_n_dirs_remaining--; -- } -- } -+ p->fts_info = fts_stat(sp, p, false); - else - fts_assert (p->fts_statp->st_size == FTS_NO_STAT_REQUIRED); - } -@@ -1830,11 +1795,6 @@ err: memset(sbp, 0, sizeof(struct stat)); - } - - if (S_ISDIR(sbp->st_mode)) { -- p->fts_n_dirs_remaining -- = ((sbp->st_nlink < MIN_DIR_NLINK -- || p->fts_level <= FTS_ROOTLEVEL) -- ? -1 -- : sbp->st_nlink - (ISSET (FTS_SEEDOT) ? 0 : MIN_DIR_NLINK)); - if (ISDOT(p->fts_name)) { - /* Command-line "." and ".." are real directories. */ - return (p->fts_level == FTS_ROOTLEVEL ? FTS_D : FTS_DOT); -diff --git a/gl/lib/fts_.h b/gl/lib/fts_.h -index d40a116..2e76cc4 100644 ---- a/gl/lib/fts_.h -+++ b/gl/lib/fts_.h -@@ -227,11 +227,6 @@ typedef struct _ftsent { - - size_t fts_namelen; /* strlen(fts_name) */ - -- /* If not (nlink_t) -1, an upper bound on the number of -- remaining subdirectories of interest. If this becomes -- zero, some work can be avoided. */ -- nlink_t fts_n_dirs_remaining; -- - # define FTS_D 1 /* preorder directory */ - # define FTS_DC 2 /* directory that causes cycles */ - # define FTS_DEFAULT 3 /* none of the above */ --- -2.21.1 - diff --git a/findutils-4.7.0-root-tests.patch b/findutils-4.7.0-root-tests.patch deleted file mode 100644 index 5207ac4..0000000 --- a/findutils-4.7.0-root-tests.patch +++ /dev/null @@ -1,132 +0,0 @@ -From 498674f70816bb380ce11e62b620e4ece7763fd0 Mon Sep 17 00:00:00 2001 -From: Bernhard Voelker -Date: Sun, 9 Feb 2020 19:58:07 +0100 -Subject: [PATCH] tests: avoid FP when run as root - -Test 'sv-bug-54171' produced a false-positive error as 'find' would -not fail for an unreadable directory when run as root. -Migrate the test to the newer shell-based tests, and add the -'skip_if_root_' guard to avoid a false-positive. - -* find/testsuite/find.posix/sv-bug-54171.exp: Remove. -* find/testsuite/find.posix/sv-bug-54171.xo: Remove. -* find/testsuite/Makefile.am (EXTRA_DIST_XO, EXTRA_DIST_EXP): Remove the -above deleted test. -* tests/find/depth-unreadable-dir.sh: Add test. -* tests/local.mk (all_tests): Reference it. - -Test FP introduced in commit v4.6.0-178-gdf4610d0. -Fixes https://savannah.gnu.org/bugs/?57762 -and https://bugzilla.redhat.com/1799064 - -Upstream-commit: 2f9fff9e1f0c0b7a9034d7c46ca197ce693c4736 -Signed-off-by: Kamil Dudka ---- - find/testsuite/Makefile.am | 2 -- - find/testsuite/find.posix/sv-bug-54171.exp | 5 --- - find/testsuite/find.posix/sv-bug-54171.xo | 1 - - tests/find/depth-unreadable-dir.sh | 39 ++++++++++++++++++++++ - tests/local.mk | 1 + - 5 files changed, 40 insertions(+), 8 deletions(-) - delete mode 100644 find/testsuite/find.posix/sv-bug-54171.exp - delete mode 100644 find/testsuite/find.posix/sv-bug-54171.xo - create mode 100755 tests/find/depth-unreadable-dir.sh - -diff --git a/find/testsuite/Makefile.am b/find/testsuite/Makefile.am -index d252451a..77a2902c 100644 ---- a/find/testsuite/Makefile.am -+++ b/find/testsuite/Makefile.am -@@ -119,7 +119,6 @@ find.posix/prune-stat.xo \ - find.posix/sizetype.xo \ - find.posix/sv-bug-15235.xo \ - find.posix/sv-bug-19613.xo \ --find.posix/sv-bug-54171.xo \ - find.posix/typesize.xo - - -@@ -246,7 +245,6 @@ find.posix/sv-bug-15235.exp \ - find.posix/sv-bug-19605.exp \ - find.posix/sv-bug-19613.exp \ - find.posix/sv-bug-19617.exp \ --find.posix/sv-bug-54171.exp \ - find.posix/typesize.exp \ - find.posix/user-empty.exp \ - find.posix/user-missing.exp -diff --git a/find/testsuite/find.posix/sv-bug-54171.exp b/find/testsuite/find.posix/sv-bug-54171.exp -deleted file mode 100644 -index 8e5448fb..00000000 ---- a/find/testsuite/find.posix/sv-bug-54171.exp -+++ /dev/null -@@ -1,5 +0,0 @@ --exec rm -rf tmp --exec mkdir tmp tmp/dir --exec chmod 0311 tmp/dir --find_start f {tmp -depth -name dir } --exec rm -rf tmp -diff --git a/find/testsuite/find.posix/sv-bug-54171.xo b/find/testsuite/find.posix/sv-bug-54171.xo -deleted file mode 100644 -index 2dc4706a..00000000 ---- a/find/testsuite/find.posix/sv-bug-54171.xo -+++ /dev/null -@@ -1 +0,0 @@ --tmp/dir -diff --git a/tests/find/depth-unreadable-dir.sh b/tests/find/depth-unreadable-dir.sh -new file mode 100755 -index 00000000..86e2fd60 ---- /dev/null -+++ b/tests/find/depth-unreadable-dir.sh -@@ -0,0 +1,39 @@ -+#!/bin/sh -+# find -depth: ensure to output an unreadable directory. -+ -+# Copyright (C) 2020 Free Software Foundation, Inc. -+ -+# This program is free software: you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation, either version 3 of the License, or -+# (at your option) any later version. -+ -+# This program is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+ -+# You should have received a copy of the GNU General Public License -+# along with this program. If not, see . -+ -+. "${srcdir=.}/tests/init.sh"; fu_path_prepend_ -+print_ver_ find -+ -+# Find run as root would not fail for an unreadable directory. -+skip_if_root_ -+ -+# Prepare an unreadable directory, and the expected stdout/stderr. -+mkdir tmp tmp/dir \ -+ && chmod 0311 tmp/dir \ -+ && echo 'tmp/dir' > exp \ -+ && echo "find: 'tmp/dir': Permission denied" > experr \ -+ || framework_failure_ -+ -+# Run FTS-based find with -depth; versions < 4.7.0 failed to output -+# an unreadable directory (see #54171). -+returns_ 1 find tmp -depth -name dir > out 2> err || fail=1 -+ -+compare exp out || fail=1 -+compare experr err || fail=1 -+ -+Exit $fail -diff --git a/tests/local.mk b/tests/local.mk -index dccc7342..986df55e 100644 ---- a/tests/local.mk -+++ b/tests/local.mk -@@ -106,6 +106,7 @@ check-root: - - all_tests = \ - tests/misc/help-version.sh \ -+ tests/find/depth-unreadable-dir.sh \ - tests/find/many-dir-entries-vs-OOM.sh \ - tests/find/name-lbracket-literal.sh \ - tests/find/printf_escapechars.sh \ --- -2.21.1 - diff --git a/findutils-4.7.0.tar.xz.sig b/findutils-4.7.0.tar.xz.sig deleted file mode 100644 index a6cfc51..0000000 --- a/findutils-4.7.0.tar.xz.sig +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQEzBAABCAAdFiEEpRidtpwRZNMwApNmRlAu95aRcZUFAl1oMFIACgkQRlAu95aR -cZW3SAgAkWnO8T7D2ljH3BU7h1VRdZyqCsyinorRt7/LdGVIGZ3pcc0pux+dhOxo -p1ZuwSBczXJ7+R9WCMTx6wlfn2wXerBGWjxVsU1J8LIhxou8su4Otp2NPSf1iRqe -TfJ8Fj2uJB3FzOPz93jq6MQhwn0DZyI5++TgxtuRIFEKHZh29Op3i3ceb+KUBknd -dIf/p7B25pc7OG8sn1ClaL6+fORvMcVg/VoVrD4KYXLkKgIHuwUutCGXlkaEx0tD -sZQ9Rzh1A4NF5gyHkeSWZFS8MHnOixOykPtxJWfrQRFkTLRNgICy+vBsKiL5tupG -EvOKD0mniJnHJW/jal/8hIz4zoq31A== -=YyBw ------END PGP SIGNATURE----- diff --git a/findutils-4.8.0.tar.xz.sig b/findutils-4.8.0.tar.xz.sig new file mode 100644 index 0000000..299114e --- /dev/null +++ b/findutils-4.8.0.tar.xz.sig @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- + +iQEzBAABCAAdFiEEpRidtpwRZNMwApNmRlAu95aRcZUFAl/53q8ACgkQRlAu95aR +cZVPlwgAshQRkDwagj5Zi1tFovX2GBbGfoTT9PddleIqGCieCy28GvVRkQNKf/q9 +8hjZ5L/dKUhMPQuoiB6zlL2iVzWz/8pHxBIbCWUqWEIyoubSzPI6oSfpKmzODLNk +2BBWcM+7uTPEK7Q/l2GCk7R1txzFM7izk5wwyVNtq0ARjU0njUm3w6wSgKUcXKpR +deV4psEwSkkUzcZ/IBXKZrW41Dtj4LaS0AsIqj4j1lUsDyYd/NC4Z66GAlg80PRK +7TOv8AHels0nXpgJtWiwcIz74MmCfbMq8IL1vzoTVEMMYItRkGyREoGTKnDecjCm +w9GvH4sTRO0h7JDWjKMDXD2ZxHxXmg== +=QPJY +-----END PGP SIGNATURE----- diff --git a/findutils.spec b/findutils.spec index 0ec165e..49cf8a9 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils -Version: 4.7.0 -Release: 7%{?dist} +Version: 4.8.0 +Release: 1%{?dist} Epoch: 1 License: GPLv3+ URL: http://www.gnu.org/software/findutils/ @@ -22,12 +22,6 @@ Patch4: findutils-4.6.0-test-lock.patch # implement the -noleaf option of find (#1252549) Patch5: findutils-4.6.0-leaf-opt.patch -# make upstream test-suite work with root privileges (#1799064) -Patch6: findutils-4.7.0-root-tests.patch - -# simplify leaf optimization for XFS (#1823247) -Patch7: findutils-4.7.0-leaf-opt-xfs.patch - Conflicts: filesystem < 3 Provides: /bin/find Provides: bundled(gnulib) @@ -78,10 +72,6 @@ git commit -m "remove ignored files from git" # apply all patches %autopatch -# replace weirdo constant in gnulib tests causing test failures on armv7hl -sed -e 's/1729576/EPERM/' \ - -i gnulib-tests/test-{perror2,strerror_r}.c - # needed because of findutils-4.5.15-no-locate.patch autoreconf -fiv git add --all . @@ -122,6 +112,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Sat Jan 09 2021 Kamil Dudka - 1:4.8.0-1 +- new upstream release + * Mon Jul 27 2020 Fedora Release Engineering - 1:4.7.0-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild diff --git a/sources b/sources index 17f916f..3457d71 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (findutils-4.7.0.tar.xz) = 650a24507f8f4ebff83ad28dd27daa4785b4038dcaadc4fe00823b976e848527074cce3f9ec34065b7f037436d2aa6e9ec099bc05d7472c29864ac2c69de7f2e +SHA512 (findutils-4.8.0.tar.xz) = eaa2da304dbeb2cd659b9210ac37da1bde4cd665c12a818eca98541c5ed5cba1050641fc0c39c0a446a5a7a87a8d654df0e0e6b0cee21752ea485188c9f1071e From 3ffc0bb1f85b4551302cba9a565f0627b1fa7800 Mon Sep 17 00:00:00 2001 From: Robert Scheck Date: Wed, 13 Jan 2021 01:44:43 +0000 Subject: [PATCH 36/59] Minor spec file optimizations --- findutils.spec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/findutils.spec b/findutils.spec index 49cf8a9..ec1d651 100644 --- a/findutils.spec +++ b/findutils.spec @@ -4,7 +4,7 @@ Version: 4.8.0 Release: 1%{?dist} Epoch: 1 License: GPLv3+ -URL: http://www.gnu.org/software/findutils/ +URL: https://www.gnu.org/software/findutils/ Source0: https://ftp.gnu.org/pub/gnu/%{name}/%{name}-%{version}.tar.xz # do not build locate @@ -101,7 +101,6 @@ rm -f %{buildroot}%{_infodir}/dir %find_lang %{name} %files -f %{name}.lang -%{!?_licensedir:%global license %%doc} %license COPYING %doc AUTHORS NEWS README THANKS TODO %{_bindir}/find From dbab70c6ed37220bcd1017246aca506e206713be Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 26 Jan 2021 05:32:53 +0000 Subject: [PATCH 37/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index ec1d651..75ea8b1 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.8.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv3+ URL: https://www.gnu.org/software/findutils/ @@ -111,6 +111,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Tue Jan 26 2021 Fedora Release Engineering - 1:4.8.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + * Sat Jan 09 2021 Kamil Dudka - 1:4.8.0-1 - new upstream release From d0d0ad8de2b067d0f086de7f405c262cb81158fe Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Tue, 25 May 2021 12:15:29 +0200 Subject: [PATCH 38/59] Rebuild with new binutils to fix ppc64le corruption (#1960730) --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 75ea8b1..7cf9d0f 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.8.0 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv3+ URL: https://www.gnu.org/software/findutils/ @@ -111,6 +111,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Tue May 25 2021 Florian Weimer - 1:4.8.0-3 +- Rebuild with new binutils to fix ppc64le corruption (#1960730) + * Tue Jan 26 2021 Fedora Release Engineering - 1:4.8.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild From ed583e8432b2fff1a6c472878e58ae4e862ff617 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 21 Jul 2021 22:58:14 +0000 Subject: [PATCH 39/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 7cf9d0f..462bd57 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.8.0 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 License: GPLv3+ URL: https://www.gnu.org/software/findutils/ @@ -111,6 +111,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Wed Jul 21 2021 Fedora Release Engineering - 1:4.8.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + * Tue May 25 2021 Florian Weimer - 1:4.8.0-3 - Rebuild with new binutils to fix ppc64le corruption (#1960730) From 946c1c166112cfe045304da609de571bcb4c2859 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 20 Jan 2022 03:00:33 +0000 Subject: [PATCH 40/59] - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 462bd57..412b95e 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.8.0 -Release: 4%{?dist} +Release: 5%{?dist} Epoch: 1 License: GPLv3+ URL: https://www.gnu.org/software/findutils/ @@ -111,6 +111,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Thu Jan 20 2022 Fedora Release Engineering - 1:4.8.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + * Wed Jul 21 2021 Fedora Release Engineering - 1:4.8.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild From 7222ae64937c7e34ebbe41e33b245f59310cfb2a Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Mon, 24 Jan 2022 10:33:46 +0100 Subject: [PATCH 41/59] make findutils build on 32bit x86 --- findutils-4.8.0-gnulib-time_t.patch | 514 ++++++++++++++++++++++++++++ findutils.spec | 8 +- 2 files changed, 521 insertions(+), 1 deletion(-) create mode 100644 findutils-4.8.0-gnulib-time_t.patch diff --git a/findutils-4.8.0-gnulib-time_t.patch b/findutils-4.8.0-gnulib-time_t.patch new file mode 100644 index 0000000..b15d6a1 --- /dev/null +++ b/findutils-4.8.0-gnulib-time_t.patch @@ -0,0 +1,514 @@ +From 67c20bbc7030d162132b7f7c7fbefbf95fc2bc76 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Thu, 1 Jul 2021 19:29:57 -0700 +Subject: [PATCH 1/5] year2038: support glibc 2.34 _TIME_BITS=64 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +In glibc 2.34 on Linux kernels where time_t is traditionally 32-bit, +defining _FILE_OFFSET_BITS=64 and _TIME_BITS=64 makes time_t 64-bit. +Apps must define both macros. Gnulib applications that use either +the largefile or the year2038 modules will want this behavior; +largefile because it deals with the off_t and ino_t components of +struct stat already, and so should also deal with time_t. +* m4/largefile.m4: Override two macros even in Autoconf 2.70 and later. +(_AC_SYS_LARGEFILE_MACRO_VALUE): #undef $1 before #defining it, in +case some other Gnulib macro has #defined it. +(AC_SYS_LARGEFILE): Use AS_IF and AS_CASE to propagate AC_REQUIREs. +Invoke gl_YEAR2038_BODY if we need to set _FILE_OFFSET_BITS=64. +* m4/year2038.m4 (gl_YEAR2038_TEST_INCLUDES): New macro. +(gl_YEAR2038_BODY): New macro, with gl_YEAR2038’s old body; this +macro is designed to be used directly instead of being +AC_REQUIREd. It takes an argument specifying whether 64-bit is +required. Set _TIME_BITS=64 if this makes a difference in time_t +width when setting _FILE_OFFSET_BITS=64. Do not warn about +32-bit time_t more than once. +* modules/largefile (Files): Add year2038.m4. +(Depends-on): Require gl_YEAR2038_EARLY. + +Upstream-commit: dc09dc0888485698a8e74205b9df43159aef0f61 +Signed-off-by: Kamil Dudka +--- + gl/m4/largefile.m4 | 28 +++++++++++---------- + gl/m4/year2038.m4 | 63 ++++++++++++++++++++++++++++++++++++---------- + 2 files changed, 65 insertions(+), 26 deletions(-) + +diff --git a/gl/m4/largefile.m4 b/gl/m4/largefile.m4 +index cadb16d..172a4da 100644 +--- a/gl/m4/largefile.m4 ++++ b/gl/m4/largefile.m4 +@@ -22,7 +22,8 @@ AC_DEFUN([gl_SET_LARGEFILE_SOURCE], + esac + ]) + +-# The following implementation works around a problem in autoconf <= 2.69; ++# Work around a problem in Autoconf through at least 2.71 on glibc 2.34+ ++# with _TIME_BITS. Also, work around a problem in autoconf <= 2.69: + # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, + # or configures them incorrectly in some cases. + m4_version_prereq([2.70], [], [ +@@ -40,6 +41,7 @@ m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]];[]dnl + ]) ++])# m4_version_prereq 2.70 + + + # _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, +@@ -54,7 +56,8 @@ m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE], + [AC_LANG_PROGRAM([$5], [$6])], + [$3=no; break]) + m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( +- [AC_LANG_PROGRAM([#define $1 $2 ++ [AC_LANG_PROGRAM([#undef $1 ++#define $1 $2 + $5], [$6])], + [$3=$2; break]) + $3=unknown +@@ -80,9 +83,8 @@ rm -rf conftest*[]dnl + AC_DEFUN([AC_SYS_LARGEFILE], + [AC_ARG_ENABLE(largefile, + [ --disable-largefile omit support for large files]) +-if test "$enable_largefile" != no; then +- +- AC_CACHE_CHECK([for special C compiler options needed for large files], ++AS_IF([test "$enable_largefile" != no], ++ [AC_CACHE_CHECK([for special C compiler options needed for large files], + ac_cv_sys_largefile_CC, + [ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then +@@ -107,15 +109,15 @@ if test "$enable_largefile" != no; then + ac_cv_sys_file_offset_bits, + [Number of bits in a file offset, on hosts where this is settable.], + [_AC_SYS_LARGEFILE_TEST_INCLUDES]) +- if test $ac_cv_sys_file_offset_bits = unknown; then +- _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, +- ac_cv_sys_large_files, +- [Define for large files, on AIX-style hosts.], +- [_AC_SYS_LARGEFILE_TEST_INCLUDES]) +- fi +-fi ++ AS_CASE([$ac_cv_sys_file_offset_bits], ++ [unknown], ++ [_AC_SYS_LARGEFILE_MACRO_VALUE([_LARGE_FILES], [1], ++ [ac_cv_sys_large_files], ++ [Define for large files, on AIX-style hosts.], ++ [_AC_SYS_LARGEFILE_TEST_INCLUDES])], ++ [64], ++ [gl_YEAR2038_BODY([false])])]) + ])# AC_SYS_LARGEFILE +-])# m4_version_prereq 2.70 + + # Enable large files on systems where this is implemented by Gnulib, not by the + # system headers. +diff --git a/gl/m4/year2038.m4 b/gl/m4/year2038.m4 +index 2534622..635ef12 100644 +--- a/gl/m4/year2038.m4 ++++ b/gl/m4/year2038.m4 +@@ -1,4 +1,4 @@ +-# year2038.m4 serial 3 ++# year2038.m4 serial 4 + dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, +@@ -18,13 +18,29 @@ AC_DEFUN([gl_YEAR2038_EARLY], + esac + ]) + +-AC_DEFUN([gl_YEAR2038], ++# gl_YEAR2038_TEST_INCLUDES ++# ------------------------- ++AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], ++[[ ++ #include ++ /* Check that time_t can represent 2**63 - 1 correctly. ++ We can't simply define LARGE_TIME_T to be 9223372036854775807, ++ since some C++ compilers masquerading as C compilers ++ incorrectly reject 9223372036854775807. */ ++ #define LARGE_TIME_T (((time_t) 1 << 31 << 31) - 1 + ((time_t) 1 << 31 << 31)) ++ int verify_time_t_range[(LARGE_TIME_T % 2147483629 == 721 ++ && LARGE_TIME_T % 2147483647 == 1) ++ ? 1 : -1]; ++]]) ++ ++# gl_YEAR2038_BODY(REQUIRE-64-BIT) ++---------------------------------- ++AC_DEFUN([gl_YEAR2038_BODY], + [ + dnl On many systems, time_t is already a 64-bit type. + dnl On those systems where time_t is still 32-bit, it requires kernel +- dnl and libc support to make it 64-bit. For glibc on Linux/x86, this +- dnl is work in progress; see +- dnl . ++ dnl and libc support to make it 64-bit. For glibc 2.34 and later on Linux, ++ dnl defining _TIME_BITS=64 and _FILE_OFFSET_BITS=64 is needed on x86 and ARM. + dnl + dnl On native Windows, the system include files define types __time32_t + dnl and __time64_t. By default, time_t is an alias of +@@ -36,13 +52,28 @@ AC_DEFUN([gl_YEAR2038], + dnl __time32_t. + AC_CACHE_CHECK([for 64-bit time_t], [gl_cv_type_time_t_64], + [AC_COMPILE_IFELSE( +- [AC_LANG_PROGRAM( +- [[#include +- int verify_time_t_size[sizeof (time_t) >= 8 ? 1 : -1]; +- ]], +- [[]])], ++ [AC_LANG_SOURCE([gl_YEAR2038_TEST_INCLUDES])], + [gl_cv_type_time_t_64=yes], [gl_cv_type_time_t_64=no]) + ]) ++ if test "$gl_cv_type_time_t_64" = no; then ++ AC_CACHE_CHECK([for 64-bit time_t with _TIME_BITS=64], ++ [gl_cv_type_time_t_bits_macro], ++ [AC_COMPILE_IFELSE( ++ [AC_LANG_SOURCE([[#define _TIME_BITS 64 ++ #define _FILE_OFFSET_BITS 64 ++ ]gl_YEAR2038_TEST_INCLUDES])], ++ [gl_cv_type_time_t_bits_macro=yes], ++ [gl_cv_type_time_t_bits_macro=no]) ++ ]) ++ if test "$gl_cv_type_time_t_bits_macro" = yes; then ++ AC_DEFINE([_TIME_BITS], [64], ++ [Number of bits in a timestamp, on hosts where this is settable.]) ++ dnl AC_SYS_LARGFILE also defines this; it's OK if we do too. ++ AC_DEFINE([_FILE_OFFSET_BITS], [64], ++ [Number of bits in a file offset, on hosts where this is settable.]) ++ gl_cv_type_time_t_64=yes ++ fi ++ fi + if test $gl_cv_type_time_t_64 = no; then + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( +@@ -53,18 +84,24 @@ AC_DEFUN([gl_YEAR2038], + #endif + ]])], + [AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type. Remove _USE_32BIT_TIME_T from the compiler flags.])], +- [# If TIME_T_32_BIT_OK is "no" (the default) and not cross-compiling ++ [# If not cross-compiling and $1 says we should check, + # and 'touch' works with a large timestamp, then evidently 64-bit time_t + # is desired and supported, so fail and ask the builder to fix the + # problem. Otherwise, just warn the builder. +- if test "${TIME_T_32_BIT_OK-no}" = no \ ++ if $1 \ + && test $cross_compiling = no \ + && TZ=UTC0 touch -t 210602070628.16 conftest.time 2>/dev/null; then + rm -f conftest.time + AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type, which your system appears to support. You might try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. To build with a 32-bit time_t anyway (not recommended), configure with 'TIME_T_32_BIT_OK=yes'.]) +- else ++ elif test "$gl_warned_about_64_bit_time_t" != yes; then + AC_MSG_WARN([This package requires a 64-bit 'time_t' type if there is any way to access timestamps outside the year range 1901-2038 on your platform. Perhaps you should configure with 'CPPFLAGS="-m64" LDFLAGS="-m64"'?]) ++ gl_warned_about_64_bit_time_t=yes + fi + ]) + fi + ]) ++ ++AC_DEFUN([gl_YEAR2038], ++[ ++ gl_YEAR2038_BODY([test "${TIME_T_32_BIT_OK-no}" = no]) ++]) +-- +2.31.1 + + +From 6df0907c00ee44cb36a7caa118d1a6492e0056e6 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Tue, 6 Jul 2021 15:21:44 -0700 +Subject: [PATCH 2/5] year2038: Add --disable-year2038 option +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Also, document this stuff better. Suggested by Bruno Haible in: +https://lists.gnu.org/r/bug-gnulib/2021-07/msg00011.html +* m4/year2038.m4 (gl_YEAR2038_BODY): Support ‘./configure +--disable-year2038’ to disable 64-bit time_t when that is not the +default. Arg is now either empty or nonempty (not a shell +command) and is evaluated at m4 expansion time instead of at +runtime; all callers changed. + +Upstream-commit: 7dd2562058aa4cc3a1a4714b6248193fd5444491 +Signed-off-by: Kamil Dudka +--- + gl/m4/year2038.m4 | 23 ++++++++++++++--------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +diff --git a/gl/m4/year2038.m4 b/gl/m4/year2038.m4 +index 635ef12..ad7f303 100644 +--- a/gl/m4/year2038.m4 ++++ b/gl/m4/year2038.m4 +@@ -1,4 +1,4 @@ +-# year2038.m4 serial 4 ++# year2038.m4 serial 5 + dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, +@@ -37,6 +37,10 @@ AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], + ---------------------------------- + AC_DEFUN([gl_YEAR2038_BODY], + [ ++ AC_ARG_ENABLE([year2038], ++ [ --disable-year2038 omit support for timestamps past the year 2038]) ++ AS_IF([test "$enable_year2038" != no], ++ [ + dnl On many systems, time_t is already a 64-bit type. + dnl On those systems where time_t is still 32-bit, it requires kernel + dnl and libc support to make it 64-bit. For glibc 2.34 and later on Linux, +@@ -88,20 +92,21 @@ AC_DEFUN([gl_YEAR2038_BODY], + # and 'touch' works with a large timestamp, then evidently 64-bit time_t + # is desired and supported, so fail and ask the builder to fix the + # problem. Otherwise, just warn the builder. +- if $1 \ +- && test $cross_compiling = no \ +- && TZ=UTC0 touch -t 210602070628.16 conftest.time 2>/dev/null; then +- rm -f conftest.time +- AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type, which your system appears to support. You might try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. To build with a 32-bit time_t anyway (not recommended), configure with 'TIME_T_32_BIT_OK=yes'.]) +- elif test "$gl_warned_about_64_bit_time_t" != yes; then ++ m4_ifval([$1], ++ [if test $cross_compiling = no \ ++ && TZ=UTC0 touch -t 210602070628.16 conftest.time 2>/dev/null; then ++ rm -f conftest.time ++ AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type, which your system appears to support. You might try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. To build with a 32-bit time_t anyway (not recommended), configure with '--disable-year2038'.]) ++ fi]) ++ if test "$gl_warned_about_64_bit_time_t" != yes; then + AC_MSG_WARN([This package requires a 64-bit 'time_t' type if there is any way to access timestamps outside the year range 1901-2038 on your platform. Perhaps you should configure with 'CPPFLAGS="-m64" LDFLAGS="-m64"'?]) + gl_warned_about_64_bit_time_t=yes + fi + ]) +- fi ++ fi]) + ]) + + AC_DEFUN([gl_YEAR2038], + [ +- gl_YEAR2038_BODY([test "${TIME_T_32_BIT_OK-no}" = no]) ++ gl_YEAR2038_BODY([require-64-bit]) + ]) +-- +2.31.1 + + +From 49816ad1b32b1f210841ac44cb64fa68da56806f Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Mon, 2 Aug 2021 09:30:50 -0700 +Subject: [PATCH 3/5] year2038: port to unusual time_t platforms +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +* m4/year2038.m4 (gl_YEAR2038_TEST_INCLUDES): Check that time_t +can go to 2**32 - 1, not to 2**63 - 1, as the former is enough to +be year 2038 safe. Unsigned 32-bit time_t (AmigaOS) and signed +40-bit time_t (Unisys ClearPath) have occurred in the wild, and +even if Gnulib code is rarely or never ported to them there’s no +need to exclude them merely because of year 2038 issues. +(gl_YEAR2038_BODY): Adjust messages to match. Use 2**32 - 1, +not 2**32, as the test timestamp, to allow unsigned 32-bit time_t. + +Upstream-commit: 784f55e5c59abde4eabf4e08169d1c50363280b4 +Signed-off-by: Kamil Dudka +--- + gl/m4/year2038.m4 | 61 ++++++++++++++++++++++++++++------------------- + 1 file changed, 36 insertions(+), 25 deletions(-) + +diff --git a/gl/m4/year2038.m4 b/gl/m4/year2038.m4 +index ad7f303..7ae004e 100644 +--- a/gl/m4/year2038.m4 ++++ b/gl/m4/year2038.m4 +@@ -1,11 +1,11 @@ +-# year2038.m4 serial 5 ++# year2038.m4 serial 6 + dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, + dnl with or without modifications, as long as this notice is preserved. + +-dnl Attempt to ensure that 'time_t' is a 64-bit type +-dnl and that the functions time(), stat(), etc. return 64-bit times. ++dnl Attempt to ensure that 'time_t' can go past the year 2038 and that ++dnl the functions 'time', 'stat', etc. work with post-2038 timestamps. + + AC_DEFUN([gl_YEAR2038_EARLY], + [ +@@ -23,18 +23,15 @@ AC_DEFUN([gl_YEAR2038_EARLY], + AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], + [[ + #include +- /* Check that time_t can represent 2**63 - 1 correctly. +- We can't simply define LARGE_TIME_T to be 9223372036854775807, +- since some C++ compilers masquerading as C compilers +- incorrectly reject 9223372036854775807. */ +- #define LARGE_TIME_T (((time_t) 1 << 31 << 31) - 1 + ((time_t) 1 << 31 << 31)) +- int verify_time_t_range[(LARGE_TIME_T % 2147483629 == 721 +- && LARGE_TIME_T % 2147483647 == 1) ++ /* Check that time_t can represent 2**32 - 1 correctly. */ ++ #define LARGE_TIME_T (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)) ++ int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 ++ && LARGE_TIME_T % 65537 == 0) + ? 1 : -1]; + ]]) + +-# gl_YEAR2038_BODY(REQUIRE-64-BIT) +----------------------------------- ++# gl_YEAR2038_BODY(REQUIRE-YEAR2038-SAFE) ++----------------------------------------- + AC_DEFUN([gl_YEAR2038_BODY], + [ + AC_ARG_ENABLE([year2038], +@@ -54,12 +51,12 @@ AC_DEFUN([gl_YEAR2038_BODY], + dnl alias of __time64_t. + dnl And when compiling with -D_USE_32BIT_TIME_T, time_t is an alias of + dnl __time32_t. +- AC_CACHE_CHECK([for 64-bit time_t], [gl_cv_type_time_t_64], ++ AC_CACHE_CHECK([for time_t past the year 2038], [gl_cv_type_time_t_y2038], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([gl_YEAR2038_TEST_INCLUDES])], +- [gl_cv_type_time_t_64=yes], [gl_cv_type_time_t_64=no]) ++ [gl_cv_type_time_t_y2038=yes], [gl_cv_type_time_t_y2038=no]) + ]) +- if test "$gl_cv_type_time_t_64" = no; then ++ if test "$gl_cv_type_time_t_y2038" = no; then + AC_CACHE_CHECK([for 64-bit time_t with _TIME_BITS=64], + [gl_cv_type_time_t_bits_macro], + [AC_COMPILE_IFELSE( +@@ -75,10 +72,10 @@ AC_DEFUN([gl_YEAR2038_BODY], + dnl AC_SYS_LARGFILE also defines this; it's OK if we do too. + AC_DEFINE([_FILE_OFFSET_BITS], [64], + [Number of bits in a file offset, on hosts where this is settable.]) +- gl_cv_type_time_t_64=yes ++ gl_cv_type_time_t_y2038=yes + fi + fi +- if test $gl_cv_type_time_t_64 = no; then ++ if test $gl_cv_type_time_t_y2038 = no; then + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifdef _USE_32BIT_TIME_T +@@ -87,20 +84,34 @@ AC_DEFUN([gl_YEAR2038_BODY], + error fail + #endif + ]])], +- [AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type. Remove _USE_32BIT_TIME_T from the compiler flags.])], ++ [AC_MSG_FAILURE( ++ [The 'time_t' type stops working after January 2038. ++ Remove _USE_32BIT_TIME_T from the compiler flags.])], + [# If not cross-compiling and $1 says we should check, +- # and 'touch' works with a large timestamp, then evidently 64-bit time_t ++ # and 'touch' works with a large timestamp, then evidently wider time_t + # is desired and supported, so fail and ask the builder to fix the + # problem. Otherwise, just warn the builder. + m4_ifval([$1], + [if test $cross_compiling = no \ +- && TZ=UTC0 touch -t 210602070628.16 conftest.time 2>/dev/null; then ++ && TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null; then ++ case `TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null` in ++ *'Feb 7 2106'* | *'Feb 7 17:10'*) ++ AC_MSG_FAILURE( ++ [The 'time_t' type stops working after January 2038, ++ and your system appears to support a wider 'time_t'. ++ Try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. ++ To build with a 32-bit time_t anyway (not recommended), ++ configure with '--disable-year2038'.]);; ++ esac + rm -f conftest.time +- AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type, which your system appears to support. You might try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. To build with a 32-bit time_t anyway (not recommended), configure with '--disable-year2038'.]) + fi]) +- if test "$gl_warned_about_64_bit_time_t" != yes; then +- AC_MSG_WARN([This package requires a 64-bit 'time_t' type if there is any way to access timestamps outside the year range 1901-2038 on your platform. Perhaps you should configure with 'CPPFLAGS="-m64" LDFLAGS="-m64"'?]) +- gl_warned_about_64_bit_time_t=yes ++ if test "$gl_warned_about_y2038" != yes; then ++ AC_MSG_WARN( ++ [The 'time_t' type stops working after January 2038, ++ and this package needs a wider 'time_t' type ++ if there is any way to access timestamps after that. ++ Configure with 'CPPFLAGS="-m64" LDFLAGS="-m64"' perhaps?]) ++ gl_warned_about_y2038=yes + fi + ]) + fi]) +@@ -108,5 +119,5 @@ AC_DEFUN([gl_YEAR2038_BODY], + + AC_DEFUN([gl_YEAR2038], + [ +- gl_YEAR2038_BODY([require-64-bit]) ++ gl_YEAR2038_BODY([require-year2038-safe]) + ]) +-- +2.31.1 + + +From cd11a3e21d4aba6a8655a25bc0299cf4a72f58f5 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Mon, 2 Aug 2021 09:44:59 -0700 +Subject: [PATCH 4/5] year2038: work even if time_t is narrower than int + +Upstream-commit: 7c6538cf0584a5ad3e2e46f64b1936eea4cddecc +Signed-off-by: Kamil Dudka +--- + gl/m4/year2038.m4 | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/gl/m4/year2038.m4 b/gl/m4/year2038.m4 +index 7ae004e..f53b03f 100644 +--- a/gl/m4/year2038.m4 ++++ b/gl/m4/year2038.m4 +@@ -24,7 +24,8 @@ AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], + [[ + #include + /* Check that time_t can represent 2**32 - 1 correctly. */ +- #define LARGE_TIME_T (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)) ++ #define LARGE_TIME_T \\ ++ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) + int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 + && LARGE_TIME_T % 65537 == 0) + ? 1 : -1]; +-- +2.31.1 + + +From 1e2e81f10204a4d176c8ec14bd95b9aa43d9012c Mon Sep 17 00:00:00 2001 +From: Bruno Haible +Date: Sat, 7 Aug 2021 16:03:22 +0200 +Subject: [PATCH 5/5] year2038: Fix recommendation regarding -m64 flag. + +* m4/year2038.m4 (gl_YEAR2038_BODY): Recommend to put option --m64 in +CC, not in CPPFLAGS and LDFLAGS. + +Upstream-commit: edb4fbdc959660ef753bdc684aaf14b555871a2a +Signed-off-by: Kamil Dudka +--- + gl/m4/year2038.m4 | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/gl/m4/year2038.m4 b/gl/m4/year2038.m4 +index f53b03f..da0f8d7 100644 +--- a/gl/m4/year2038.m4 ++++ b/gl/m4/year2038.m4 +@@ -1,4 +1,4 @@ +-# year2038.m4 serial 6 ++# year2038.m4 serial 7 + dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, +@@ -100,7 +100,7 @@ AC_DEFUN([gl_YEAR2038_BODY], + AC_MSG_FAILURE( + [The 'time_t' type stops working after January 2038, + and your system appears to support a wider 'time_t'. +- Try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. ++ Try configuring with 'CC="${CC} -m64"'. + To build with a 32-bit time_t anyway (not recommended), + configure with '--disable-year2038'.]);; + esac +@@ -111,7 +111,7 @@ AC_DEFUN([gl_YEAR2038_BODY], + [The 'time_t' type stops working after January 2038, + and this package needs a wider 'time_t' type + if there is any way to access timestamps after that. +- Configure with 'CPPFLAGS="-m64" LDFLAGS="-m64"' perhaps?]) ++ Configure with 'CC="${CC} -m64"' perhaps?]) + gl_warned_about_y2038=yes + fi + ]) +-- +2.31.1 + diff --git a/findutils.spec b/findutils.spec index 412b95e..19722ea 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,12 +1,15 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.8.0 -Release: 5%{?dist} +Release: 6%{?dist} Epoch: 1 License: GPLv3+ URL: https://www.gnu.org/software/findutils/ Source0: https://ftp.gnu.org/pub/gnu/%{name}/%{name}-%{version}.tar.xz +# make findutils build on 32bit x86 +Patch0: findutils-4.8.0-gnulib-time_t.patch + # do not build locate Patch1: findutils-4.5.15-no-locate.patch @@ -111,6 +114,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Mon Jan 24 2022 Kamil Dudka - 1:4.8.0-6 +- make findutils build on 32bit x86 + * Thu Jan 20 2022 Fedora Release Engineering - 1:4.8.0-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From 3dff09407fd99bbf029da49204f6ae8521283484 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Wed, 2 Feb 2022 09:53:24 +0100 Subject: [PATCH 42/59] new upstream release: findutils-4.9.0 --- findutils-4.4.2-xautofs.patch | 34 +- findutils-4.5.13-warnings.patch | 2 +- findutils-4.5.15-no-locate.patch | 20 +- findutils-4.6.0-leaf-opt.patch | 4 +- findutils-4.8.0-gnulib-time_t.patch | 514 ---------------------------- findutils-4.8.0.tar.xz.sig | 11 - findutils-4.9.0.tar.xz.sig | 11 + findutils.spec | 10 +- sources | 2 +- 9 files changed, 47 insertions(+), 561 deletions(-) delete mode 100644 findutils-4.8.0-gnulib-time_t.patch delete mode 100644 findutils-4.8.0.tar.xz.sig create mode 100644 findutils-4.9.0.tar.xz.sig diff --git a/findutils-4.4.2-xautofs.patch b/findutils-4.4.2-xautofs.patch index d8ebd51..c1683dc 100644 --- a/findutils-4.4.2-xautofs.patch +++ b/findutils-4.4.2-xautofs.patch @@ -16,7 +16,7 @@ diff --git a/doc/find.texi b/doc/find.texi index c584298..9731b71 100644 --- a/doc/find.texi +++ b/doc/find.texi -@@ -1474,6 +1474,10 @@ them. +@@ -1606,6 +1606,10 @@ them. There are two ways to avoid searching certain filesystems. One way is to tell @code{find} to only search one filesystem: @@ -31,7 +31,7 @@ diff --git a/find/defs.h b/find/defs.h index 11d1d00..f95ce72 100644 --- a/find/defs.h +++ b/find/defs.h -@@ -574,6 +574,9 @@ struct options +@@ -562,6 +562,9 @@ struct options /* If true, don't cross filesystem boundaries. */ bool stay_on_filesystem; @@ -45,7 +45,7 @@ diff --git a/find/find.1 b/find/find.1 index e851f82..a4799ff 100644 --- a/find/find.1 +++ b/find/find.1 -@@ -567,6 +567,9 @@ to stat them; this gives a significant increase in search speed. +@@ -638,6 +638,9 @@ to stat them; this gives a significant increase in search speed. .IP "\-version, \-\-version" Print the \fBfind\fR version number and exit. @@ -59,7 +59,7 @@ diff --git a/find/ftsfind.c b/find/ftsfind.c index 9fdb8ef..bd7cc37 100644 --- a/find/ftsfind.c +++ b/find/ftsfind.c -@@ -479,6 +479,12 @@ consider_visiting (FTS *p, FTSENT *ent) +@@ -435,6 +435,12 @@ consider_visiting (FTS *p, FTSENT *ent) } } @@ -76,7 +76,7 @@ diff --git a/find/parser.c b/find/parser.c index 52a1ef6..995aec3 100644 --- a/find/parser.c +++ b/find/parser.c -@@ -138,6 +138,7 @@ static bool parse_used (const struct parser_table*, char *argv[], int * +@@ -139,6 +139,7 @@ static bool parse_used (const struct parser_table*, char *argv[], int * static bool parse_user (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_wholename (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_xdev (const struct parser_table*, char *argv[], int *arg_ptr); @@ -84,7 +84,7 @@ index 52a1ef6..995aec3 100644 static bool parse_ignore_race (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_noignore_race (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_warn (const struct parser_table*, char *argv[], int *arg_ptr); -@@ -302,6 +303,7 @@ static struct parser_table const parse_table[] = +@@ -304,6 +305,7 @@ static struct parser_table const parse_table[] = PARSE_TEST_NP ("wholename", wholename), /* GNU, replaced -path, but now -path is standardized since POSIX 2008 */ {ARG_TEST, "writable", parse_accesscheck, pred_writable}, /* GNU, 4.3.0+ */ PARSE_OPTION ("xdev", xdev), /* POSIX */ @@ -92,7 +92,7 @@ index 52a1ef6..995aec3 100644 PARSE_TEST ("xtype", xtype), /* GNU */ #ifdef UNIMPLEMENTED_UNIX /* It's pretty ugly for find to know about archive formats. -@@ -2603,6 +2605,13 @@ parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) +@@ -2607,6 +2609,13 @@ parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) return parse_noop (entry, argv, arg_ptr); } @@ -110,16 +110,16 @@ diff --git a/find/util.c b/find/util.c index 8577396..4d45f84 100644 --- a/find/util.c +++ b/find/util.c -@@ -181,7 +181,7 @@ operators (decreasing precedence; -and is implicit where no others are given):\n - positional options (always true): -daystart -follow -regextype\n\n\ - normal options (always true, specified before other expressions):\n\ - -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n\ -- --version -xdev -ignore_readdir_race -noignore_readdir_race\n")); -+ --version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race\n")); - HTL (_("\ - tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n\ - -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n\ -@@ -1044,6 +1044,7 @@ set_option_defaults (struct options *p) +@@ -183,7 +183,7 @@ Positional options (always true):\n\ + HTL (_("\n\ + Normal options (always true, specified before other expressions):\n\ + -depth -files0-from FILE -maxdepth LEVELS -mindepth LEVELS\n\ +- -mount -noleaf -xdev -ignore_readdir_race -noignore_readdir_race\n")); ++ -mount -noleaf -xautofs -xdev -ignore_readdir_race -noignore_readdir_race\n")); + HTL (_("\n\ + Tests (N can be +N or -N or N):\n\ + -amin N -anewer FILE -atime N -cmin N -cnewer FILE -context CONTEXT\n\ +@@ -1028,6 +1028,7 @@ set_option_defaults (struct options *p) p->full_days = false; p->stay_on_filesystem = false; diff --git a/findutils-4.5.13-warnings.patch b/findutils-4.5.13-warnings.patch index cb7ee9b..3b350fc 100644 --- a/findutils-4.5.13-warnings.patch +++ b/findutils-4.5.13-warnings.patch @@ -11,7 +11,7 @@ diff --git a/xargs/xargs.c b/xargs/xargs.c index 5e373f2..c0a8676 100644 --- a/xargs/xargs.c +++ b/xargs/xargs.c -@@ -1299,7 +1299,8 @@ xargs_do_exec (struct buildcmd_control *ctl, void *usercontext, int argc, char * +@@ -1346,7 +1346,8 @@ xargs_do_exec (struct buildcmd_control *ctl, void *usercontext, int argc, char * * utility if we run it, for POSIX compliance on the * handling of exit values. */ diff --git a/findutils-4.5.15-no-locate.patch b/findutils-4.5.15-no-locate.patch index 7388730..cf39c95 100644 --- a/findutils-4.5.15-no-locate.patch +++ b/findutils-4.5.15-no-locate.patch @@ -90,7 +90,7 @@ index c2714dd..01367a4 100644 @iftex @finalout -@@ -572,8 +571,7 @@ the databases are updated, and the directories for which they contain +@@ -661,8 +660,7 @@ the databases are updated, and the directories for which they contain entries. Here is how to select which file name databases @code{locate} @@ -100,7 +100,7 @@ index c2714dd..01367a4 100644 @table @code @item --database=@var{path} -@@ -2993,13 +2991,9 @@ thrashing the network. +@@ -3112,13 +3110,9 @@ thrashing the network. directories are indexed by each database file. The default location for the locate database depends on how findutils @@ -109,7 +109,7 @@ index c2714dd..01367a4 100644 - -If no database exists at @file{@value{LOCATE_DB}} but the user did not -specify where to look (by using @samp{-d} or setting --@code{LOCATE_PATH}), then @code{locate} will also check for a +-@env{LOCATE_PATH}), then @code{locate} will also check for a -``secure'' database in @file{/var/lib/slocate/slocate.db}. +is built. If user did not specify where to look (by using @samp{-d} +or setting @code{LOCATE_PATH}), then @code{locate} will also check for @@ -117,7 +117,7 @@ index c2714dd..01367a4 100644 @node Database Formats @section Database Formats -@@ -3508,8 +3502,7 @@ present. +@@ -3627,8 +3621,7 @@ present. @item --database=@var{path} @itemx -d @var{path} @@ -126,8 +126,8 @@ index c2714dd..01367a4 100644 +@code{locate} searches the file name databases in @var{path}, which is a colon-separated list of database file names. You can also use the environment variable - @code{LOCATE_PATH} to set the list of database files to search. The -@@ -3684,8 +3677,7 @@ The environment variable @code{PRUNEFS} also sets this value. Default + @env{LOCATE_PATH} to set the list of database files to search. The +@@ -3803,8 +3796,7 @@ The environment variable @env{PRUNEFS} also sets this value. Default is @file{nfs NFS proc}. @item --output=@var{dbfile} @@ -137,7 +137,7 @@ index c2714dd..01367a4 100644 @item --localuser=@var{user} The user to search the non-network directories as, using @code{su}. -@@ -5709,7 +5701,7 @@ See the manual of the system call @code{dup2(2)}. +@@ -5828,7 +5820,7 @@ See the manual of the system call @code{dup2(2)}. @section Error Messages From @code{locate} @table @samp @@ -146,7 +146,7 @@ index c2714dd..01367a4 100644 The @code{locate} program relies on a database which is periodically built by the @code{updatedb} program. That hasn't happened in a long time. To fix this problem, run @code{updatedb} manually. This can -@@ -5717,7 +5709,7 @@ often happen on systems that are generally not left on, so the +@@ -5836,7 +5828,7 @@ often happen on systems that are generally not left on, so the periodic ``cron'' task which normally does this doesn't get a chance to run. @@ -163,8 +163,8 @@ index 7e52a04..ae08a56 100644 ## You should have received a copy of the GNU General Public License ## along with this program. If not, see . --built_programs = find oldfind xargs frcode locate updatedb -+built_programs = find oldfind xargs +-built_programs = find xargs frcode locate updatedb ++built_programs = find xargs # Indirections required so that we'll still be able to know the # complete list of our tests even if the user overrides TESTS diff --git a/findutils-4.6.0-leaf-opt.patch b/findutils-4.6.0-leaf-opt.patch index c4e0f44..37ae9d5 100644 --- a/findutils-4.6.0-leaf-opt.patch +++ b/findutils-4.6.0-leaf-opt.patch @@ -54,7 +54,7 @@ diff --git a/gl/lib/fts.c b/gl/lib/fts.c index d2d404f..808466f 100644 --- a/gl/lib/fts.c +++ b/gl/lib/fts.c -@@ -713,6 +713,10 @@ filesystem_type (FTSENT const *p, int fd) +@@ -706,6 +706,10 @@ filesystem_type (FTSENT const *p, int fd) struct dev_type *ent; struct statfs fs_buf; @@ -107,7 +107,7 @@ diff --git a/find/ftsfind.c b/find/ftsfind.c index 5159470..e34b672 100644 --- a/find/ftsfind.c +++ b/find/ftsfind.c -@@ -553,6 +553,9 @@ find (char *arg) +@@ -509,6 +509,9 @@ find (char *arg) if (options.stay_on_filesystem) ftsoptions |= FTS_XDEV; diff --git a/findutils-4.8.0-gnulib-time_t.patch b/findutils-4.8.0-gnulib-time_t.patch deleted file mode 100644 index b15d6a1..0000000 --- a/findutils-4.8.0-gnulib-time_t.patch +++ /dev/null @@ -1,514 +0,0 @@ -From 67c20bbc7030d162132b7f7c7fbefbf95fc2bc76 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Thu, 1 Jul 2021 19:29:57 -0700 -Subject: [PATCH 1/5] year2038: support glibc 2.34 _TIME_BITS=64 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -In glibc 2.34 on Linux kernels where time_t is traditionally 32-bit, -defining _FILE_OFFSET_BITS=64 and _TIME_BITS=64 makes time_t 64-bit. -Apps must define both macros. Gnulib applications that use either -the largefile or the year2038 modules will want this behavior; -largefile because it deals with the off_t and ino_t components of -struct stat already, and so should also deal with time_t. -* m4/largefile.m4: Override two macros even in Autoconf 2.70 and later. -(_AC_SYS_LARGEFILE_MACRO_VALUE): #undef $1 before #defining it, in -case some other Gnulib macro has #defined it. -(AC_SYS_LARGEFILE): Use AS_IF and AS_CASE to propagate AC_REQUIREs. -Invoke gl_YEAR2038_BODY if we need to set _FILE_OFFSET_BITS=64. -* m4/year2038.m4 (gl_YEAR2038_TEST_INCLUDES): New macro. -(gl_YEAR2038_BODY): New macro, with gl_YEAR2038’s old body; this -macro is designed to be used directly instead of being -AC_REQUIREd. It takes an argument specifying whether 64-bit is -required. Set _TIME_BITS=64 if this makes a difference in time_t -width when setting _FILE_OFFSET_BITS=64. Do not warn about -32-bit time_t more than once. -* modules/largefile (Files): Add year2038.m4. -(Depends-on): Require gl_YEAR2038_EARLY. - -Upstream-commit: dc09dc0888485698a8e74205b9df43159aef0f61 -Signed-off-by: Kamil Dudka ---- - gl/m4/largefile.m4 | 28 +++++++++++---------- - gl/m4/year2038.m4 | 63 ++++++++++++++++++++++++++++++++++++---------- - 2 files changed, 65 insertions(+), 26 deletions(-) - -diff --git a/gl/m4/largefile.m4 b/gl/m4/largefile.m4 -index cadb16d..172a4da 100644 ---- a/gl/m4/largefile.m4 -+++ b/gl/m4/largefile.m4 -@@ -22,7 +22,8 @@ AC_DEFUN([gl_SET_LARGEFILE_SOURCE], - esac - ]) - --# The following implementation works around a problem in autoconf <= 2.69; -+# Work around a problem in Autoconf through at least 2.71 on glibc 2.34+ -+# with _TIME_BITS. Also, work around a problem in autoconf <= 2.69: - # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, - # or configures them incorrectly in some cases. - m4_version_prereq([2.70], [], [ -@@ -40,6 +41,7 @@ m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]];[]dnl - ]) -+])# m4_version_prereq 2.70 - - - # _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, -@@ -54,7 +56,8 @@ m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE], - [AC_LANG_PROGRAM([$5], [$6])], - [$3=no; break]) - m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( -- [AC_LANG_PROGRAM([#define $1 $2 -+ [AC_LANG_PROGRAM([#undef $1 -+#define $1 $2 - $5], [$6])], - [$3=$2; break]) - $3=unknown -@@ -80,9 +83,8 @@ rm -rf conftest*[]dnl - AC_DEFUN([AC_SYS_LARGEFILE], - [AC_ARG_ENABLE(largefile, - [ --disable-largefile omit support for large files]) --if test "$enable_largefile" != no; then -- -- AC_CACHE_CHECK([for special C compiler options needed for large files], -+AS_IF([test "$enable_largefile" != no], -+ [AC_CACHE_CHECK([for special C compiler options needed for large files], - ac_cv_sys_largefile_CC, - [ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then -@@ -107,15 +109,15 @@ if test "$enable_largefile" != no; then - ac_cv_sys_file_offset_bits, - [Number of bits in a file offset, on hosts where this is settable.], - [_AC_SYS_LARGEFILE_TEST_INCLUDES]) -- if test $ac_cv_sys_file_offset_bits = unknown; then -- _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, -- ac_cv_sys_large_files, -- [Define for large files, on AIX-style hosts.], -- [_AC_SYS_LARGEFILE_TEST_INCLUDES]) -- fi --fi -+ AS_CASE([$ac_cv_sys_file_offset_bits], -+ [unknown], -+ [_AC_SYS_LARGEFILE_MACRO_VALUE([_LARGE_FILES], [1], -+ [ac_cv_sys_large_files], -+ [Define for large files, on AIX-style hosts.], -+ [_AC_SYS_LARGEFILE_TEST_INCLUDES])], -+ [64], -+ [gl_YEAR2038_BODY([false])])]) - ])# AC_SYS_LARGEFILE --])# m4_version_prereq 2.70 - - # Enable large files on systems where this is implemented by Gnulib, not by the - # system headers. -diff --git a/gl/m4/year2038.m4 b/gl/m4/year2038.m4 -index 2534622..635ef12 100644 ---- a/gl/m4/year2038.m4 -+++ b/gl/m4/year2038.m4 -@@ -1,4 +1,4 @@ --# year2038.m4 serial 3 -+# year2038.m4 serial 4 - dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. - dnl This file is free software; the Free Software Foundation - dnl gives unlimited permission to copy and/or distribute it, -@@ -18,13 +18,29 @@ AC_DEFUN([gl_YEAR2038_EARLY], - esac - ]) - --AC_DEFUN([gl_YEAR2038], -+# gl_YEAR2038_TEST_INCLUDES -+# ------------------------- -+AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], -+[[ -+ #include -+ /* Check that time_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_TIME_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+ #define LARGE_TIME_T (((time_t) 1 << 31 << 31) - 1 + ((time_t) 1 << 31 << 31)) -+ int verify_time_t_range[(LARGE_TIME_T % 2147483629 == 721 -+ && LARGE_TIME_T % 2147483647 == 1) -+ ? 1 : -1]; -+]]) -+ -+# gl_YEAR2038_BODY(REQUIRE-64-BIT) -+---------------------------------- -+AC_DEFUN([gl_YEAR2038_BODY], - [ - dnl On many systems, time_t is already a 64-bit type. - dnl On those systems where time_t is still 32-bit, it requires kernel -- dnl and libc support to make it 64-bit. For glibc on Linux/x86, this -- dnl is work in progress; see -- dnl . -+ dnl and libc support to make it 64-bit. For glibc 2.34 and later on Linux, -+ dnl defining _TIME_BITS=64 and _FILE_OFFSET_BITS=64 is needed on x86 and ARM. - dnl - dnl On native Windows, the system include files define types __time32_t - dnl and __time64_t. By default, time_t is an alias of -@@ -36,13 +52,28 @@ AC_DEFUN([gl_YEAR2038], - dnl __time32_t. - AC_CACHE_CHECK([for 64-bit time_t], [gl_cv_type_time_t_64], - [AC_COMPILE_IFELSE( -- [AC_LANG_PROGRAM( -- [[#include -- int verify_time_t_size[sizeof (time_t) >= 8 ? 1 : -1]; -- ]], -- [[]])], -+ [AC_LANG_SOURCE([gl_YEAR2038_TEST_INCLUDES])], - [gl_cv_type_time_t_64=yes], [gl_cv_type_time_t_64=no]) - ]) -+ if test "$gl_cv_type_time_t_64" = no; then -+ AC_CACHE_CHECK([for 64-bit time_t with _TIME_BITS=64], -+ [gl_cv_type_time_t_bits_macro], -+ [AC_COMPILE_IFELSE( -+ [AC_LANG_SOURCE([[#define _TIME_BITS 64 -+ #define _FILE_OFFSET_BITS 64 -+ ]gl_YEAR2038_TEST_INCLUDES])], -+ [gl_cv_type_time_t_bits_macro=yes], -+ [gl_cv_type_time_t_bits_macro=no]) -+ ]) -+ if test "$gl_cv_type_time_t_bits_macro" = yes; then -+ AC_DEFINE([_TIME_BITS], [64], -+ [Number of bits in a timestamp, on hosts where this is settable.]) -+ dnl AC_SYS_LARGFILE also defines this; it's OK if we do too. -+ AC_DEFINE([_FILE_OFFSET_BITS], [64], -+ [Number of bits in a file offset, on hosts where this is settable.]) -+ gl_cv_type_time_t_64=yes -+ fi -+ fi - if test $gl_cv_type_time_t_64 = no; then - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( -@@ -53,18 +84,24 @@ AC_DEFUN([gl_YEAR2038], - #endif - ]])], - [AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type. Remove _USE_32BIT_TIME_T from the compiler flags.])], -- [# If TIME_T_32_BIT_OK is "no" (the default) and not cross-compiling -+ [# If not cross-compiling and $1 says we should check, - # and 'touch' works with a large timestamp, then evidently 64-bit time_t - # is desired and supported, so fail and ask the builder to fix the - # problem. Otherwise, just warn the builder. -- if test "${TIME_T_32_BIT_OK-no}" = no \ -+ if $1 \ - && test $cross_compiling = no \ - && TZ=UTC0 touch -t 210602070628.16 conftest.time 2>/dev/null; then - rm -f conftest.time - AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type, which your system appears to support. You might try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. To build with a 32-bit time_t anyway (not recommended), configure with 'TIME_T_32_BIT_OK=yes'.]) -- else -+ elif test "$gl_warned_about_64_bit_time_t" != yes; then - AC_MSG_WARN([This package requires a 64-bit 'time_t' type if there is any way to access timestamps outside the year range 1901-2038 on your platform. Perhaps you should configure with 'CPPFLAGS="-m64" LDFLAGS="-m64"'?]) -+ gl_warned_about_64_bit_time_t=yes - fi - ]) - fi - ]) -+ -+AC_DEFUN([gl_YEAR2038], -+[ -+ gl_YEAR2038_BODY([test "${TIME_T_32_BIT_OK-no}" = no]) -+]) --- -2.31.1 - - -From 6df0907c00ee44cb36a7caa118d1a6492e0056e6 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Tue, 6 Jul 2021 15:21:44 -0700 -Subject: [PATCH 2/5] year2038: Add --disable-year2038 option -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Also, document this stuff better. Suggested by Bruno Haible in: -https://lists.gnu.org/r/bug-gnulib/2021-07/msg00011.html -* m4/year2038.m4 (gl_YEAR2038_BODY): Support ‘./configure ---disable-year2038’ to disable 64-bit time_t when that is not the -default. Arg is now either empty or nonempty (not a shell -command) and is evaluated at m4 expansion time instead of at -runtime; all callers changed. - -Upstream-commit: 7dd2562058aa4cc3a1a4714b6248193fd5444491 -Signed-off-by: Kamil Dudka ---- - gl/m4/year2038.m4 | 23 ++++++++++++++--------- - 1 file changed, 14 insertions(+), 9 deletions(-) - -diff --git a/gl/m4/year2038.m4 b/gl/m4/year2038.m4 -index 635ef12..ad7f303 100644 ---- a/gl/m4/year2038.m4 -+++ b/gl/m4/year2038.m4 -@@ -1,4 +1,4 @@ --# year2038.m4 serial 4 -+# year2038.m4 serial 5 - dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. - dnl This file is free software; the Free Software Foundation - dnl gives unlimited permission to copy and/or distribute it, -@@ -37,6 +37,10 @@ AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], - ---------------------------------- - AC_DEFUN([gl_YEAR2038_BODY], - [ -+ AC_ARG_ENABLE([year2038], -+ [ --disable-year2038 omit support for timestamps past the year 2038]) -+ AS_IF([test "$enable_year2038" != no], -+ [ - dnl On many systems, time_t is already a 64-bit type. - dnl On those systems where time_t is still 32-bit, it requires kernel - dnl and libc support to make it 64-bit. For glibc 2.34 and later on Linux, -@@ -88,20 +92,21 @@ AC_DEFUN([gl_YEAR2038_BODY], - # and 'touch' works with a large timestamp, then evidently 64-bit time_t - # is desired and supported, so fail and ask the builder to fix the - # problem. Otherwise, just warn the builder. -- if $1 \ -- && test $cross_compiling = no \ -- && TZ=UTC0 touch -t 210602070628.16 conftest.time 2>/dev/null; then -- rm -f conftest.time -- AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type, which your system appears to support. You might try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. To build with a 32-bit time_t anyway (not recommended), configure with 'TIME_T_32_BIT_OK=yes'.]) -- elif test "$gl_warned_about_64_bit_time_t" != yes; then -+ m4_ifval([$1], -+ [if test $cross_compiling = no \ -+ && TZ=UTC0 touch -t 210602070628.16 conftest.time 2>/dev/null; then -+ rm -f conftest.time -+ AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type, which your system appears to support. You might try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. To build with a 32-bit time_t anyway (not recommended), configure with '--disable-year2038'.]) -+ fi]) -+ if test "$gl_warned_about_64_bit_time_t" != yes; then - AC_MSG_WARN([This package requires a 64-bit 'time_t' type if there is any way to access timestamps outside the year range 1901-2038 on your platform. Perhaps you should configure with 'CPPFLAGS="-m64" LDFLAGS="-m64"'?]) - gl_warned_about_64_bit_time_t=yes - fi - ]) -- fi -+ fi]) - ]) - - AC_DEFUN([gl_YEAR2038], - [ -- gl_YEAR2038_BODY([test "${TIME_T_32_BIT_OK-no}" = no]) -+ gl_YEAR2038_BODY([require-64-bit]) - ]) --- -2.31.1 - - -From 49816ad1b32b1f210841ac44cb64fa68da56806f Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Mon, 2 Aug 2021 09:30:50 -0700 -Subject: [PATCH 3/5] year2038: port to unusual time_t platforms -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -* m4/year2038.m4 (gl_YEAR2038_TEST_INCLUDES): Check that time_t -can go to 2**32 - 1, not to 2**63 - 1, as the former is enough to -be year 2038 safe. Unsigned 32-bit time_t (AmigaOS) and signed -40-bit time_t (Unisys ClearPath) have occurred in the wild, and -even if Gnulib code is rarely or never ported to them there’s no -need to exclude them merely because of year 2038 issues. -(gl_YEAR2038_BODY): Adjust messages to match. Use 2**32 - 1, -not 2**32, as the test timestamp, to allow unsigned 32-bit time_t. - -Upstream-commit: 784f55e5c59abde4eabf4e08169d1c50363280b4 -Signed-off-by: Kamil Dudka ---- - gl/m4/year2038.m4 | 61 ++++++++++++++++++++++++++++------------------- - 1 file changed, 36 insertions(+), 25 deletions(-) - -diff --git a/gl/m4/year2038.m4 b/gl/m4/year2038.m4 -index ad7f303..7ae004e 100644 ---- a/gl/m4/year2038.m4 -+++ b/gl/m4/year2038.m4 -@@ -1,11 +1,11 @@ --# year2038.m4 serial 5 -+# year2038.m4 serial 6 - dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. - dnl This file is free software; the Free Software Foundation - dnl gives unlimited permission to copy and/or distribute it, - dnl with or without modifications, as long as this notice is preserved. - --dnl Attempt to ensure that 'time_t' is a 64-bit type --dnl and that the functions time(), stat(), etc. return 64-bit times. -+dnl Attempt to ensure that 'time_t' can go past the year 2038 and that -+dnl the functions 'time', 'stat', etc. work with post-2038 timestamps. - - AC_DEFUN([gl_YEAR2038_EARLY], - [ -@@ -23,18 +23,15 @@ AC_DEFUN([gl_YEAR2038_EARLY], - AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], - [[ - #include -- /* Check that time_t can represent 2**63 - 1 correctly. -- We can't simply define LARGE_TIME_T to be 9223372036854775807, -- since some C++ compilers masquerading as C compilers -- incorrectly reject 9223372036854775807. */ -- #define LARGE_TIME_T (((time_t) 1 << 31 << 31) - 1 + ((time_t) 1 << 31 << 31)) -- int verify_time_t_range[(LARGE_TIME_T % 2147483629 == 721 -- && LARGE_TIME_T % 2147483647 == 1) -+ /* Check that time_t can represent 2**32 - 1 correctly. */ -+ #define LARGE_TIME_T (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)) -+ int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 -+ && LARGE_TIME_T % 65537 == 0) - ? 1 : -1]; - ]]) - --# gl_YEAR2038_BODY(REQUIRE-64-BIT) ------------------------------------ -+# gl_YEAR2038_BODY(REQUIRE-YEAR2038-SAFE) -+----------------------------------------- - AC_DEFUN([gl_YEAR2038_BODY], - [ - AC_ARG_ENABLE([year2038], -@@ -54,12 +51,12 @@ AC_DEFUN([gl_YEAR2038_BODY], - dnl alias of __time64_t. - dnl And when compiling with -D_USE_32BIT_TIME_T, time_t is an alias of - dnl __time32_t. -- AC_CACHE_CHECK([for 64-bit time_t], [gl_cv_type_time_t_64], -+ AC_CACHE_CHECK([for time_t past the year 2038], [gl_cv_type_time_t_y2038], - [AC_COMPILE_IFELSE( - [AC_LANG_SOURCE([gl_YEAR2038_TEST_INCLUDES])], -- [gl_cv_type_time_t_64=yes], [gl_cv_type_time_t_64=no]) -+ [gl_cv_type_time_t_y2038=yes], [gl_cv_type_time_t_y2038=no]) - ]) -- if test "$gl_cv_type_time_t_64" = no; then -+ if test "$gl_cv_type_time_t_y2038" = no; then - AC_CACHE_CHECK([for 64-bit time_t with _TIME_BITS=64], - [gl_cv_type_time_t_bits_macro], - [AC_COMPILE_IFELSE( -@@ -75,10 +72,10 @@ AC_DEFUN([gl_YEAR2038_BODY], - dnl AC_SYS_LARGFILE also defines this; it's OK if we do too. - AC_DEFINE([_FILE_OFFSET_BITS], [64], - [Number of bits in a file offset, on hosts where this is settable.]) -- gl_cv_type_time_t_64=yes -+ gl_cv_type_time_t_y2038=yes - fi - fi -- if test $gl_cv_type_time_t_64 = no; then -+ if test $gl_cv_type_time_t_y2038 = no; then - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#ifdef _USE_32BIT_TIME_T -@@ -87,20 +84,34 @@ AC_DEFUN([gl_YEAR2038_BODY], - error fail - #endif - ]])], -- [AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type. Remove _USE_32BIT_TIME_T from the compiler flags.])], -+ [AC_MSG_FAILURE( -+ [The 'time_t' type stops working after January 2038. -+ Remove _USE_32BIT_TIME_T from the compiler flags.])], - [# If not cross-compiling and $1 says we should check, -- # and 'touch' works with a large timestamp, then evidently 64-bit time_t -+ # and 'touch' works with a large timestamp, then evidently wider time_t - # is desired and supported, so fail and ask the builder to fix the - # problem. Otherwise, just warn the builder. - m4_ifval([$1], - [if test $cross_compiling = no \ -- && TZ=UTC0 touch -t 210602070628.16 conftest.time 2>/dev/null; then -+ && TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null; then -+ case `TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null` in -+ *'Feb 7 2106'* | *'Feb 7 17:10'*) -+ AC_MSG_FAILURE( -+ [The 'time_t' type stops working after January 2038, -+ and your system appears to support a wider 'time_t'. -+ Try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. -+ To build with a 32-bit time_t anyway (not recommended), -+ configure with '--disable-year2038'.]);; -+ esac - rm -f conftest.time -- AC_MSG_FAILURE([This package requires a 64-bit 'time_t' type, which your system appears to support. You might try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. To build with a 32-bit time_t anyway (not recommended), configure with '--disable-year2038'.]) - fi]) -- if test "$gl_warned_about_64_bit_time_t" != yes; then -- AC_MSG_WARN([This package requires a 64-bit 'time_t' type if there is any way to access timestamps outside the year range 1901-2038 on your platform. Perhaps you should configure with 'CPPFLAGS="-m64" LDFLAGS="-m64"'?]) -- gl_warned_about_64_bit_time_t=yes -+ if test "$gl_warned_about_y2038" != yes; then -+ AC_MSG_WARN( -+ [The 'time_t' type stops working after January 2038, -+ and this package needs a wider 'time_t' type -+ if there is any way to access timestamps after that. -+ Configure with 'CPPFLAGS="-m64" LDFLAGS="-m64"' perhaps?]) -+ gl_warned_about_y2038=yes - fi - ]) - fi]) -@@ -108,5 +119,5 @@ AC_DEFUN([gl_YEAR2038_BODY], - - AC_DEFUN([gl_YEAR2038], - [ -- gl_YEAR2038_BODY([require-64-bit]) -+ gl_YEAR2038_BODY([require-year2038-safe]) - ]) --- -2.31.1 - - -From cd11a3e21d4aba6a8655a25bc0299cf4a72f58f5 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Mon, 2 Aug 2021 09:44:59 -0700 -Subject: [PATCH 4/5] year2038: work even if time_t is narrower than int - -Upstream-commit: 7c6538cf0584a5ad3e2e46f64b1936eea4cddecc -Signed-off-by: Kamil Dudka ---- - gl/m4/year2038.m4 | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/gl/m4/year2038.m4 b/gl/m4/year2038.m4 -index 7ae004e..f53b03f 100644 ---- a/gl/m4/year2038.m4 -+++ b/gl/m4/year2038.m4 -@@ -24,7 +24,8 @@ AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], - [[ - #include - /* Check that time_t can represent 2**32 - 1 correctly. */ -- #define LARGE_TIME_T (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)) -+ #define LARGE_TIME_T \\ -+ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) - int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 - && LARGE_TIME_T % 65537 == 0) - ? 1 : -1]; --- -2.31.1 - - -From 1e2e81f10204a4d176c8ec14bd95b9aa43d9012c Mon Sep 17 00:00:00 2001 -From: Bruno Haible -Date: Sat, 7 Aug 2021 16:03:22 +0200 -Subject: [PATCH 5/5] year2038: Fix recommendation regarding -m64 flag. - -* m4/year2038.m4 (gl_YEAR2038_BODY): Recommend to put option --m64 in -CC, not in CPPFLAGS and LDFLAGS. - -Upstream-commit: edb4fbdc959660ef753bdc684aaf14b555871a2a -Signed-off-by: Kamil Dudka ---- - gl/m4/year2038.m4 | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/gl/m4/year2038.m4 b/gl/m4/year2038.m4 -index f53b03f..da0f8d7 100644 ---- a/gl/m4/year2038.m4 -+++ b/gl/m4/year2038.m4 -@@ -1,4 +1,4 @@ --# year2038.m4 serial 6 -+# year2038.m4 serial 7 - dnl Copyright (C) 2017-2021 Free Software Foundation, Inc. - dnl This file is free software; the Free Software Foundation - dnl gives unlimited permission to copy and/or distribute it, -@@ -100,7 +100,7 @@ AC_DEFUN([gl_YEAR2038_BODY], - AC_MSG_FAILURE( - [The 'time_t' type stops working after January 2038, - and your system appears to support a wider 'time_t'. -- Try configuring with 'CPPFLAGS="-m64" LDFLAGS="-m64"'. -+ Try configuring with 'CC="${CC} -m64"'. - To build with a 32-bit time_t anyway (not recommended), - configure with '--disable-year2038'.]);; - esac -@@ -111,7 +111,7 @@ AC_DEFUN([gl_YEAR2038_BODY], - [The 'time_t' type stops working after January 2038, - and this package needs a wider 'time_t' type - if there is any way to access timestamps after that. -- Configure with 'CPPFLAGS="-m64" LDFLAGS="-m64"' perhaps?]) -+ Configure with 'CC="${CC} -m64"' perhaps?]) - gl_warned_about_y2038=yes - fi - ]) --- -2.31.1 - diff --git a/findutils-4.8.0.tar.xz.sig b/findutils-4.8.0.tar.xz.sig deleted file mode 100644 index 299114e..0000000 --- a/findutils-4.8.0.tar.xz.sig +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQEzBAABCAAdFiEEpRidtpwRZNMwApNmRlAu95aRcZUFAl/53q8ACgkQRlAu95aR -cZVPlwgAshQRkDwagj5Zi1tFovX2GBbGfoTT9PddleIqGCieCy28GvVRkQNKf/q9 -8hjZ5L/dKUhMPQuoiB6zlL2iVzWz/8pHxBIbCWUqWEIyoubSzPI6oSfpKmzODLNk -2BBWcM+7uTPEK7Q/l2GCk7R1txzFM7izk5wwyVNtq0ARjU0njUm3w6wSgKUcXKpR -deV4psEwSkkUzcZ/IBXKZrW41Dtj4LaS0AsIqj4j1lUsDyYd/NC4Z66GAlg80PRK -7TOv8AHels0nXpgJtWiwcIz74MmCfbMq8IL1vzoTVEMMYItRkGyREoGTKnDecjCm -w9GvH4sTRO0h7JDWjKMDXD2ZxHxXmg== -=QPJY ------END PGP SIGNATURE----- diff --git a/findutils-4.9.0.tar.xz.sig b/findutils-4.9.0.tar.xz.sig new file mode 100644 index 0000000..676201b --- /dev/null +++ b/findutils-4.9.0.tar.xz.sig @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- + +iQEzBAABCAAdFiEEpRidtpwRZNMwApNmRlAu95aRcZUFAmH50AcACgkQRlAu95aR +cZU/DQgAjt38b5+7CREWR7rk9y/NRvc+xAg7wMfwjt90cAycjRZ7hMVviB7R+MhO +1rrV+4UkKCYzBzks5FIhN00IwmXoe0VPeH17ATtSB6c70rBNwHE7CWcGz2cnqHBQ +CzPBy3hXEq7YY1kq7bfZCkTTEnxve9eKrgoczj/NpxvxoRkLmXzzKd0ChvHLlYJl +m0GrPAl81eUF2vYIo5/9F28AR2mfCv1cwzsb1Ch3WEXqZB2tcIKsocrO4AVVpkmD +o1pmPZa1FTKPI4YdBOlOuWUYkf6rD7WEKTcFmXrafkPlzhY4HJyN35XslAllJg6w +81EbRarQvxrVDuxoS0jnx0oMvV7jxg== +=hp30 +-----END PGP SIGNATURE----- diff --git a/findutils.spec b/findutils.spec index 19722ea..0e01976 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,15 +1,12 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils -Version: 4.8.0 -Release: 6%{?dist} +Version: 4.9.0 +Release: 1%{?dist} Epoch: 1 License: GPLv3+ URL: https://www.gnu.org/software/findutils/ Source0: https://ftp.gnu.org/pub/gnu/%{name}/%{name}-%{version}.tar.xz -# make findutils build on 32bit x86 -Patch0: findutils-4.8.0-gnulib-time_t.patch - # do not build locate Patch1: findutils-4.5.15-no-locate.patch @@ -114,6 +111,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Wed Feb 02 2022 Kamil Dudka - 1:4.9.0-1 +- new upstream release + * Mon Jan 24 2022 Kamil Dudka - 1:4.8.0-6 - make findutils build on 32bit x86 diff --git a/sources b/sources index 3457d71..6d837ee 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (findutils-4.8.0.tar.xz) = eaa2da304dbeb2cd659b9210ac37da1bde4cd665c12a818eca98541c5ed5cba1050641fc0c39c0a446a5a7a87a8d654df0e0e6b0cee21752ea485188c9f1071e +SHA512 (findutils-4.9.0.tar.xz) = ba4844f4403de0148ad14b46a3dbefd5a721f6257c864bf41a6789b11705408524751c627420b15a52af95564d8e5b52f0978474f640a62ab86a41d20cf14be9 From 20cfbf3b4523ee4ea267d8bf78afbba866d2a888 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 21 Jul 2022 03:10:43 +0000 Subject: [PATCH 43/59] Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 0e01976..1a543b3 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.9.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPLv3+ URL: https://www.gnu.org/software/findutils/ @@ -111,6 +111,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Thu Jul 21 2022 Fedora Release Engineering - 1:4.9.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Wed Feb 02 2022 Kamil Dudka - 1:4.9.0-1 - new upstream release From 08b4c3566a2dff4a90d8f22aa0b37d71dd687173 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 19 Jan 2023 03:26:51 +0000 Subject: [PATCH 44/59] Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 1a543b3..9d93cac 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.9.0 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPLv3+ URL: https://www.gnu.org/software/findutils/ @@ -111,6 +111,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Thu Jan 19 2023 Fedora Release Engineering - 1:4.9.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + * Thu Jul 21 2022 Fedora Release Engineering - 1:4.9.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild From ee2de2c25433faf1746cf4211c329fb5c59b8c7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= Date: Wed, 12 Apr 2023 13:18:58 +0200 Subject: [PATCH 45/59] migrate to SPDX license format --- findutils.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/findutils.spec b/findutils.spec index 9d93cac..5f1cf6e 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,9 +1,9 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.9.0 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 -License: GPLv3+ +License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ Source0: https://ftp.gnu.org/pub/gnu/%{name}/%{name}-%{version}.tar.xz @@ -111,6 +111,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Wed Apr 12 2023 Lukáš Zaoral - 1:4.9.0-4 +- migrate to SPDX license format + * Thu Jan 19 2023 Fedora Release Engineering - 1:4.9.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild From 64f00ef36292b337ff37b03c4b61b44eae3d7927 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 19 Jul 2023 19:42:34 +0000 Subject: [PATCH 46/59] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 5f1cf6e..8117c50 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.9.0 -Release: 4%{?dist} +Release: 5%{?dist} Epoch: 1 License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ @@ -111,6 +111,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Wed Jul 19 2023 Fedora Release Engineering - 1:4.9.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Wed Apr 12 2023 Lukáš Zaoral - 1:4.9.0-4 - migrate to SPDX license format From 7f8da56ec779814ce89ac7645b1bf96bdc348c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= Date: Tue, 12 Sep 2023 06:21:53 +0200 Subject: [PATCH 47/59] fix find not obeying -ignore_readdir_race in symlink_loop --- ...4.9.0-ignore_readdir_race-symlink_loop.patch | 17 +++++++++++++++++ findutils.spec | 8 +++++++- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 findutils-4.9.0-ignore_readdir_race-symlink_loop.patch diff --git a/findutils-4.9.0-ignore_readdir_race-symlink_loop.patch b/findutils-4.9.0-ignore_readdir_race-symlink_loop.patch new file mode 100644 index 0000000..f6ac52d --- /dev/null +++ b/findutils-4.9.0-ignore_readdir_race-symlink_loop.patch @@ -0,0 +1,17 @@ +# cherry picked from https://savannah.gnu.org/bugs/?45930 +diff --git a/find/ftsfind.c b/find/ftsfind.c +index 0d96c4ca..6aeac28c 100644 +--- a/find/ftsfind.c ++++ b/find/ftsfind.c +@@ -401,6 +401,10 @@ consider_visiting (FTS *p, FTSENT *ent) + } + else + { ++ /* Ignore unlink() error for vanished files. */ ++ if (ENOENT == ent->fts_errno && options.ignore_readdir_race) ++ return; ++ + nonfatal_target_file_error (ent->fts_errno, ent->fts_path); + /* Continue despite the error, as file name without stat info + * might be better than not even processing the file name. This + diff --git a/findutils.spec b/findutils.spec index 8117c50..723b6c2 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.9.0 -Release: 5%{?dist} +Release: 6%{?dist} Epoch: 1 License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ @@ -22,6 +22,9 @@ Patch4: findutils-4.6.0-test-lock.patch # implement the -noleaf option of find (#1252549) Patch5: findutils-4.6.0-leaf-opt.patch +# fix find not obeying -ignore_readdir_race in symlink_loop (#2232278) +Patch6: findutils-4.9.0-ignore_readdir_race-symlink_loop.patch + Conflicts: filesystem < 3 Provides: /bin/find Provides: bundled(gnulib) @@ -111,6 +114,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Tue Sep 12 2023 Lukáš Zaoral - 1:4.9.0-6 +- fix find not obeying -ignore_readdir_race in symlink_loop (rhbz#2232278) + * Wed Jul 19 2023 Fedora Release Engineering - 1:4.9.0-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From a561ddb052c8e2aa39db81a9e3fa6705780effe5 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 19 Jan 2024 19:19:57 +0000 Subject: [PATCH 48/59] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 723b6c2..65202b1 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.9.0 -Release: 6%{?dist} +Release: 7%{?dist} Epoch: 1 License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ @@ -114,6 +114,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Fri Jan 19 2024 Fedora Release Engineering - 1:4.9.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Tue Sep 12 2023 Lukáš Zaoral - 1:4.9.0-6 - fix find not obeying -ignore_readdir_race in symlink_loop (rhbz#2232278) From dcb0a9ef28e231c6d9f3671b74441d405405f15a Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 24 Jan 2024 11:34:39 +0000 Subject: [PATCH 49/59] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 65202b1..9e9bc0a 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.9.0 -Release: 7%{?dist} +Release: 8%{?dist} Epoch: 1 License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ @@ -114,6 +114,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Wed Jan 24 2024 Fedora Release Engineering - 1:4.9.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Fri Jan 19 2024 Fedora Release Engineering - 1:4.9.0-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From aa0a233677d005d3a798748cc690a4c13eeb8299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= Date: Mon, 3 Jun 2024 10:31:06 +0200 Subject: [PATCH 50/59] rebase to latest upstream version - add GPG tarball verification Resolves: rhbz#2284216 --- .gitignore | 2 + findutils-4.4.2-xautofs.patch | 4 +- findutils-keyring.gpg | 620 ++++++++++++++++++++++++++++++++++ findutils.spec | 19 +- sources | 3 +- 5 files changed, 642 insertions(+), 6 deletions(-) create mode 100644 findutils-keyring.gpg diff --git a/.gitignore b/.gitignore index 43bcb9f..a11e50e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ /findutils-4.*.*.tar.?z +/findutils-4.*.*.tar.*z.sig +/findutils-4.*.* diff --git a/findutils-4.4.2-xautofs.patch b/findutils-4.4.2-xautofs.patch index c1683dc..271b68c 100644 --- a/findutils-4.4.2-xautofs.patch +++ b/findutils-4.4.2-xautofs.patch @@ -114,8 +114,8 @@ index 8577396..4d45f84 100644 HTL (_("\n\ Normal options (always true, specified before other expressions):\n\ -depth -files0-from FILE -maxdepth LEVELS -mindepth LEVELS\n\ -- -mount -noleaf -xdev -ignore_readdir_race -noignore_readdir_race\n")); -+ -mount -noleaf -xautofs -xdev -ignore_readdir_race -noignore_readdir_race\n")); +- -mount -noleaf -xdev -ignore_readdir_race -noignore_readdir_race\n")); ++ -mount -noleaf -xautofs -xdev -ignore_readdir_race -noignore_readdir_race\n")); HTL (_("\n\ Tests (N can be +N or -N or N):\n\ -amin N -anewer FILE -atime N -cmin N -cnewer FILE -context CONTEXT\n\ diff --git a/findutils-keyring.gpg b/findutils-keyring.gpg new file mode 100644 index 0000000..da26a0f --- /dev/null +++ b/findutils-keyring.gpg @@ -0,0 +1,620 @@ +Release GPG keyring of findutils group. + +GPG keys of James Youngman +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +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 +iJpHld5wbiXhNA18Lr5bV56Z+9IXwQ== +=Svgf +-----END PGP PUBLIC KEY BLOCK----- + +GPG keys of Bob Proulx +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=MuTV +-----END PGP PUBLIC KEY BLOCK----- + +GPG keys of Eric Blake +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.10 (GNU/Linux) +Comment: Public key at http://people.redhat.com/eblake/eblake.gpg + +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 +=FC1k +-----END PGP PUBLIC KEY BLOCK----- + +GPG keys of Bernhard Voelker +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v2 + +mQENBFPirzMBCACyzYldTjQ4ufFOkByY5Nn5USb5GFoL48nWBwNHjd9KUbtRRNlQ +iPNKd6hKGvd3BGi5aoFKA4ytfRk6jbAbW3jVb3R8wYaV08mOy4KVEKxqN4bxsXlM +jNChXVR+rtKDmfI+oPTL+cPH2X6gW4W02IRbVw0uUhNm6zEedC/gNrY/mTlf1enZ +46jxZ7BTUZaG+kx38UMISIMBzSzLRtdkwgmHj4jS3p1fF2cwRqLclIfMjKGpbNFP +EXeXKWrCLcqHw78795eAR9q0YvrDkfInGdDBwfb3VM4NdulwIFzvYZMSXvSbbyPL +B5YkHU5aAWQHUse4WlfT5ccDpbzUYldRAvF9ABEBAAG0K0Jlcm5oYXJkIFZvZWxr +ZXIgPG1haWxAYmVybmhhcmQtdm9lbGtlci5kZT6JATkEEwECACMFAlPirzMCGwMH +CwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRBGUC73lpFxle5wCACCdbs0QaJ0 +vR3Sff2cKdTk41rUq3YfWngsR///IOU0C5DdkePmCnJE/lUsUy0LRTxcUDLxQR+x +QHU8ssRT0JUO9726dI3miy36UdsgmBYaOtLvQcidGmW1R7o0PYYf04+TFtyqKgng +OUBPpMgR6o4UsQxy/OD4bN1WDqOgIjL+D/qJpkKmgp6L6+hhaBCpiOFKRmmV7YyQ +3SqVlfQNiHs5ZtkRnXpIjgZARV+GllKucI17bO0CGmTJZ1tstVy0+W3DQT1lbBkT +Tc++5LONM99D3jjn23l1ocOpfolR53F7I4cb2RNfT23v1I59RH37lB9wMOqrKj0U +jYAC2YoPGQ3BuQENBFPirzMBCADXLWWpQihBldY6reca8ZKdc3T9qXEOa3akE3DW +KztIBmNJhtYOjmpLYajQTkGa7UoJTnbmZE2Rn6ZEoNnvb0gcFNAIcY95KOI+bjOR +8HEgh4cx2REXh6L6olIgyXqt/KFusE4wtVZAFxZl+30HzN6nD+1HvrjXxPJRX6Ms +IYOYyyX9/6OofwJK6QHODYGp8WL2olHDnmsXg4AT6Wlr7qKpKrQELlcFR4xkvdmg +L/Ghw/tK0yJTxMIcewCCZWLPOXRmFRbvAadZWPAgVsJ63siNyUlVnVMSzDgTJl+s +l/DMabXpqrJQx3/1Yy6mTaDs3XZT/wmBKaTLXx/LByaPxQQ7ABEBAAGJAR8EGAEC +AAkFAlPirzMCGwwACgkQRlAu95aRcZWVPwgAqZT6iTXkoP37wYb41323RzhBcJ8J +Sk4cyBDBUXX0lMrM3qhiClKG7phpxVdu817Gwc6Hsecg7FfjQAV8MHQ0ZFeEFdk3 +b2rKBqfsStc+h49/xF3Fb+ifCzR9qeQF82fMSxkg18++7hMcHCMO/hPZ/Q0xRi+l +rSr2QKDJQuLzSyVU14TxrCkevZjEhtmaVNvcJlJzCbiBXee9Fpc5jITUXPFG8E8d +xqo1n+duOyIMgozrAnzP7X5V/Ob/Ozf/aGGX9+JdinyfCX18nWcHALKMU/36Eua/ +ylalf/2c2YkBp9KCLVmGgPkUgW52EeRPgroIsiwu+rwCSV6ZUyCJ+OymCg== +=d/K6 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/findutils.spec b/findutils.spec index 9e9bc0a..5b8d905 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,11 +1,16 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils -Version: 4.9.0 -Release: 8%{?dist} +Version: 4.10.0 +Release: 1%{?dist} Epoch: 1 License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ -Source0: https://ftp.gnu.org/pub/gnu/%{name}/%{name}-%{version}.tar.xz + +Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz +Source1: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig +# From https://savannah.gnu.org/project/release-gpgkeys.php?group=findutils&download=1 +# which is linked as project keyring on https://savannah.gnu.org/projects/findutils +Source2: findutils-keyring.gpg # do not build locate Patch1: findutils-4.5.15-no-locate.patch @@ -38,6 +43,9 @@ BuildRequires: libselinux-devel BuildRequires: make BuildRequires: texinfo +# For gpg verification of source tarball +BuildRequires: gnupg2 + %description The findutils package contains programs which will help you locate files on your system. The find utility searches through a hierarchy @@ -50,6 +58,7 @@ You should install findutils because it includes tools that are very useful for finding things on your system. %prep +%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' %autosetup -N -S git # drop the source code of locate @@ -114,6 +123,10 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Mon Jun 03 2024 Lukáš Zaoral - 1:4.10.0-1 +- rebase to latest upstream version (rhbz#2284216) +- add GPG tarball verification + * Wed Jan 24 2024 Fedora Release Engineering - 1:4.9.0-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild diff --git a/sources b/sources index 6d837ee..ac8f2fb 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ -SHA512 (findutils-4.9.0.tar.xz) = ba4844f4403de0148ad14b46a3dbefd5a721f6257c864bf41a6789b11705408524751c627420b15a52af95564d8e5b52f0978474f640a62ab86a41d20cf14be9 +SHA512 (findutils-4.10.0.tar.xz) = b8b683d21cd26c6da4f41c56e83cadbda4780f8610a2bbd4b4e34bb1f339c3209721974b03e076d5eef0331fd876d947b398197aad37c29bbcc2e0405c641b34 +SHA512 (findutils-4.10.0.tar.xz.sig) = a835153a0671309021be187bf78afee58d9682acb40545aaa9dd187f0ebdea0cfa5583bd03f363243633ea056ddb0a7a6603987ab5e34a608426cb4265ac6d8f From ea8cdeb92d2f12852e33d8331cbfb3b756ea068b Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Mon, 3 Jun 2024 13:56:16 +0200 Subject: [PATCH 51/59] remove GPG signature no longer needed ... after the update to a newer upstream release Related: https://bugzilla.redhat.com/2284216 --- findutils-4.9.0.tar.xz.sig | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 findutils-4.9.0.tar.xz.sig diff --git a/findutils-4.9.0.tar.xz.sig b/findutils-4.9.0.tar.xz.sig deleted file mode 100644 index 676201b..0000000 --- a/findutils-4.9.0.tar.xz.sig +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQEzBAABCAAdFiEEpRidtpwRZNMwApNmRlAu95aRcZUFAmH50AcACgkQRlAu95aR -cZU/DQgAjt38b5+7CREWR7rk9y/NRvc+xAg7wMfwjt90cAycjRZ7hMVviB7R+MhO -1rrV+4UkKCYzBzks5FIhN00IwmXoe0VPeH17ATtSB6c70rBNwHE7CWcGz2cnqHBQ -CzPBy3hXEq7YY1kq7bfZCkTTEnxve9eKrgoczj/NpxvxoRkLmXzzKd0ChvHLlYJl -m0GrPAl81eUF2vYIo5/9F28AR2mfCv1cwzsb1Ch3WEXqZB2tcIKsocrO4AVVpkmD -o1pmPZa1FTKPI4YdBOlOuWUYkf6rD7WEKTcFmXrafkPlzhY4HJyN35XslAllJg6w -81EbRarQvxrVDuxoS0jnx0oMvV7jxg== -=hp30 ------END PGP SIGNATURE----- From cc742cd80457af5e8f67800a95381c6473f752fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= Date: Tue, 4 Jun 2024 12:35:37 +0200 Subject: [PATCH 52/59] enable LTO on ppc64le --- findutils.spec | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/findutils.spec b/findutils.spec index 5b8d905..b420807 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.10.0 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ @@ -90,11 +90,6 @@ git add --all . git commit -q -m "after invocation of autoreconf" %build -# disable -flto on ppc64le to make test-float pass (#1789115) -%ifarch ppc64le -export CFLAGS="$RPM_OPT_FLAGS -fno-lto" -%endif - mkdir build cd build %global _configure ../configure @@ -123,6 +118,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Tue Jun 04 2024 Lukáš Zaoral - 1:4.10.0-2 +- enable LTO on ppc64le + * Mon Jun 03 2024 Lukáš Zaoral - 1:4.10.0-1 - rebase to latest upstream version (rhbz#2284216) - add GPG tarball verification From 53c14112bca68d912821ca44c9a24679302ca8cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= Date: Wed, 3 Jul 2024 10:32:59 +0200 Subject: [PATCH 53/59] fix autofs patch when stat was not performed Resolves: RHEL-43285 --- findutils-4.4.2-xautofs.patch | 66 +++++++++++++++++++++-------------- findutils.spec | 5 ++- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/findutils-4.4.2-xautofs.patch b/findutils-4.4.2-xautofs.patch index 271b68c..c8de53f 100644 --- a/findutils-4.4.2-xautofs.patch +++ b/findutils-4.4.2-xautofs.patch @@ -1,22 +1,22 @@ -From 17e470dc1acca4824b70328d733d5f99c12d0d65 Mon Sep 17 00:00:00 2001 +From cd653102f401f91748c3f038be4d38ddacc2d7db Mon Sep 17 00:00:00 2001 From: Kamil Dudka -Date: Wed, 11 May 2011 16:46:45 +0200 +Date: Wed, 3 Jul 2024 10:22:49 +0200 Subject: [PATCH] findutils-4.4.2-xautofs.patch --- - doc/find.texi | 4 ++++ - find/defs.h | 3 +++ - find/find.1 | 3 +++ - find/ftsfind.c | 6 ++++++ - find/parser.c | 9 +++++++++ - find/util.c | 3 ++- - 6 files changed, 27 insertions(+), 1 deletions(-) + doc/find.texi | 4 ++++ + find/defs.h | 3 +++ + find/find.1 | 3 +++ + find/ftsfind.c | 11 +++++++++-- + find/parser.c | 9 +++++++++ + find/util.c | 3 ++- + 6 files changed, 30 insertions(+), 3 deletions(-) diff --git a/doc/find.texi b/doc/find.texi -index c584298..9731b71 100644 +index f58c060..21b4bf5 100644 --- a/doc/find.texi +++ b/doc/find.texi -@@ -1606,6 +1606,10 @@ them. +@@ -1605,6 +1605,10 @@ them. There are two ways to avoid searching certain filesystems. One way is to tell @code{find} to only search one filesystem: @@ -28,10 +28,10 @@ index c584298..9731b71 100644 @deffnx Option -mount Don't descend directories on other filesystems. These options are diff --git a/find/defs.h b/find/defs.h -index 11d1d00..f95ce72 100644 +index 453dc27..9424168 100644 --- a/find/defs.h +++ b/find/defs.h -@@ -562,6 +562,9 @@ struct options +@@ -557,6 +557,9 @@ struct options /* If true, don't cross filesystem boundaries. */ bool stay_on_filesystem; @@ -42,10 +42,10 @@ index 11d1d00..f95ce72 100644 * no longer exists by the time we get around to processing it. */ diff --git a/find/find.1 b/find/find.1 -index e851f82..a4799ff 100644 +index 319aa63..002fb16 100644 --- a/find/find.1 +++ b/find/find.1 -@@ -638,6 +638,9 @@ to stat them; this gives a significant increase in search speed. +@@ -654,6 +654,9 @@ to stat them; this gives a significant increase in search speed. .IP "\-version, \-\-version" Print the \fBfind\fR version number and exit. @@ -56,15 +56,27 @@ index e851f82..a4799ff 100644 Don't descend directories on other filesystems. diff --git a/find/ftsfind.c b/find/ftsfind.c -index 9fdb8ef..bd7cc37 100644 +index b7f69a0..aca856c 100644 --- a/find/ftsfind.c +++ b/find/ftsfind.c -@@ -435,6 +435,12 @@ consider_visiting (FTS *p, FTSENT *ent) +@@ -268,8 +268,8 @@ symlink_loop (const char *name) + static void + consider_visiting (FTS *p, FTSENT *ent) + { +- struct stat statbuf; +- mode_t mode; ++ struct stat statbuf = {0}; ++ mode_t mode = 0; + int ignore, isdir; + + if (options.debug_options & DebugSearch) +@@ -433,6 +433,13 @@ consider_visiting (FTS *p, FTSENT *ent) } } -+ if (options.bypass_autofs && -+ 0 == strcmp ("autofs", filesystem_type (&statbuf, ent->fts_name))) ++ if (options.bypass_autofs ++ && 0 == get_statinfo (ent->fts_path, ent->fts_name, &statbuf) ++ && 0 == strcmp ("autofs", filesystem_type (&statbuf, ent->fts_name))) + { + fts_set(p, ent, FTS_SKIP); /* descend no further */ + } @@ -73,10 +85,10 @@ index 9fdb8ef..bd7cc37 100644 { /* this is the preorder visit, but user said -depth */ diff --git a/find/parser.c b/find/parser.c -index 52a1ef6..995aec3 100644 +index b86e685..6d74d1e 100644 --- a/find/parser.c +++ b/find/parser.c -@@ -139,6 +139,7 @@ static bool parse_used (const struct parser_table*, char *argv[], int * +@@ -150,6 +150,7 @@ static bool parse_used (const struct parser_table*, char *argv[], int * static bool parse_user (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_wholename (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_xdev (const struct parser_table*, char *argv[], int *arg_ptr); @@ -84,7 +96,7 @@ index 52a1ef6..995aec3 100644 static bool parse_ignore_race (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_noignore_race (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_warn (const struct parser_table*, char *argv[], int *arg_ptr); -@@ -304,6 +305,7 @@ static struct parser_table const parse_table[] = +@@ -309,6 +310,7 @@ static struct parser_table const parse_table[] = PARSE_TEST_NP ("wholename", wholename), /* GNU, replaced -path, but now -path is standardized since POSIX 2008 */ {ARG_TEST, "writable", parse_accesscheck, pred_writable}, /* GNU, 4.3.0+ */ PARSE_OPTION ("xdev", xdev), /* POSIX */ @@ -92,7 +104,7 @@ index 52a1ef6..995aec3 100644 PARSE_TEST ("xtype", xtype), /* GNU */ #ifdef UNIMPLEMENTED_UNIX /* It's pretty ugly for find to know about archive formats. -@@ -2607,6 +2609,13 @@ parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) +@@ -2489,6 +2491,13 @@ parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) return parse_noop (entry, argv, arg_ptr); } @@ -107,10 +119,10 @@ index 52a1ef6..995aec3 100644 parse_ignore_race (const struct parser_table* entry, char **argv, int *arg_ptr) { diff --git a/find/util.c b/find/util.c -index 8577396..4d45f84 100644 +index 88dafd7..a592055 100644 --- a/find/util.c +++ b/find/util.c -@@ -183,7 +183,7 @@ Positional options (always true):\n\ +@@ -181,7 +181,7 @@ Positional options (always true):\n\ HTL (_("\n\ Normal options (always true, specified before other expressions):\n\ -depth -files0-from FILE -maxdepth LEVELS -mindepth LEVELS\n\ @@ -119,7 +131,7 @@ index 8577396..4d45f84 100644 HTL (_("\n\ Tests (N can be +N or -N or N):\n\ -amin N -anewer FILE -atime N -cmin N -cnewer FILE -context CONTEXT\n\ -@@ -1028,6 +1028,7 @@ set_option_defaults (struct options *p) +@@ -1027,6 +1027,7 @@ set_option_defaults (struct options *p) p->full_days = false; p->stay_on_filesystem = false; @@ -128,5 +140,5 @@ index 8577396..4d45f84 100644 if (p->posixly_correct) -- -1.7.4.4 +2.45.2 diff --git a/findutils.spec b/findutils.spec index b420807..ff93649 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.10.0 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ @@ -118,6 +118,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Tue Jul 02 2024 Lukáš Zaoral - 1:4.10.0-3 +- fix autofs patch when stat was not performed (RHEL-43285) + * Tue Jun 04 2024 Lukáš Zaoral - 1:4.10.0-2 - enable LTO on ppc64le From af9523930ab590324f16f09457b41d6355146259 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= Date: Wed, 3 Jul 2024 13:30:33 +0200 Subject: [PATCH 54/59] tests: make the autofs test compatible with Fedora --- tests/xautofs/runtest.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/xautofs/runtest.sh b/tests/xautofs/runtest.sh index a0a2cb1..99a0988 100755 --- a/tests/xautofs/runtest.sh +++ b/tests/xautofs/runtest.sh @@ -56,8 +56,8 @@ rlJournalStart rlRun "echo '$AutomountDir localhost:/etc' > $DirectConf" \ 0 "Setting up autofs direct map" - # RHEL-7 is using xfs - rlIsRHEL 4 5 6 && fs="ext[34]" || fs="xfs" + # get fstype of /etc + fs="$(df --output=fstype /etc/ | tail -n1)" rlRun "pushd $TmpDir" rlPhaseEnd @@ -84,6 +84,7 @@ rlJournalStart rlRun "popd" rlRun "rlFileRestore" rlRun "rlServiceRestore autofs" + rlRun "umount --all --types autofs" rlRun "rm -r $TmpDir $DirectConf $MountDir" 0 "Removing tmp files" rlPhaseEnd rlJournalPrintText From 5b008081c86f83c2fdf6596fc30e20a4594dba60 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 17 Jul 2024 23:08:57 +0000 Subject: [PATCH 55/59] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index ff93649..3b773f7 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.10.0 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ @@ -118,6 +118,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Wed Jul 17 2024 Fedora Release Engineering - 1:4.10.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + * Tue Jul 02 2024 Lukáš Zaoral - 1:4.10.0-3 - fix autofs patch when stat was not performed (RHEL-43285) From 9f20b49faca66fa312a3fc4880f8b2995e6e2241 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 16 Jan 2025 18:17:46 +0000 Subject: [PATCH 56/59] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index 3b773f7..e349bf0 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.10.0 -Release: 4%{?dist} +Release: 5%{?dist} Epoch: 1 License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ @@ -118,6 +118,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Thu Jan 16 2025 Fedora Release Engineering - 1:4.10.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Wed Jul 17 2024 Fedora Release Engineering - 1:4.10.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From 9eac1a594a82d416db512b19af10d33b00e7b490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= Date: Tue, 24 Jun 2025 10:24:12 +0200 Subject: [PATCH 57/59] tests: migrate from STI to TMT --- .fmf/version | 1 + tests/smoke/main.fmf | 12 ++++++++++++ tests/smoke/runtest.sh | 3 +-- tests/tests.yml | 14 -------------- tests/xautofs/main.fmf | 21 +++++++++++++++++++++ tests/xautofs/runtest.sh | 3 +-- 6 files changed, 36 insertions(+), 18 deletions(-) create mode 100644 .fmf/version create mode 100644 tests/smoke/main.fmf delete mode 100644 tests/tests.yml create mode 100644 tests/xautofs/main.fmf diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/tests/smoke/main.fmf b/tests/smoke/main.fmf new file mode 100644 index 0000000..7def608 --- /dev/null +++ b/tests/smoke/main.fmf @@ -0,0 +1,12 @@ +summary: Smoke test for find and xargs. +description: '' +contact: Branislav Nater +component: + - findutils +test: ./runtest.sh +framework: beakerlib +recommend: + - findutils +duration: 5m +extra-summary: /CoreOS/findutils/Sanity/smoke +extra-task: /CoreOS/findutils/Sanity/smoke diff --git a/tests/smoke/runtest.sh b/tests/smoke/runtest.sh index 438548d..4ce0502 100755 --- a/tests/smoke/runtest.sh +++ b/tests/smoke/runtest.sh @@ -27,8 +27,7 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include rhts environment -. /usr/bin/rhts-environment.sh || exit 1 -. /usr/lib/beakerlib/beakerlib.sh || exit 1 +. /usr/share/beakerlib/beakerlib.sh || exit 1 PACKAGE="findutils" diff --git a/tests/tests.yml b/tests/tests.yml deleted file mode 100644 index 636db22..0000000 --- a/tests/tests.yml +++ /dev/null @@ -1,14 +0,0 @@ ---- -# Tests which will run in all contexts -- hosts: localhost - roles: - - role: standard-test-beakerlib - tags: - - classic - - container - - atomic - tests: - - smoke - - xautofs - required_packages: - - autofs # autofs required for xautofs test diff --git a/tests/xautofs/main.fmf b/tests/xautofs/main.fmf new file mode 100644 index 0000000..0cedf13 --- /dev/null +++ b/tests/xautofs/main.fmf @@ -0,0 +1,21 @@ +summary: Check xautofs option +description: | + Bug summary: [RFE] Modify find to be able to skip direct mapped autofs mounts + Bugzilla link: None + + Check that the new -xautofs option works as expected: make sure + find does not descend into directories on autofs filesystems. +contact: Branislav Nater +link: + - relates: https://bugzilla.redhat.com/show_bug.cgi?id=485672 + - relates: https://bugzilla.redhat.com/show_bug.cgi?id=529391 +component: + - findutils +test: ./runtest.sh +framework: beakerlib +recommend: + - autofs + - findutils +duration: 10m +extra-summary: /CoreOS/findutils/Sanity/options/xautofs +extra-task: /CoreOS/findutils/Sanity/options/xautofs diff --git a/tests/xautofs/runtest.sh b/tests/xautofs/runtest.sh index 99a0988..0a13995 100755 --- a/tests/xautofs/runtest.sh +++ b/tests/xautofs/runtest.sh @@ -27,8 +27,7 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include rhts environment -. /usr/bin/rhts-environment.sh -. /usr/share/rhts-library/rhtslib.sh +. /usr/share/beakerlib/beakerlib.sh || exit 1 PACKAGE="findutils" From f11b2f5f4d0fa04567454d6968482de9b4061905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= Date: Tue, 24 Jun 2025 14:21:02 +0200 Subject: [PATCH 58/59] tests: add a simple TMT test plan --- plans/ci.fmf | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 plans/ci.fmf diff --git a/plans/ci.fmf b/plans/ci.fmf new file mode 100644 index 0000000..c1627f9 --- /dev/null +++ b/plans/ci.fmf @@ -0,0 +1,5 @@ +summary: Basic smoke test +discover: + how: fmf +execute: + how: tmt From 5a4117b723b6108318a5a28df2594aa582a667d3 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 23 Jul 2025 20:31:56 +0000 Subject: [PATCH 59/59] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- findutils.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/findutils.spec b/findutils.spec index e349bf0..9af5035 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils Version: 4.10.0 -Release: 5%{?dist} +Release: 6%{?dist} Epoch: 1 License: GPL-3.0-or-later URL: https://www.gnu.org/software/findutils/ @@ -118,6 +118,9 @@ rm -f %{buildroot}%{_infodir}/dir %{_infodir}/find-maint.info.* %changelog +* Wed Jul 23 2025 Fedora Release Engineering - 1:4.10.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Thu Jan 16 2025 Fedora Release Engineering - 1:4.10.0-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild