Currently when you disable fancy echo, escape sequences are hardcoded
enabled (e.g. as if you used `echo -e` all the time). The opposite
behavior is more desirable (always disable -e support) because:
* This seems to contradict the spirit of the kconfig help text (where
it says enable support for -n/-e flags), although you could say that
we aren't supporting the -e flag directly as `echo -e` will show the
-e flag.
* POSIX makes escape sequences optional, and even says they are there
only on XSI-conformant systems.
* It saves space (~100 bytes on x86_64).
* It makes things faster!
* It makes it behave more like bash where you need an explicit -e flag
in order for escape sequences to be interpreted.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
The CPPFLAGS/CFLAGS settings might have features that matter, so make
sure we utilize them when testing the compiler.
URL: https://bugs.gentoo.org/471118
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
When you build with FEATURE_INSTALLER disabled, you get a build
warning like so:
libbb/appletlib.c: In function 'busybox_main':
libbb/appletlib.c:691:7: warning: variable 'use_symbolic_links' set but
not used [-Wunused-but-set-variable]
int use_symbolic_links;
^
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
The -i/-o options were missing, and the -r/-s/-v options were
incorrectly labeled as "OS" instead of "kernel".
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
If our pkg-config queries pass back a flag like -pthread, the trylink
script will expand that to -l-pthread. So change trylink to only add
the -l prefix to a value that doesn't have a - prefix already.
Reported-by: thaehaid@incognitomail.org
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
If the target can tolerate these issues, then gcc is smart enough
to generate the same code (x86_64 produces the same code). If the
target can't, then it needs the memcpy anyways.
libbb/hash_md5_sha.c: In function 'common64_end':
libbb/hash_md5_sha.c:87:4: warning:
dereferencing type-punned pointer will break strict-aliasing rules
*(uint64_t *) (&ctx->wbuffer[64 - 8]) = t;
libbb/hash_md5_sha.c: In function 'sha512_end':
libbb/hash_md5_sha.c:886:4: warning:
dereferencing type-punned pointer will break strict-aliasing rules
*(uint64_t *) (&ctx->wbuffer[128 - 8]) = t;
libbb/hash_md5_sha.c:889:4: warning:
dereferencing type-punned pointer will break strict-aliasing rules
*(uint64_t *) (&ctx->wbuffer[128 - 16]) = t;
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This also fixes a minor buffer overflow when displaying threads as
add_proc() only expects COMM_LEN bytes, but we give it one more than
that.
Reported-by: Dag Wieers <dag@wieers.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This makes reading the logic (as well as adding new code) a lot simpler,
and fixes one or two cases that were broken due to incorrect sub-version
tests.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
The realpath utility requires all paths exist when canonicalizing
symlinks. If /etc/resolv.conf points to a tmpfs, then it might
not exist initially. Use `readlink -f` so that we follow all
symlinks that are available.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
The -q flag is used in shell scripts for suppressing output.
Have our applets swallow the flag for compatibility.
Reported-by: Mandeep Singh Baines <msb@chromium.org>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Some shells (like dash) are lame and omit the POSIX increment/decrement
feature (because it is listed as optional). Tweak the shell script to
work in all POSIX variants.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Often it is desirable to have /etc/ be on read-only storage (well, the
whole rootfs) but have things like /etc/resolv.conf be symlinks to a
writable location. Tweak the simple script to support that.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Newer versions of libselinux has started linking against more libs.
Rather than continuing hardcoding things, switch to using pkg-config
to query for its dependencies.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
We pass strings to printf directly a lot. Some distros enable some flags
in their gcc by default like -Wformat-security. With these two things, we
end up with a lot of build warnings like so:
loginutils/chpasswd.c:42:3: warning: format not a string literal and
no format arguments [-Wformat-security]
But we don't care. Our focus is first and foremost on size, so adding a
lot of dummy calls like:
- printf(some_constant_string);
+ printf("%s", some_constant_string);
is pointless bloat.
Disable this warning flag if the compiler supports it.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
We use functions from sys/resource.h in misc applets, but don't include
the header. This breaks building with newer glibc versions, so add the
include where needed.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
These utils use funcs from utmp.h (like setutent), but utmp.h is only
included when FEATURE_UTMP is enabled. Otherwise we get build failures
due to missing defines/prototypes. So depend on this option.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
With inetd.conf files that skip argv[], inetd execs programs with argc==0.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
The shell parsing of files is incredibly slow on many systems. With
one report, the process was taking a minute or two which made people
thing the build was hung. So rewrite the craziness with sed and proper
shell functions. On an idle system, this cut the runtime by half.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
If modules contain circular dependencies, the depmod script will follow
the circle forever. So add a simple sanity check to abort rather than
chew up the CPU.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
The source command does not search $PWD, and bash recently fixed itself to
follow this behavior for /bin/sh.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Sometimes variable expansions yield empty strings, and if they happen to
be a command someone wants to run like `$foo`, then hush currently
segfaults. So handle `` and $().
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Commit ee5dce3365 made busybox require shadow.h from the toolchain even
if the config opted for the internal busybox implementation. This makes
building with toolchains that lack shadow support impossible. Since the
merge only saved us from duplicating a simple structure (whose ABI isn't
going to ever change), restore the logic for complete busybox shadow
independence by reverting that previous commit slightly.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
The previous fix up loaded dependencies two deep, but really that was an
incomplete fix as we need to load dependencies all the way down. So change
the code to run recursively through all dependencies.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Declare the variable in the scope it is used rather than the entire
function scope so it's obvious it is only used there.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Some people like to use ${?} rather than $?, so make sure we support all
the special single char vars that use this form.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
The getopt function in some C libraries wraps the option in single quotes
while others do not. Avoid the issue by running sed on the output and
strip all quotes.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Implement support for the POSIX `type` command. Only POSIX stuff is
supported here, no bash extensions like -p or -P.
In the process, split the $PATH searching code out of builtin_source() and
into its own find_in_path() function so we don't duplicate it.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
The helper script needs updating to match latest busybox modprobe behavior
in that all dependencies need to be listed, not just the immediate ones.
Along the way, fix symbol prefixed ports, optimize the output, and add
some more depmod compatible options.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
We can't use C if(...) with ENABLE_FEATURE_TAR_UNAME_GNAME because it
relies on conditional members in the file_header_t structure:
archival/libunarchive/data_extract_all.c: In function ‘data_extract_all’:
archival/libunarchive/data_extract_all.c:123: error: ‘file_header_t’ has no member named ‘uname’
archival/libunarchive/data_extract_all.c:124: error: ‘file_header_t’ has no member named ‘uname’
archival/libunarchive/data_extract_all.c:127: error: ‘file_header_t’ has no member named ‘gname’
archival/libunarchive/data_extract_all.c:128: error: ‘file_header_t’ has no member named ‘gname’
make[1]: *** [archival/libunarchive/data_extract_all.o] Error 1
Signed-off-by: Mike Frysinger <vapier@gentoo.org>