Age | Commit message (Collapse) | Author |
|
The Linux man page says I can use AT_SYMLINK_NOFOLLOW. It works in glibc,
uclibc, and klibc, but musl returns -EINVAL any time you pass in that flag
and the maintainer says that's not a bug and insists the man page and those
other libraries all change to match musl's behavior.
Toybox uses it to avoid scheduling unnecessary metadata writes for things we're
about to delete (have to chmod unreadable directories so we can descend into
them to delete their contents, the chmod happens before we descend so the
disk I/O has plenty of time to be scheduled) because the extra writes wear out
SSD faster. It's just an optimization and I don't really care if it works
_well_ (the fchmodat call _also_ takes AT_SYMLINK_NOFOLLOW so that's covered),
but musl's behavior uniquely makes the check always error and thus breaks normal
"rm -r".
Yes this workaround is checking #ifdef __MUSL__ which the library does not
supply (because its code is perfect and will thus never need to be worked
around). You can CFLAGS=-D__MUSL__ if you don't echo "#define __MUSL__" >>
include/features.h when installing the library.
|
|
I've been locally patching uClibc to not violate posix-2008 (you don't need
to define a GNU macro to get a posix function), but uClibc is obsolete and
moribund (development peaked in 2006, last bugfix release was over 2 years
ago), and the largest remaining user (buildroot) doesn't bother to apply such
a patch. Since even buildroot is slowly migrating to musl-libc, just do the
portability tweak for what the last release of the old thing actually did.
|
|
|
|
portability.h.patch - it is for O_CLOEXEC, as compiler complained of it.
Makefile.patch - for cleaning generated/*.o files and libopts.dat file
[Fixup to uniq.c from Rob.]
|
|
Use wcwidth() instead of strlen(), and extend the -q substitution to also
whiteout nonprintable characters that are nonparseable utf8 snippets.
|
|
or float for FLOAT arguments. (I.E. whether double fits in a long's memory.) Check in a way that the macros not being defined just gives us the shorter one.
|
|
cross compiling, so just #define it to 0 if it's not in fcntl.h where posix-2008 says.
|
|
networking). Move headers standards ignore (but which have been there >15 years) to lib/portability.h. Fold xregcomp into lib since it's posix.
|
|
* __GLIBC__ was checked unconditionally;
this made for a very messy build on musl.
* int fd in chvt is always initialized; GCC 3.4 does not recognize this.
|
|
sys/mount.h...
|
|
|
|
doesn't conform to posix-2008.
|
|
supply them for broken headers.
|
|
|
|
symbols out of specific library version checks (shouldn't hurt anything), remove obsolete debug macro.
|
|
|
|
|
|
other stuff. Fix it up in portability.h.
|
|
use flag macros, option parsing can collect argument strings in global block, use existing perror_* macros.
|
|
we need, but require a boot to the headers to get them to admit it. Note that uClibc lies and claims to be glibc so we have to specifically exclude it here.
|
|
prototyped in unistd.h. The fact glibc refuses to do so without a wacky #define is a glibc bug, treat it as such.
|
|
fprintf().
|
|
|
|
|
|
|
|
|
|
|
|
CFG_TOYSH_DEBUG to shut up the spurious "gcc can't tell that this is never
actually used uninitialized because gcc is stupid" warnings.
|
|
shouldn't be a problem if we register signal handlers with sigaction(SA_RESTART)
Straighten out count and len (I generally consistently use "count" for the
current progress and "len" for the total, but this time I got them backwards
for some reason and don't want to confuse myself in future.)
|
|
|