summaryrefslogtreecommitdiff
path: root/source/a
diff options
context:
space:
mode:
Diffstat (limited to 'source/a')
-rw-r--r--source/a/bash/bash-5.0-patches/bash50-010172
-rw-r--r--source/a/bash/bash-5.0-patches/bash50-01159
-rwxr-xr-xsource/a/findutils/findutils.SlackBuild16
-rw-r--r--source/a/findutils/findutils.nolocate.diff88
-rw-r--r--source/a/findutils/patches/findutils-4.4.2-xautofs.patch132
-rw-r--r--source/a/findutils/patches/findutils-4.5.13-warnings.patch53
-rw-r--r--source/a/findutils/patches/findutils-4.5.15-no-locate.patch185
-rw-r--r--source/a/findutils/patches/findutils-4.6.0-exec-args.patch226
-rw-r--r--source/a/findutils/patches/findutils-4.6.0-fts-update.patch990
-rw-r--r--source/a/findutils/patches/findutils-4.6.0-gnulib-fflush.patch142
-rw-r--r--source/a/findutils/patches/findutils-4.6.0-gnulib-makedev.patch80
-rw-r--r--source/a/findutils/patches/findutils-4.6.0-internal-noop.patch195
-rw-r--r--source/a/findutils/patches/findutils-4.6.0-leaf-opt.patch83
-rw-r--r--source/a/findutils/patches/findutils-4.6.0-man-exec.patch44
-rw-r--r--source/a/findutils/patches/findutils-4.6.0-mbrtowc-tests.patch35
-rw-r--r--source/a/findutils/patches/findutils-4.6.0-test-lock.patch29
16 files changed, 308 insertions, 2221 deletions
diff --git a/source/a/bash/bash-5.0-patches/bash50-010 b/source/a/bash/bash-5.0-patches/bash50-010
new file mode 100644
index 00000000..bac7aa92
--- /dev/null
+++ b/source/a/bash/bash-5.0-patches/bash50-010
@@ -0,0 +1,172 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-010
+
+Bug-Reported-by: Thorsten Glaser <tg@mirbsd.de>
+Bug-Reference-ID: <156622962831.19438.16374961114836556294.reportbug@tglase.lan.tarent.de>
+Bug-Reference-URL: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=935115
+
+Bug-Description:
+
+Bash-5.0 changed the way assignment statements preceding special builtins
+and shell functions were handled in posix mode. They automatically created
+or modified global variables instead of modifying existing local variables
+as in bash-4.4.
+
+The bash-4.4 posix-mode semantics were buggy, and resulted in creating
+local variables where they were not intended and modifying global variables
+and local variables simultaneously.
+
+The bash-5.0 changes were intended to fix this issue, but did not preserve
+enough backwards compatibility. The posix standard also changed what it
+required in these cases, so bash-5.0 is not bound by the strict conformance
+requirements that existed in previous issues of the standard.
+
+This patch modifies the bash-5.0 posix mode behavior in an effort to restore
+some backwards compatibility and rationalize the behavior in the presence of
+local variables. It
+
+1. Changes the assignment semantics to be more similar to standalone assignment
+ statements: assignments preceding a function call or special builtin while
+ executing in a shell function will modify the value of a local variable
+ with the same name for the duration of the function's execution;
+
+2. Changes assignments preceding shell function calls or special builtins
+ from within a shell function to no longer create or modify global variables
+ in the presence of a local variable with the same name;
+
+3. Assignment statements preceding a shell function call or special builtin
+ at the global scope continue to modify the (global) calling environment,
+ but are unaffected by assignments preceding function calls or special
+ builtins within a function, as described in item 2. This is also similar
+ to the behavior of a standalone assignment statement.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/variables.c 2018-12-18 11:07:21.000000000 -0500
+--- variables.c 2019-08-22 10:53:44.000000000 -0400
+***************
+*** 4461,4467 ****
+
+ /* Take a variable from an assignment statement preceding a posix special
+! builtin (including `return') and create a global variable from it. This
+! is called from merge_temporary_env, which is only called when in posix
+! mode. */
+ static void
+ push_posix_temp_var (data)
+--- 4461,4467 ----
+
+ /* Take a variable from an assignment statement preceding a posix special
+! builtin (including `return') and create a variable from it as if a
+! standalone assignment statement had been performed. This is called from
+! merge_temporary_env, which is only called when in posix mode. */
+ static void
+ push_posix_temp_var (data)
+***************
+*** 4473,4486 ****
+ var = (SHELL_VAR *)data;
+
+! binding_table = global_variables->table;
+! if (binding_table == 0)
+! binding_table = global_variables->table = hash_create (VARIABLES_HASH_BUCKETS);
+!
+! v = bind_variable_internal (var->name, value_cell (var), binding_table, 0, ASS_FORCE|ASS_NOLONGJMP);
+
+ /* global variables are no longer temporary and don't need propagating. */
+! var->attributes &= ~(att_tempvar|att_propagate);
+ if (v)
+! v->attributes |= var->attributes;
+
+ if (find_special_var (var->name) >= 0)
+--- 4473,4497 ----
+ var = (SHELL_VAR *)data;
+
+! /* Just like do_assignment_internal(). This makes assignments preceding
+! special builtins act like standalone assignment statements when in
+! posix mode, satisfying the posix requirement that this affect the
+! "current execution environment." */
+! v = bind_variable (var->name, value_cell (var), ASS_FORCE|ASS_NOLONGJMP);
+!
+! /* If this modifies an existing local variable, v->context will be non-zero.
+! If it comes back with v->context == 0, we bound at the global context.
+! Set binding_table appropriately. It doesn't matter whether it's correct
+! if the variable is local, only that it's not global_variables->table */
+! binding_table = v->context ? shell_variables->table : global_variables->table;
+
+ /* global variables are no longer temporary and don't need propagating. */
+! if (binding_table == global_variables->table)
+! var->attributes &= ~(att_tempvar|att_propagate);
+!
+ if (v)
+! {
+! v->attributes |= var->attributes;
+! v->attributes &= ~att_tempvar; /* not a temp var now */
+! }
+
+ if (find_special_var (var->name) >= 0)
+***************
+*** 4576,4587 ****
+ {
+ int i;
+
+ tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1);
+ tempvar_list[tvlist_ind = 0] = 0;
+!
+! hash_flush (temporary_env, pushf);
+! hash_dispose (temporary_env);
+ temporary_env = (HASH_TABLE *)NULL;
+
+ tempvar_list[tvlist_ind] = 0;
+
+--- 4587,4601 ----
+ {
+ int i;
++ HASH_TABLE *disposer;
+
+ tempvar_list = strvec_create (HASH_ENTRIES (temporary_env) + 1);
+ tempvar_list[tvlist_ind = 0] = 0;
+!
+! disposer = temporary_env;
+ temporary_env = (HASH_TABLE *)NULL;
+
++ hash_flush (disposer, pushf);
++ hash_dispose (disposer);
++
+ tempvar_list[tvlist_ind] = 0;
+
+*** ../bash-5.0-patched/tests/varenv.right 2018-12-17 15:39:48.000000000 -0500
+--- tests/varenv.right 2019-08-22 16:05:25.000000000 -0400
+***************
+*** 147,153 ****
+ outside: declare -- var="one"
+ inside: declare -x var="value"
+! outside: declare -x var="value"
+! inside: declare -- var="local"
+! outside: declare -x var="global"
+ foo=<unset> environment foo=
+ foo=foo environment foo=foo
+--- 147,153 ----
+ outside: declare -- var="one"
+ inside: declare -x var="value"
+! outside: declare -- var="outside"
+! inside: declare -x var="global"
+! outside: declare -- var="outside"
+ foo=<unset> environment foo=
+ foo=foo environment foo=foo
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 9
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 10
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/source/a/bash/bash-5.0-patches/bash50-011 b/source/a/bash/bash-5.0-patches/bash50-011
new file mode 100644
index 00000000..a9ae690e
--- /dev/null
+++ b/source/a/bash/bash-5.0-patches/bash50-011
@@ -0,0 +1,59 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 5.0
+Patch-ID: bash50-011
+
+Bug-Reported-by: Matt Whitlock
+Bug-Reference-ID:
+Bug-Reference-URL: https://savannah.gnu.org/support/?109671
+
+Bug-Description:
+
+The conditional command did not perform appropriate quoted null character
+removal on its arguments, causing syntax errors and attempts to stat
+invalid pathnames.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.0-patched/subst.c 2018-12-22 17:43:37.000000000 -0500
+--- subst.c 2019-04-14 13:25:41.000000000 -0400
+***************
+*** 3626,3630 ****
+ SPECIAL is 2, this is an rhs argument for the =~ operator, and should
+ be quoted appropriately for regcomp/regexec. The caller is responsible
+! for removing the backslashes if the unquoted word is needed later. */
+ char *
+ cond_expand_word (w, special)
+--- 3642,3648 ----
+ SPECIAL is 2, this is an rhs argument for the =~ operator, and should
+ be quoted appropriately for regcomp/regexec. The caller is responsible
+! for removing the backslashes if the unquoted word is needed later. In
+! any case, since we don't perform word splitting, we need to do quoted
+! null character removal. */
+ char *
+ cond_expand_word (w, special)
+***************
+*** 3647,3650 ****
+--- 3665,3670 ----
+ if (special == 0) /* LHS */
+ {
++ if (l->word)
++ word_list_remove_quoted_nulls (l);
+ dequote_list (l);
+ r = string_list (l);
+*** ../bash-5.0/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 10
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 11
+
+ #endif /* _PATCHLEVEL_H_ */
diff --git a/source/a/findutils/findutils.SlackBuild b/source/a/findutils/findutils.SlackBuild
index 2b80de12..8c6e2b1f 100755
--- a/source/a/findutils/findutils.SlackBuild
+++ b/source/a/findutils/findutils.SlackBuild
@@ -79,19 +79,8 @@ find . \
# like to be yelled at.
zcat $CWD/findutils.no.default.options.warnings.diff.gz | patch -p1 --verbose || exit 1
-# Add patches from Fedora to finally make findutils-4.6.0 usable:
-zcat $CWD/patches/findutils-4.4.2-xautofs.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.5.13-warnings.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.5.15-no-locate.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.6.0-exec-args.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.6.0-fts-update.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.6.0-gnulib-fflush.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.6.0-gnulib-makedev.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.6.0-internal-noop.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.6.0-leaf-opt.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.6.0-man-exec.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.6.0-mbrtowc-tests.patch.gz | patch -p1 --verbose || exit 1
-zcat $CWD/patches/findutils-4.6.0-test-lock.patch.gz | patch -p1 --verbose || exit 1
+# Don't include updatedb, locate, frcode:
+zcat $CWD/findutils.nolocate.diff.gz | patch -p1 --verbose || exit 1
autoreconf -vif
@@ -104,6 +93,7 @@ CFLAGS="$SLKCFLAGS" \
make $NUMJOBS || make || exit 1
make install DESTDIR=$PKG || exit 1
+make install-man DESTDIR=$PKG || exit 1
# Now there is only FTS find, but make the old symlink in case any scripts
# out there are using it:
diff --git a/source/a/findutils/findutils.nolocate.diff b/source/a/findutils/findutils.nolocate.diff
index a3820f7a..74a365e1 100644
--- a/source/a/findutils/findutils.nolocate.diff
+++ b/source/a/findutils/findutils.nolocate.diff
@@ -1,22 +1,82 @@
---- ./Makefile.in.orig 2015-12-28 15:31:15.000000000 -0600
-+++ ./Makefile.in 2018-08-16 15:04:37.525329502 -0500
-@@ -1639,7 +1639,7 @@
+--- ./configure.ac.orig 2019-06-23 04:00:40.000000000 -0500
++++ ./configure.ac 2019-08-30 13:22:48.133114947 -0500
+@@ -94,7 +94,6 @@
+
+ dnl for gnulib
+ gl_EARLY
+-AC_PROG_LN_S
+ AC_PROG_INSTALL
+ AC_CHECK_TOOLS([AR], [ar])
+ AC_CHECK_TOOLS([RANLIB], [ranlib], [:])
+@@ -309,8 +308,6 @@
+ gl/Makefile
+ gl/lib/Makefile
+ lib/Makefile
+-locate/Makefile
+-locate/testsuite/Makefile
+ m4/Makefile
+ po/Makefile.in
+ po/Makefile
+--- ./doc/find.texi.orig 2019-08-30 13:21:12.626110869 -0500
++++ ./doc/find.texi 2019-08-30 13:22:56.395115300 -0500
+@@ -7,7 +7,6 @@
+ @c %**end of header
+
+ @include version.texi
+-@include dblocation.texi
+
+ @iftex
+ @finalout
+--- ./doc/Makefile.am.orig 2019-06-23 04:00:40.000000000 -0500
++++ ./doc/Makefile.am 2019-08-30 13:21:04.629110527 -0500
+@@ -16,11 +16,9 @@
+
+ info_TEXINFOS = find.texi find-maint.texi
+ find_TEXINFOS = perm.texi parse-datetime.texi regexprops.texi fdl.texi
+-BUILT_SOURCES = dblocation.texi
+-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 \
+ 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
+@@ -72,10 +70,6 @@
+ findutils.texi_html_node.tar.gz: find.html
+ tar zcf $@ $<
+
+-
+-dblocation.texi: ../locate/dblocation.texi
+- $(LN_S) ../locate/dblocation.texi $@
+-
+ find-info.tar.gz:
+ $(MKDIR_P) tmp-doc-install/info
+ $(MAKE) $(AM_MAKEFLAGS) \
+--- ./Makefile.in.orig 2019-08-29 14:15:43.000000000 -0500
++++ ./Makefile.in 2019-08-30 13:18:16.959103368 -0500
+@@ -1955,11 +1955,11 @@
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
+ ALL_RECURSIVE_TARGETS = check-root
ACLOCAL_AMFLAGS = -I gl/m4 -I m4
TESTFILE_SUFFIXES = .exp .xo .xe .xi
- all: config.h
---- ./Makefile.am.orig 2015-12-28 15:10:23.000000000 -0600
-+++ ./Makefile.am 2018-08-16 15:04:25.998328424 -0500
-@@ -9,7 +9,7 @@
+-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
+--- ./Makefile.am.orig 2019-06-23 04:00:40.000000000 -0500
++++ ./Makefile.am 2019-08-30 13:18:16.961103368 -0500
+@@ -35,7 +35,7 @@
- # "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
- ACLOCAL_AMFLAGS = -I gl/m4 -I 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
+
+ ALL_RECURSIVE_TARGETS =
diff --git a/source/a/findutils/patches/findutils-4.4.2-xautofs.patch b/source/a/findutils/patches/findutils-4.4.2-xautofs.patch
deleted file mode 100644
index c1ea81e4..00000000
--- a/source/a/findutils/patches/findutils-4.4.2-xautofs.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-From 17e470dc1acca4824b70328d733d5f99c12d0d65 Mon Sep 17 00:00:00 2001
-From: Kamil Dudka <kdudka@redhat.com>
-Date: Wed, 11 May 2011 16:46:45 +0200
-Subject: [PATCH 3/4] 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 +
- 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.
- There are two ways to avoid searching certain filesystems. One way is
- to tell @code{find} to only search one filesystem:
-
-+@deffn Option -xautofs
-+Don't descend directories on autofs filesystems.
-+@end deffn
-+
- @deffn Option -xdev
- @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
---- a/find/defs.h
-+++ b/find/defs.h
-@@ -557,6 +557,9 @@ struct options
- /* If true, don't cross filesystem boundaries. */
- bool stay_on_filesystem;
-
-+ /* If true, don't descend directories on autofs filesystems. */
-+ bool bypass_autofs;
-+
- /* If true, we ignore the problem where we find that a directory entry
- * 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
---- a/find/find.1
-+++ b/find/find.1
-@@ -520,6 +520,9 @@ to stat them; this gives a significant increase in search speed.
- .IP "\-version, \-\-version"
- Print the \fBfind\fR version number and exit.
-
-+.IP \-xautofs
-+Don't descend directories on autofs filesystems.
-+
- .IP \-xdev
- Don't descend directories on other filesystems.
-
-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)
- }
- }
-
-+ if (options.bypass_autofs &&
-+ 0 == strcmp ("autofs", filesystem_type (&statbuf, ent->fts_name)))
-+ {
-+ fts_set(p, ent, FTS_SKIP); /* descend no further */
-+ }
-+
- if ( (ent->fts_info == FTS_D) && !options.do_dir_first )
- {
- /* this is the preorder visit, but user said -depth */
-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);
- 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 */
- {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)
- }
-
- 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
- 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)
-
- p->full_days = false;
- p->stay_on_filesystem = false;
-+ p->bypass_autofs = false;
- p->ignore_readdir_race = false;
-
- if (p->posixly_correct)
---
-1.7.4.4
-
diff --git a/source/a/findutils/patches/findutils-4.5.13-warnings.patch b/source/a/findutils/patches/findutils-4.5.13-warnings.patch
deleted file mode 100644
index d04f6f88..00000000
--- a/source/a/findutils/patches/findutils-4.5.13-warnings.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 690d4bd9f29a805999a3ce4651dac9585ccc9917 Mon Sep 17 00:00:00 2001
-From: Kamil Dudka <kdudka@redhat.com>
-Date: Wed, 11 May 2011 16:46:57 +0200
-Subject: [PATCH 1/2] findutils-4.5.7-warnings.patch
-
----
- xargs/xargs.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-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 *
- * utility if we run it, for POSIX compliance on the
- * handling of exit values.
- */
-- write (fd[1], &errno, sizeof (int));
-+ int sink = write (fd[1], &errno, sizeof (int));
-+ (void) sink;
- }
-
- close (fd[1]);
---
-1.7.1
-
-
-From c5654b9ca5f50daa1ca406ebd7b4546f24d00db6 Mon Sep 17 00:00:00 2001
-From: Kamil Dudka <kdudka@redhat.com>
-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/source/a/findutils/patches/findutils-4.5.15-no-locate.patch b/source/a/findutils/patches/findutils-4.5.15-no-locate.patch
deleted file mode 100644
index 7bf1f336..00000000
--- a/source/a/findutils/patches/findutils-4.5.15-no-locate.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-From 3e5e311d23ac0a5bd5930ddb4094f7555b886329 Mon Sep 17 00:00:00 2001
-From: Kamil Dudka <kdudka@redhat.com>
-Date: Sat, 19 Dec 2015 22:56:40 +0100
-Subject: [PATCH 1/2] Revert "Don't include dblocation.texi from original spot,
- symlink it."
-
-This reverts commit f59d88e456553dfe0b5185caf75e4041285fd595.
----
- configure.ac | 2 +-
- doc/Makefile.am | 8 +-------
- doc/find.texi | 2 +-
- 3 files changed, 3 insertions(+), 9 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
-+++ b/doc/Makefile.am
-@@ -16,11 +16,9 @@ AM_CFLAGS = $(WARN_CFLAGS)
-
- info_TEXINFOS = find.texi find-maint.texi
- find_TEXINFOS = perm.texi parse-datetime.texi regexprops.texi fdl.texi
--BUILT_SOURCES = dblocation.texi
--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
- 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
---
-2.5.0
-
-
-From d5473caa86f689ebcadacc593f5a71781c99e829 Mon Sep 17 00:00:00 2001
-From: Kamil Dudka <kdudka@redhat.com>
-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(-)
-
-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
-
-
- # "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
-
- ACLOCAL_AMFLAGS = -I gl/m4 -I m4
-
-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
- gl/Makefile
- gl/lib/Makefile
- lib/Makefile
--locate/Makefile
--locate/testsuite/Makefile
- m4/Makefile
- po/Makefile.in
- po/Makefile
-diff --git a/doc/find.texi b/doc/find.texi
-index c2714dd..01367a4 100644
---- a/doc/find.texi
-+++ b/doc/find.texi
-@@ -7,7 +7,6 @@
- @c %**end of header
-
- @include version.texi
--@include ../locate/dblocation.texi
-
- @iftex
- @finalout
-@@ -571,8 +570,7 @@ the databases are updated, and the directories for which they contain
- entries.
-
- Here is how to select which file name databases @code{locate}
--searches. The default is system-dependent. At the time this document
--was generated, the default was @file{@value{LOCATE_DB}}.
-+searches. The default is system-dependent.
-
- @table @code
- @item --database=@var{path}
-@@ -2892,13 +2890,9 @@ thrashing the network.
- directories are indexed by each database file.
-
- The default location for the locate database depends on how findutils
--is built, but the findutils installation accompanying this manual uses
--the default location @file{@value{LOCATE_DB}}.
--
--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
--``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
-+a ``secure'' database in @file{/var/lib/slocate/slocate.db}.
-
- @node Database Formats
- @section Database Formats
-@@ -3438,8 +3432,7 @@ present.
-
- @item --database=@var{path}
- @itemx -d @var{path}
--Instead of searching the default @code{locate} database
--@file{@value{LOCATE_DB}}, @code{locate} searches the file
-+@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
-@@ -3614,8 +3607,7 @@ The environment variable @code{PRUNEFS} also sets this value. Default
- is @file{nfs NFS proc}.
-
- @item --output=@var{dbfile}
--The database file to build. The default is system-dependent, but
--when this document was formatted it was @file{@value{LOCATE_DB}}.
-+The database file to build.
-
- @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).
- @section Error Messages From @code{locate}
-
- @table @samp
--@item warning: database @file{@value{LOCATE_DB}} is more than 8 days old
-+@item warning: database @file{LOCATE_DB} is more than 8 days old
- 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
- periodic ``cron'' task which normally does this doesn't get a chance
- to run.
-
--@item locate database @file{@value{LOCATE_DB}} is corrupt or invalid
-+@item locate database @file{LOCATE_DB} is corrupt or invalid
- 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.
---
-2.5.0
-
diff --git a/source/a/findutils/patches/findutils-4.6.0-exec-args.patch b/source/a/findutils/patches/findutils-4.6.0-exec-args.patch
deleted file mode 100644
index 7f80aeea..00000000
--- a/source/a/findutils/patches/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 <mail@bernhard-voelker.de>
-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 <indiajoe@gmail.com> in
-https://savannah.gnu.org/bugs/?48030
-
-Upstream-commit: 8cdc9767e305c9566f537af9d1acf71d1bc6ee8e
-Signed-off-by: Kamil Dudka <kdudka@redhat.com>
----
- 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 <http://www.gnu.org/licenses/>.
-+#
-+
-+# 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/source/a/findutils/patches/findutils-4.6.0-fts-update.patch b/source/a/findutils/patches/findutils-4.6.0-fts-update.patch
deleted file mode 100644
index 60255148..00000000
--- a/source/a/findutils/patches/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 <kdudka@redhat.com>
-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 <http://www.gnu.org/licenses/>. */
-+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
-
- /*-
- * Copyright (c) 1990, 1993, 1994
-@@ -46,9 +46,9 @@
-
- #include <config.h>
-
--#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 <sys/vfs.h>
-
- /* 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 <https://bugzilla.redhat.com/1252549>. */
-- 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 <https://bugs.debian.org/143111>. */
-+ FALLTHROUGH;
-+ case S_MAGIC_NFS:
-+ /* NFS provides usable dirent.d_type but not necessarily for all entries
-+ of large directories, so as per <https://bugzilla.redhat.com/1252549>
-+ NFS should return true. However st_nlink values are not accurate on
-+ all implementations as per <https://bugzilla.redhat.com/1299169>. */
-+ 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 <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=143111> /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 <http://www.gnu.org/licenses/>. */
-+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
-
- /*
- * 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 <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 <eggert@cs.ucla.edu>
-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 <kdudka@redhat.com>
----
- 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 <https://bugs.debian.org/143111>. */
- FALLTHROUGH;
-+ case S_MAGIC_CIFS:
-+ /* Leaf optimization causes 'find' to abort. See
-+ <https://lists.gnu.org/r/bug-gnulib/2018-04/msg00015.html>. */
-+ FALLTHROUGH;
- case S_MAGIC_NFS:
- /* NFS provides usable dirent.d_type but not necessarily for all entries
- of large directories, so as per <https://bugzilla.redhat.com/1252549>
---
-2.14.3
-
-
-From ff64329a046e76ba553c15373ed61bbed814d286 Mon Sep 17 00:00:00 2001
-From: Paul Eggert <eggert@cs.ucla.edu>
-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 <kdudka@redhat.com>
----
- 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/source/a/findutils/patches/findutils-4.6.0-gnulib-fflush.patch b/source/a/findutils/patches/findutils-4.6.0-gnulib-fflush.patch
deleted file mode 100644
index 47ac93bb..00000000
--- a/source/a/findutils/patches/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 <eggert@cs.ucla.edu>
-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 <kdudka@redhat.com>
----
- 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
- <stdio.h>, 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
- <stdio.h>, 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/source/a/findutils/patches/findutils-4.6.0-gnulib-makedev.patch b/source/a/findutils/patches/findutils-4.6.0-gnulib-makedev.patch
deleted file mode 100644
index 5ed4b480..00000000
--- a/source/a/findutils/patches/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 <eblake@redhat.com>
-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 <sys/sysmacros.h>.
- For historical compatibility, it is currently defined by
- <sys/types.h> as well, but we plan to remove this soon.
- To use `makedev', include <sys/sysmacros.h> directly.
- If you did not intend to use a system-defined macro `makedev',
- you should #undef it after including <sys/types.h>.
- [-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 <eblake@redhat.com>
-
-Upstream-commit: 4da63c5881f60f71999a943612da9112232b9161
-Signed-off-by: Kamil Dudka <kdudka@redhat.com>
----
- 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 <sys/param.h>
- #endif
-
-+#if MAJOR_IN_MKDEV
-+# include <sys/mkdev.h>
-+#elif MAJOR_IN_SYSMACROS
-+# include <sys/sysmacros.h>
-+#endif
-+
- #if defined MOUNTED_GETFSSTAT /* OSF_1 and Darwin1.3.x */
- # if HAVE_SYS_UCRED_H
- # include <grp.h> /* 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/source/a/findutils/patches/findutils-4.6.0-internal-noop.patch b/source/a/findutils/patches/findutils-4.6.0-internal-noop.patch
deleted file mode 100644
index 1c8fdd9b..00000000
--- a/source/a/findutils/patches/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 <mail@bernhard-voelker.de>
-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 <tavianator@tavianator.com> in
- https://savannah.gnu.org/bugs/?48180
-
-Upstream-commit: 595060f28eb5f658fa8d98970959c617fab0f078
-Signed-off-by: Kamil Dudka <kdudka@redhat.com>
----
- 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 <http://www.gnu.org/licenses/>.
-+#
-+
-+# 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/source/a/findutils/patches/findutils-4.6.0-leaf-opt.patch b/source/a/findutils/patches/findutils-4.6.0-leaf-opt.patch
deleted file mode 100644
index 7fb3035b..00000000
--- a/source/a/findutils/patches/findutils-4.6.0-leaf-opt.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From 1328926a705fdb4728c1f255dd368de928736d39 Mon Sep 17 00:00:00 2001
-From: Kamil Dudka <kdudka@redhat.com>
-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 <kdudka@redhat.com>
-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/source/a/findutils/patches/findutils-4.6.0-man-exec.patch b/source/a/findutils/patches/findutils-4.6.0-man-exec.patch
deleted file mode 100644
index 6a64568d..00000000
--- a/source/a/findutils/patches/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 <kdudka@redhat.com>
-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 <kdudka@redhat.com>
----
- 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/source/a/findutils/patches/findutils-4.6.0-mbrtowc-tests.patch b/source/a/findutils/patches/findutils-4.6.0-mbrtowc-tests.patch
deleted file mode 100644
index a1406541..00000000
--- a/source/a/findutils/patches/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 <ueno@gnu.org>
-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 <kdudka@redhat.com>
----
- 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/source/a/findutils/patches/findutils-4.6.0-test-lock.patch b/source/a/findutils/patches/findutils-4.6.0-test-lock.patch
deleted file mode 100644
index 780987ef..00000000
--- a/source/a/findutils/patches/findutils-4.6.0-test-lock.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 129f23ce758620fade812baab811379ce8454048 Mon Sep 17 00:00:00 2001
-From: rpm-build <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
-