find: use sysconf(_SC_ARG_MAX) to determine the command-line size limit

The find utility uses a hardcoded value of 32 * 1024 as the limit of
the command-line length when calling 'find -exec ... {} +'. This results
in over 4 times more execve() calls than in coreutils' find.

This patch uses the limit defined in system headers.

Based on the patch by  Bartosz Golaszewski <bartekgola@gmail.com>.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2014-06-22 13:54:40 +02:00
parent 6be3a5242c
commit f92f1d0181
5 changed files with 38 additions and 17 deletions

View File

@@ -92,6 +92,7 @@ lib-y += skip_whitespace.o
lib-y += speed_table.o
lib-y += str_tolower.o
lib-y += strrstr.o
lib-y += sysconf.o
lib-y += time.o
lib-y += trim.o
lib-y += u_signal_names.o

16
libbb/sysconf.c Normal file
View File

@@ -0,0 +1,16 @@
/* vi: set sw=4 ts=4: */
/*
* Various system configuration helpers.
*
* Copyright (C) 2014 Bartosz Golaszewski <bartekgola@gmail.com>
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
#if defined _SC_ARG_MAX
unsigned FAST_FUNC bb_arg_max(void)
{
return sysconf(_SC_ARG_MAX);
}
#endif