<html><head><title>toybox news</title>
<!--#include file="header.html" -->

<p>Toybox combines common Linux command line utilities together
into a single BSD-licensed executable that's simple, small, fast,
reasonably standards-compliant, and powerful enough to turn Android into
a development environment. See the links on the left for details.</p>

<h2>News</h2>

<a name="21-05-2019" /><a href="#21-05-2019"><hr><h2><b>May 21, 2019</b></h2></a>
<blockquote>
<p>"I like the cover," he said. "'Don't Panic.' It's the first helpful or intelligible thing anybody's said to me all day."</p> <p>- The Hitchhiker's Guide to the Galaxy</p>
</blockquote>

<p><a href=downloads/toybox-0.8.1.tar.gz>Toybox 0.8.1</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.8.1>git commit</a>)
is out.</p>

<p>Android is now using toybox as part of a <a href=http://lists.landley.net/pipermail/toybox-landley.net/2018-November/009824.html>"hermetic" build</a>
(meaning Android is building under toybox, which is halfway to Android
building under Android). See Android's <a href=https://android.googlesource.com/platform/prebuilts/build-tools/+log>build-tools</a> and <a href=https://android.googlesource.com/platform/build/soong/+log>soong</a> repositories to follow along with development, or check the list for the <a href=http://lists.landley.net/pipermail/toybox-landley.net/2019-May/010485.html>current status</a>.</p>

<p><u>New commands</u>: Isaac Dunham added <b>mcookie</b>, which is used by
X11. Elliott Hughes added <b>devmem</b>, which replaces toolbox's "r".</p>

<p><u>Promoted</u>: <b>tar</b>, <b>gunzip</b>, and <b>zcat</b> were cleaned
up and moved out of pending.
Tar is a near-rewrite with support for --owner --group and --sparse,
capable of autodetecting "wget blah.tar.bz2 -O - | tar xv", a --restrict option
that only allows files to extract into a single subdirectory, and so on.</p>

<p><u>Added to pending</u>:
Jarno Mäkipää contributed a new <b>vi</b> implementation. Makepost added
<b>man</b>.</p>

<p><u>Updates</u>: Elliott added <b>find</b> -wholename/-iwholename, -printf,
and -context, <b>grep</b> --exclude-dir, and <b>echo</b> -E.
Rob added <b>blkid</b> -U and -L, <b>mount</b> now has UUID= support via blkid -U,
you can now specify TZ="blah" in the <b>date</b> -d input string (although
why the double quotes are required is an open question), and <b>sed</b> now
understands ,+N relative ranges. Makepost added <b>rm</b> -v.
The human_readable fields in <b>ps</b>/<b>top</b>/<b>iotop</b> now use all
available space to show more precision, <b>iotop</b> displays swap bandwidth
properly (it was showing a signed field as unsigned), and
<b>touch</b> -t and -d autodetect the time format.</p>

<p><u>Cleanups</u>: In pending Rob did some bc cleanup,
Colin Davidson did some arp cleanup, 
Uros Prestor fixed route argument parsing, and
in bc Daniel Rosenberg fixed bc_vec_concat()'s allocation and
Gavin Howard fixed an overflow bug in bc_num_ulong().</p>

<p>Elliott made scan_key() detect cursor keys and such with several more
terminal types, made more better about directories and non-tty output,
cleaned up inconsistent uses of ARRAY_LEN(), taught file
to recognize a c-sky ELF machine, and fixed timezone and daylight
savings time issues in date and its tests.
Rob simplified netcat and ping using new lib/net.c infrastructure.
When run as non-PID 1 (for a chroot) oneit's exit code now indicates
which signal it's exiting due to.
Hadrian Węgrzynowski #defined constants for mkpathat.
Date now uses the current time for unspecified fields (instead of zeroing
them), and should set the weekday properly.
Sort's -k2.3,4.5 syntax is now documented and behaves more closely to
other implementations (silly as that behavior is).
Significant speedup to sed s/a/b/g on a megabyte long line (it was
O(n^2) and now it's quite snappy).</p>

<p>Several cases of warning about stdout failing to write were silenced
because things like piping the output to head means stdout is a special
case: its output is often discarded and that's fine. And xprintf()
and friends only checks stdout for errors so it can exit early ("yes | head"
should not spin endlessly) without actually flushing anything.
There's an ongoing design debate about line buffering stdin and stdout
that'll have to be resolved next dev cycle.</p>

<p><u>Bugs</u>:
Elliott sent in a lot of fixes for building AOSP with toybox:
support for more date formats, sed substitution of empty capture groups
and an endless loop with -EPIPE, fixed find -path/-ipath, made loggit()
only feed LOG_AUTH to syslog when we have a tty, gave grep a bunch
of --longname synonyms for short options, added getfattr --only-values,
and timeout --foreground --preserve-status and --signal.</p>

<p>Top got a lot of tweaks: it no longer collates thread's CPU usage into the
parent thread (in -H mode), hides the cursor in interactive mode, updates the
display properly in batch mode, and accepts ENTER
as a synonym for SPACE when refreshing the display. The header lines
now abbreviate long numbers with units (via human_readable()),
more reliably spans the terminal width, and says "Thread" instead
of "Task" when it's showing threads. The task/thread count now adds up
(understanding more kernel states and treating unknown ones as "sleeping").
Top now treats -o "" as an error (previously it displayed an empty screen).</p>

<p>William Djupström pointed out login needs to chown() the tty, and made it
clear the environment when -p is absent.
Vidar Holen fixed inverted find -exec exit status.
Rob made chgrp() stop relying on libc's printf("%s", NULL) printing "(null)"
because a <a href=https://github.com/varnishcache/varnish-cache/issues/2879>newly added gcc bug</a> turns that into a build break, and
fixed an outright embarassing xstrndup() bug.
Liwugang fixed a segfault when stat's format string had a trailing %.
A missing else in grep meant -x was sometimes ignored.</p>

<p><u>Infrastructure</u>:
in the build scripts/portability.sh now tests that the compiler it's trying
to use exists up front. We no longer link against librt because on glibc that's
pulling in libpthread for some unknown reason.</p>

<p>TOYFLAG_ARGFAIL() lets commands return custom exit values when option parsing
fails (because AOSP build scripts cared), so timeout --unknown returns 125
and so on: chroot, diff, cmp, env, grep, nohup, and sort also use it now with
various values.</p>

<p>New FLAG() macros: FLAG(x) expands to (toys.optflags&FLAG_x) and returns
zero if the command line argument's bit isn't set and nonzero if it is
(meaning -x was or wasn't encountered on the command line this time by
lib/args.c). Lots of commands got converted to use them.</p>

<p>New lib/env.c with reset_env(), xsetenv(), and xunsetenv() which frees
the old environment variable when it wasn't inherited from exec(). This
lets long-running loops reset environment variables without memory leaks.</p>

<p>New xnotify() plumbing in lib/portability.c with Linux and BSD versions
(which should also work on MacOS X).</p>

<p>New xparsedate() and xvali_date() functions allow date, tar --mtime, and
touch to understand the same date formats,
xpopen_both() now knows how to use existing filehandles for the child's
stdin/stdout, and no longer redirects stderr (which hides errors),
new nanomove(), nanodiff(), union socksaddr, xrecvwait(),
and human_readable_long() to show more than 3 digits of output.</p>

<p>Taught xgetaddrinfo() to return a wildcard address for a NULL host,
xconnbind() sets SO_REUSEADDR by default,
fileunderdir() returns the abspath to the file now (since we had to work
it out anyway), and
xabspath() uses O_PATH now (because Android's SELinux rules got more aggressive).</p>

<p>Several new xsendfile() variants, including sendfile_len() to copy
a specific amount of data and xsendfile_pad() to append zeroes to the
output when there isn't enough input.</p>

<p>regexec0() is now using libc's REG_STARTEND supported by every libc out
there _except_ musl. (It originated in BSD and was adopted by glibc, bionic,
and uClibc 15 years ago, and is also supported in macosx. Musl's maintainer
<a href=https://www.openwall.com/lists/musl/2013/01/15/26>turned down</a>
the feature request as an invalid use case he didn't think they should
be trying to do.)</p>

<p><u>Docs</u>:
the <a href=license.html>license page</a> now has an SPDX identifier, and links to more
history/context. The actual LICENSE file had its title line removed
so <a href=https://github.com/github/choosealicense.com/pull/643#issuecomment-463746027>github could recognize it</a> as 0BSD. (We're still waiting for
"<a href=https://github.com/github/choosealicense.com/pull/643#issuecomment-464380789>a while</a>" to pass before github actually does, though.)</p>

<p>A new www/doc/mount.txt file describes how mount works under the covers.</p>

<p.Rob consistently misspelled "canonical" and "millisecond", mountpoint
has a synopsis now,
Kevin van der Kamp fixed a typo in netstat's help text, and Elliott
Hughes fixed typos everywhere and made the tense, capitalization, and
punctuation of help text more consistent.</p>

<p>New paragraph in the code style part of design.html explaining that
"char* a, b;" is not how C works, and since you wind up with "char *a, b;"
anyway you might as well say that.</p>

<p>Given dreamhost's tendency to repeatedly delete the mailing list
archive, the nav bar on the left links to a backup web archive now too.</p>

<p>The FAQ now says why we do time based releases.</p>

<p><u>Testing</u>: Added VERBOSE=nopass to not show passing tests.
The test suite now does an rm -rf on testdir between each command so
debris files don't accumulate.
New skipnot function skips the next test if a command line fails, and
toyonly function only runs command when we're testing the toybox version
of command. (This isn't the same as TEST_HOST, the host version could be
toybox.)
The find -newer test calls "sleep .1" to avoid intermittently failing with an
identical timestamp.
Elliott added the start of a file.test rogues gallery.
No longer call lsattr in "make tests" because the behavior differs by
filesystem and it needs fixing somehow.</p>

<a name="08-02-2019" /><a href="#08-02-2019"><hr><h2><b>February 8, 2019</b></h2></a>
<blockquote>
<p>"Most readers get as far as the Future Semiconditionally Modified
Subinverted Plagal Past Subjunctive Intentional before giving up; and
in fact in later editions of the book all pages beyond this point have
been left blank to save on printing costs."</p>
<p>- The Hitchhiker's Guide to the Galaxy</p>
</blockquote>

<p><a href=downloads/toybox-0.8.0.tar.gz>Toybox 0.8.0</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.8.0>git commit</a>)
is out.</p>

<p>Toybox now builds on MacOS and FreeBSD, thanks to the efforts of Elliott
Hughes and Ed Maste respectively. Use the "make macos_defconfig" and "make
freebsd_defconfig" targets to enable the set of commands that compile on
each so far.</p>

<p><u>New commands</u>: Added an <b>sntp</b> client/server (RFC 4330 Simple Network Time
Protocol, a compatible subset of ntp). The <b>test</b> command was rewritten
and promoted out of pending.</p>

<p><u>New options</u>: <b>grep</b> now has --color, supports embedded NUL bytes in its input,
recognizes binary files, and passes all of grep.test (in case you
needed the middle numerical field of -bB, etc).
Josh Gao added ipv6 and UDP support to <b>netcat</b>.
Volodymyr Medvid reported that install -d doesn't honor -o or -g.
Elliott Hughes did a lot of work to support hermetic Android/AOSP builds:
<b>mkdir</b> accepts both --parent and --parents as synonyms for -p, <b>touch</b> ignores -f,
<b>basename</b> added -s to remove a trailing suffix, <b>dirname</b> now supports multiple
arguments, <b>cmp</b> accepts --quiet and --silent as synonyms for -s, <b>hostname</b>
added -sfd, <b>head</b> added --bytes as a synonym for -c and --lines as a synonym
for -n, <b>mktemp</b> added -t and fixed -u, <b>sed</b> added -z and -iEXT to keep backup files,
<b>md5sum</b> and sha1sum added --status and --check as synonyms -s and -c,
<b>readlink</b> added --canonicalize as a synonym for -f, <b>sort</b> grew -V,
<b>patch</b> added -s its synonym --quiet, <b>stat</b> added --format as
a synonym for -c, <b>xargs</b> added -p -t -r,
Eduardas Meile asked
that <b>umount</b> ignore -c. Reverend Homer added a small optimization to file.c,
and Elliott taught <b>file</b> to recognize riscv ELF binaries. Peter Collingbourne
taught <b>ls</b> -t to use the nanoseconds field.
<b>patch</b> has better support for patching a file with a tab in the name.</p>

<p><u>Bugfixes</u>:
<b>cp</b> --preserve was segfaulting when you didn't specify _what_ to
preserve (it now correctly defaults to "mot") and didn't get the permissions
right when copying a symlink's contents as a regular file,
<b>sort</b> -x didn't work when
attached to a key, <b>host</b> didn't allocate a big enough buffer for worst
case ipv6 address size, <b>sed</b> needed a ; between b and } when other
implementations don't (we're already well past what posix says but a script
out in the field broke...),
and several fixes to <b>hostname</b> in a container, <b>ps</b>/<b>top</b> were
misreading the VIRT and SHM fields.</p>

<p><u>Pending</u>: Gavin Howard updated <b>bc</b> and added more tests,
Marius Adaskevicius pointed out <b>mdev</b> -s should follow symlinks,
Yangchun Fu reported a <b>dhcp</b> checksum bug, <b>modprobe</b> needed errno reset
to avoid reporting spurious errors in verbose mode and no longer
exits with status 1 if it can't find /etc/modprobe.conf, the <b>more</b> command
wasn't always flushing stdout when it exited.</p>

<p><u>Build</u>:
<b>chrt</b> no longer #warns about the musl sched_get_priority_min() bug, but
instead works around it.
We were mixing setjmp/siglongjmp (harmless in some contexts but it kind
of annoyed FreeBSD), and
make install_airlock now adds sha256sum (because the Linux 4.20 build now
needs that for the s390x target).</p>

<p><u>Coding style</u>:
Rob converted the rest of the option GLOBALS() to the new single letter
coding style, and the new FLAG(x) macro is a slightly tidier way to say
"toys.optflags&FLAG_x".
Removed CFG_SORT_BIG (the sort command always
has the full functionality now. The general future direction or toybox
is to either have a command or not have it; multiple versions of the
same command aren't worth the complexity in testing, documentation,
or system adminstration).</p>

<p><u>Library code</u>:
The mkflags plumbing can now support arbitrary punctuation as option
names via an escape syntax (because mkfs.vfat specifies an offset with -@),
and lib/args.c now only sets FLAGS_NODASH when the first argument
didn't have a dash (allowing "ps ax" and "ps -ax" to behave differently).</p>

<p>Added an xrename() function,
xchdir() has better error reporting, xconnect()/xbind() had their
implementations merged, xsendto() moved from ping to lib, xpoll() now
measures elapsed time and only waits for the remaining period when restarted,
and Eduardas Meile converted several error_exit() to error_exit_raw() (because
yocto 2.6 buils with -Werror=format-security by default).</p>

<p>There's a scripts/portability.sh now which lets the build use gsed and gmake
(when available) in more places to avoid broken host versions on MacOS and FreeBSD.
The syntax of the "noreturn" attribute
changed slightly, some calls to strnstr() were replaced with strcasestr(),
we work around MacOS' lack of features.h, portability.h can now do Apple's
endianness macros, and so on.</p>

<p>Following the <a href=faq.html#support_horizon>seven year rule</a>
Elliott removed support or glibc 2.10, and also
reformatted a lot of --help text for consistency (removing trailing
periods and such).</p>

<p><u>Test suite</u>:
The test suite now has its own version of "pending", specifically "make tests"
skips test files without the executable bit set (unless you export $TEST_ALL).
This eliminates "expected failures" (I.E. files with unresolved todo items)
from the global regression test. Additional tests can be added to the global
regression test with chmod +x as the todo items they document get resolved.</p>

<p>Several places the test suite got fluffed out, including guards to skip
root-only tests when run as a normal user. The testcmd function prints the
short name instead of the full path to the command.
The tests for the test command
("test.test") no longer test the shell builtin but correctly test the
toybox command. (Now say that ten times fast.)</p>

<p>Bash version skew required replacing "continue" with "return" to stop
tests early in bash 4.4 (for VERBOSE=fail).</p>


<a name="31-10-2018" /><a href="#31-10-2018"><hr><h2><b>October 31, 2018</b></h2></a>
<blockquote><p>
"In the beginning the Universe was created.
This has made a lot of people very angry and been widely regarded as a bad move." - The Hitchhiker's Guide to the Galaxy.
</p>
</blockquote>

<p><a href=downloads/toybox-0.7.8.tar.gz>Toybox 0.7.8</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.7.8>git commit</a>)
is out (a month late).</p>

<p>Toybox <a href=http://lists.landley.net/pipermail/toybox-landley.net/2018-October/009769.html>now builds</a> with the Android NDK (r18 release), almost out of the box.
You have to add an "llvm-cc" symlink to "clang", then use CROSS_COMPILE=llvm-
with the appropriate $PATH (or absolute path in CROSS_COMPILE) for the
target you want to build for. (To run it on a non-android host, you probably
want "LDFLAGS=--static" too.)</p>

<p><u>New commands</u>: <b>i2cdetect</b>, <b>i2cdump</b>, <b>i2cget</b>, and <b>i2cset</b>
courtesy of Elliott/Android. The <b>watch</b> command got a complete (tty-aware)
rewrite, and was promoted out of pending. The <b>prlimit</b> command is back
(a configuration bug was always disabling it), and <b>ascii</b> now defaults y
in defconfig (an oversight).</p>

<p><u>New options</u>: 
The <b>ifconfig</b> command added -S (short view) giving one line of
information per interface, in "name ipv4/mask macaddr [ipv6/mask@type...]"
format. <b>grep</b> grew binary file detection, with -I and -a options to
ignore them or force treating them as ascii (really utf8).
Zach Van Rijn asked for <b>find -empty</b>.
In the <b>file</b> command, Elliott improved java
.class support and added .wav, .bmp, and android .dex.
Elliott also added "getconf -a" and a lot of missing getconf symbols the
AOSP build uses, including support for pathconf(3) symbols requiring two
arguments. This means getconf's arguments work more like ubuntu's
now (one or two arguments, not iterating through the supplied list and
processing each like last release), and -l grew section identifiers (so
the "getconf -l" output is no longer a directly consumable list of symbols
it takes).
Command line options specifying durations (like top -d or ping -i) can
now use fractions and units, like "1.5" and ".1m". See "toybox --help" for
details.
Toybox now dereferences one layer of symlinks if it doesn't recognize the
name it's called under (so if you "ln -s $(which sleep) blah" and then
"./blah 30", it should figure out you mean sleep 30).</p>

<p><u>Pending</u>:
Gavin Howard contributed a large new <b>bc</b> implementation to pending,
which covers everything the kernel build needs (and more) but is going to
take a while to review.
In <b>diff</b> the android guys added --color and timestamps on the
+++/--- lines. In <b>mdev</b> Faustas Azuolas Bagdonas added support
for mdev.conf's fourth field. Reverend Homer suggested an error message
improvement in <b>wget</b>, Kevin Spiteri did a cleanup pass on test.c,
and there was a cleanup pass on the passwd command.</p>

<p><u>Bugfixes</u>:
Elliott responded to a bug in <b>getconf</b>'s sed-based header generation by
replacing it with a more conventional array of #defined symbols, with #ifdefs
for missing symbols on the three libc implementations (glibc, bionic, musl)
we've tested so far. (This requires portability.h work to add new supported
build environments, but at least it works on bionic now.)
The <b>file</b> command now fails gracefully when reading pathologically
broken ELF files (the tests for integer overflow missed one), and
<b>date</b> no longer shows a meaningless errno when it can't parse the
date format.
Several fixes in <b>ping</b> (-w and -W didn't work, -c kept sending packets
while waiting for replies, and when no reply packets were received the summary
data was printed twice).
Elliott fixed <b>wc</b> column widths (traditional reality doesn't match
posix), fixed <b>modprobe</b>'s error handling (reported by Wen Xie), and
also fixed the units on blockdev --blkraget (reported by Martijn Coenen).
Several small fixes to the <b>stat</b> command's output (help text, quoting
style, leading zeroes, switch -f from %t to %T), <b>oneit</b> no longer
reboots the system when it's not called as PID 1.
Last release's commit letting $STRIP be redefined had a typo.
Nick Kralevich added an istty() check before calling TIOCGWINSZ (which
triggered Android's strict ioctl filtering on non-filesystem fifos).
An unstripped build (where the "strip" command fails for a given
CROSS_COMPILE) will now overwrite the (read-only) output file instead of
failing a rebuild. The dirtree plumbing no longer prints a "No" on front
of the filename in error messages (such as "permission denied").</p>

<p><u>Docmentation</u>
Elliott updated the roadmap with Android AOSP status, towards turning that
into a hermetic build (hopefully with an eventual self-hosting option, work
is <a href=b33d37d6f735>already underway</a> on the airlock step).
Rob added a little more context for LSB and described the move from Aboriginal
Linux to mkroot.
The <b>ps</b> help text changed: now "ps -o help" shows the fields and the normal
--help is much more manageable. Ifconfig's --help text also got tidied up.
Our LICENSE file has the SPDX identifier (0BSD) now, and the note about
the kconfig/ subdirectory still having (build only, non-shipping) GPL code
in it moved into the kconfig subdirectory.</p>

<p><u>Coding style change:</u>
GLOBALS() now uses the argument letter as the variable
name for variables automatically set by command line arguments via lib/args.c,
and no longer requires they be one per line.
Removed use of the gcc
\e extension in string constants, replacing it with \033.</p>

<p><u>Library code:</u>
lib/interestingtimes.c was renamed to lib/tty.c.
The deflate code from toys/pending/compress.c moved to lib/deflate.c,
which gunzip.c now uses when it's not configured to use zlib. (This reduces
the bootstrap dependencies for the "airlock" step of a hermetic build.)
The compression side remains a todo item.
Added "%" to lib/args.c reading seconds (including fractions/units) into a
long milliseconds argument. Redid xparsetime() to not need floating point,
added xparsemillitime() for milliseconds common case, and
parsetime() now treats leading garbage as an error instead of returning zero.
The bufgetpwuid()/pufgetgrgid() functons can now handle more than 4k of group
data. The set_terminal() function can now set serial speed, and microcom.c
uses it. Added xsignal_flags(), and more consistently use xsignal() (which wraps
sigaction()) instead of signal().
A new xgetrandom() function calls the new getrandom() system call, falling
back to /dev/urandom on older kernel/libc (made to actually _work_ by
Patrick Oppenlander).</p>

<p><u>Build infrastructure:</u>
Updated dependency detection so "make distclean defconfig toybox" now works
all on the same command line. (This is nice when $CROSS_COMPILE changes).
scripts/config2help.c no longer includes parts of lib/ and just copies what
it needs into itself, improving build portability.
The build now checks the specified cross compiler exists, hopefully providing
a more informative error message when it doesn't. Similarly, when .config is
missing the error message suggests running make defconfig.</p>

<a name="23-06-2018" /><a href="#23-06-2018"><hr><h2><b>June 23, 2018</b></h2></a>
<blockquote>
<p>There is a theory which states that if ever anyone discovers exactly what
the Universe is for and why it is here, it will instantly disappear and be
replaced by something even more bizarre and inexplicable. There is another
theory which states that this has already happened.</p>
<p> - The Hitchhiker's Guide to the Galaxy</p>
</blockquote>

<p><a href=downloads/toybox-0.7.7.tar.gz>Toybox 0.7.7</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.7.7>git commit</a>)
is out.</p>

<p><u>New commands</u>: Rob Landley added <b>getconf</b>, Elliott Hughes added
<b>uuidgen</b>, and <b>ping</b> and <b>fmt</b> were promoted out of pending.</p>

<p><u>New options</u>: The <b>cp</b> command added the --parents option,
<b>readlink</b> now has -m to show where a missing path would be,
<b>netstat</b> got some updates (better nommu support, it can use /etc/services
names, more command line options are bounds checked),
Ng Zhi An added --getra and --setra (get/set readahead) to <b>blockdev</b>,
Elliott Hughes added <b>xxd</b> -o and made <b>top</b> -d understand fractional
sections (because the Linux Test Project uses that), and
Minghui Liu added <b>watch</b> -b.</p>

<p><u>Bugfixes</u>: Several fixes to <b>vmstat</b>: Elliott Hughes made it work on a
48-core machine
and fixed a glitch with -n, Haroon Maqsood pointed out "vmstat 1 1" didn't
stop and "vmstat -n" didn't print the first theader line.
Minghui Liu fixed a bug where <b>cp</b> -p didn't preserve
timestamps, and pointed out the b, c, and d suffixes on numbers weren't
working. Ryan Pritchard pointed out that <b>du</b> -d0 should act like du -s.
Filip Perich made an RFC2347 OACK compliance fix to <b>tftp</b> in pending.
Zach van Rijn fixed a bug in <b>xxd</b> causing incorrect translation of
uppercase characters.
Elliott fixed several things in <b>top</b> (removed spurious '\r' characters from -b
output, removed interactive flicker, made running processes bold), and
pushed Rob to make <b>file</b> work better recognizing things on stdin
("cat /bin/ls | file -" still won't work but "file - < /bin/ls" should).
Rob fixed a bug in <b>netstat</b> on 64 bit big endian systems,
and fixed <b>cut</b> -DF
(a posix compliance fix broke its ability to act as a decent awk replacment
because outputting all delimiterless lines isn't what you want there, -D
now disables that too).</p>
</u></p>

<p><u>Documentation</u>: Rob added a buildroot section to the roadmap with the
prequisites that needs to run, and reformatted more of the ps --help text
to two columns.</p>

<p><u>Library</u>:
FLAGS_NODASH is now set in toys.optargs when an optstring starting
with & has no dash in its first argument. (This lets "ps -ax" and "ps ax"
behave differently.) Factored out xtestfile() into lib/.
The comma-separated-list parsing infrastructure moved to lib/commas.c.
Added mkpath() for the common case of mkpathat() and #defined MKPATHAT_*
constants for the uncommon cases. Elliott added better error checking
to xparsetime() and fixed a bug in names_to_pid() (used in <b>pidof</b>
and <b>killall</b> and such).
Rob inlined the old toys/e2fs.h into pending's mke2fs,
and removed a rogue semicolon from the WOULD_EXIT() macro that screwed
up if() statement levels. The do_lines() semantics changed adding a
callback(0,0) at the end of each file.</p>

<p><u>Tests</u>:
The test_* commands under toys/example were all renamed demo_* so
they don't share a namespace with running a standalone command
through the test suite (ala "make test_sed"), then
demo_human_readable became demo_number so it can also test atolx()
suffixes. The readlink.test was getting confused by a
behavior difference between toybox and ubuntu (Ubuntu's ln -sf wouldn't
replace a symlink that pointed to itself, toybox's would), now there's
an explicit rm so it works on ubuntu too. The test suite plumbing's
error message for a test with the wrong number of arguments now
correctly identifies which test it's complaining about, and it can now
run a test on a command name beginning with "-" (none yet but it
comes up in toysh).</p>

<p><u>Building</u>: You can now override strip with $STRIP. The set of
"make install_airlock" commands got tweaked for the 4.17 kernel (which
needs bison and flex because the new kconfig plumbing doesn't have _shipped
versions of those generated files like the old kconfig did), and for
the new release (remove ping, toybox provides it now).
$LDFLAGS now applies to library probing (the android NDK provides
dynamic libraries without corresponding --static versions).
Elliott took a CFG_TOYBOX_DEBUG check out of an error_exit() to make
clang stop complaining about an error that should never happen.</p>

<a name="24-02-2018" /><a href="#24-02-2018"><hr><h2><b>February 24, 2018</b></h2></a>
<blockquote><p>
"Arthur," said Ford.<br />
"Hello? Yes?" said Arthur.<br />
"Just believe everything I tell you, and it will all be very, very simple."<br />
"Ah, well, I'm not sure I believe that."<br />
</p>
<p> - The Hitchhiker's Guide to the Galaxy</p>
</blockquote>

<p><a href=downloads/toybox-0.7.6.tar.gz>Toybox 0.7.6</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.7.6>git commit</a>)
is out, a month and change late.</p>

<p>This release adds a <b>crc32</b> command and
cleans up and promotes <b>iconv</b>, <b>logger</b>, and <b>setfattr</b>.
Pending added <b>stty</b> and <b>fmt</b>, the other half of <b>ping</b>,
and got a lot of cleanup on <b>gzip</b>/<b>gunzip</b>/<b>zcat</b>.</p>

<p>The <b>cut</b> command got a complete rewrite adding support for multiple
ranges, utf8/unicode characters, and new -CDFO options. Use -C to measure
columns rather than characters (for double width chars), and "cut -DF 3-5"
selects words (like "awk '{print $3 $4 $5}'").</p>

<p>This release adds <b>top -m</b> and <b>iotop -H</b> (and fixed top width truncating for narrow terminal windows),
added <b>iconv -c</b>, fixed <b>ps -T 1234</b> to show threads belonging to
that PID, improved <b>file</b>'s executable identification (properly recognizing
both endiannesses and adding sh/frv fdpic, bpf, and new microblaze
identifiers), and <b>blkid</b> now only shows LABEL= when it isn't blank.</p>

<p>Running ./configure now does "make defconfig", help_exit() now shows the
"See %s --help" message on the same line, and several web pages
(about, code, roadmap, cleanup) got updates.</p>

<p>Elliott and the Android devs added <b>df -i</b>, <b>uptime -p</b>,
<b>time -v</b>, and <b>xxd -i -ri</b>,
fixed <b>id -G</b> to only output the group IDs, fixed the <b>xargs -0 -n</b>
combination, made <b>find -exec +</b> obey ARG_MAX (just like xargs), made
<b>killall</b> kill scripts too, fixed an off by one error in <b>pidof</b>
that could cause false positive matches in 15 character names, added
gzip/gunzip/zcat tests, and taught <b>file</b> to identify more stuff
(ogg, TrueType font, LLVM bitcode, PEM certs, and PE executables), and
for some reason needed TOYBOX_VENDOR in the version stuff.
Android <b>getprop</b>/<b>setprop</b> now allows ro. properties to have
arbitrary lengths, <b>losetup</b> can now find loop devices under /dev/block (where android puts
them for historical reasons), and Andreas Gampe pointed out a thinko in
<b>top</b> that triggered llvm's address sanitizer checks.</p>

<p>Gael PORTAY asked for mdev to work when Linux has the
block layer configured out, Patrick Oppenlander pointed out a problem
with make bloatcheck's build dependencies, and
xuphung on github fixed config2help building on MacOS X.</p>

<p>Commands with locale support now setlocale(LC_TYPE, "C.UTF-8") for more
targeted locale support (enable character parsing with
utf8 support, use "C" semantics otherwise). The toys/example/test_*.c
commands got renamed demo_*.c.</p>

<p>In lib.c the millitime() function returns current unix time in milliseconds
(which as a 64 bit number is good for + or - 292 million years from
midnight Jan 1 1970), and the old xgetty() function became tty_fd() returning
-1 instead of erroring out.</p>

<p>The "make help" text moved from the Makefile to scripts/help.txt,
ls.c now lists some of its deviations from posix, and work is underway
to make ps.c more intelligible (and figure out how to break it up into
multiple files).</p>

<a name="12-10-2017" /><a href="#12-10-2017"><hr><h2><b>October 12, 2017</b></h2></a>
<blockquote><p>Would it save you a lot of time if I just gave up and went
mad now?</p>
<p> - The Hitchhiker's Guide to the Galaxy</p>
</blockquote>

<p><a href=downloads/toybox-0.7.5.tar.gz>Toybox 0.7.5</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.7.5>git commit</a>)
is out.</p>

<p>This is another <b>mostly bugfix release</b>. I delayed it a bit trying to get some
of the many half-finished projects (dd, ping, lsof, iconv, cut, sysconf,
the cp --parents option...) finished/promoted/tested, but decided adding big
things at the end of the dev cycle would be too destabilizing.</p>

<p>A couple <b>new features</b> slipped in anyway. Ilya Kuzmich added head -c
and strings -t (and corrected strings' output in a couple places). Elliott
Hughes taught file to recognize Macintosh (Mach-O) binaries.</p>

<p><b>NOTE</b>: the chrt command is broken when built against musl-libc
because that project's maintainer decided he didn't like the system calls
it depends on, so he
<a href=https://git.musl-libc.org/cgit/musl/commit/?id=1e21e78bf7a5>removed
them from his libc</a>. The prebuilt binaries are built against musl,
so the chrt command there will always say -ENOSYS. (It works fine built against
glibc, and presumably bionic or uClibc.)</p>

<p><b>Bugfixes</b>: Remounting (mount -o remount,rw) should work properly now,
and we fixed another place ps was segfaulting when /proc
entries vanished out from under us (a hard to hit race condition
mostly noticeable in long-running "top" exiting; error value was treated
as a pointer). Elliott Hughes fixed a -Wformat warning in expr.c,
and made xargs split the command
line at ARG_MAX (which is 1/4 the stack size ulimit, which normal users
can arbitrarily increase but execve() will complain if they don't).
Josh Gao made netcat -l exit after handling a request, and reported a
seq bug (seq "1000000 10000001" output 1e+06, fixed now). Zach Riggle fixed a
broken URL in the README. Rob fixed env -0 checking the flag wrong so
it didn't work in combination with other flags (typo).</p>

<p><b>Plumbing</b>:
Replaced mbrtowc() with a new utf8towc() that doesn't have a context
struct or care about locale. A bugfix in comma_scan() (wasn't removing an entry at the end
of the list) is why remount _sometimes_ worked (depending on argument
order), xgetaddrinfo() is now separate from xconnect(),
atolx_range() learned the w (word=2) suffix, and b is now (block=512) instead
of (byte=1).</p>

<p><b>Build</b>: Patrick Oppenlander added a workaround for a bug in config2help.c
that resulted in segfaults on newer toolchains. (It was actually a use
after free error; the build infrastructure isn't nearly as heavily audited as
code that gets installed on the target; oops.) A new GITHASH
environment variable can force the build version from
the command line, and the build checks for .git in the top directory
before asking git what our version is (so it isn't confused by ../../.git
in an enclosing directory). Added a build #warning about musl intentionally
breaking chrt (as with nommu fork() musl now provides a broken
stub function so compile-time probes for its existence think it's there, and
you can't run the result to test behavior when cross compiling).</p>

<a name="19-06-2017" /><a href="#19-06-2017"><hr><h2><b>June 19, 2017</b></h2></a>
<blockquote><p>It is a well-known fact that those people who most want to rule people are, ipso facto, those least suited to do it.
To summarize the summary: anyone who is capable of getting themselves made President should on no account be allowed to do the job.</p>
<p>- The Hitchhiker's Guide to the Galaxy</p>
</blockquote>

<p><a href=downloads/toybox-0.7.4.tar.gz>Toybox 0.7.4</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.7.4>git commit</a>)
is out. No new commands this time, but
<b>chrt</b> and <b>dmesg</b> got promoted out of pending.</p>

<p><u>New features</u>:
Rob rewrote paste, which should work much better now, and added grep
-M and -S to match and skip wildcards respectively (useful with -r).
Elliott's updated dmesg has -T and --color. The file
command can recognize gzip now, uptime grew -s, date grew %N, env knows - as a first argument
means -i (posix!) and grew -0, ls defaults to -b
instead of -q now when there's a tty, and ls has a new -ll option (with
--full-time as a compatibility synonym) showing nanoseconds and (for some
reason) timezone. (Why do individual files have timezones?) Elliott added
"uudecode -o -" support. Illya Kuzmich taught head -v and -q. The cpio
code no longer adds the "TRAILER!!!" entry by default (initramfs extractor
doesn't care) without which you can concatenate cpio archives with "cat".
(Use the new --trailer option if you want the legacy behavior.)
In pending, fdisk compiles now and tar understands bzip2.</p>

<p><u>Build</u>:
The "make install_airlock" target now symlinks bc from the host because
the kernel <a href=https://landley.net/notes-2013.html#28-03-2013>inexplicably</a>
needs that to build. This was motivated by
<a href=https://github.com/landley/mkroot>mkroot</a>, which builds under
a toybox airlock directory.</p>

<p>Lots of work on the test suite, mostly from the Android guys who are now
running it under Android. This fixed several existing tests that didn't
pass, made more tests run on a toybox-only system, and so on. The test suite
infrastructure now has a second testing function,
"testcmd", which supplies the command name being tested (bypassing
shell builtins).</p>

<p>Various android build and config fixes, getting closer to being able
to let android someday use scripts/make.sh instead of generated/* snapshots.
Also more work into building under android's NDK; not quite there yet
but much closer.
Use nproc in scripts/make.sh detect available processors (so you can control the SMP level with taskset).
Removed the old uClibc compatibility glue, it's been 5 years since their
<a href=http://lists.busybox.net/pipermail/buildroot/2016-December/180102.html>last release</a>.</p>

<p>The new config option TOYBOX_PEDANTIC_ARGS checks arguments when there
are no arguments, so things like "uptime" no longer silently ignore arguments
you pass but instead refuse to run.</p>

<p><u>Docs</u>:
The FAQ now has more than one entry. Commands no longer output the full
help text for argument errors but instead just say "See %s --help" with the
command name (in addition to the actual error message).
Elliott did a big period-ectomy on all the --help text, and
we cleaned up some tab/space inconsistency. The
non-html help -a output now has separators with the command name.
The top/iotop and pkill/pgrep help text now describe a lot more of what
the commands can do. Twitter's code of conduct page went down so we
mirrored the text locally.</p>

<p><u>Bugfixes</u>:
Fixed a race condition in ps/top where a process that exited right as we
read its data returned a different error value than we were expecting (which
was causing long-running top instances to occasionally exit),
mount now gives an error if it can't autodetect the filesystem
type, ps no longer queries the terminal size when output isn't to a tty
(so "ps -A | cat" doesn't vary), date's chkmktime() was replaced with
simple range checks for fields (to avoid false positives from things like
timezones and daylight savings time), removed %s from date's help (we
didn't implement it, we have @seconds[.nanoseconds] instead), fixed
zcat's buffer flush logic (which was always failing on files larger
than 32k), and factor now detects requests for numbers >64 bits and fails
loudly instead of producing incorrect answers.
Elliott fixed touch -a/-m (they were backwards), and allowed ':' in
setprop's property names. Grep now exits with 2 for errors (so -q can
distinguish "didn't find" from "didn't work"), doesn't stop on symlinks
that point nowhere (there was an error_exit() that should just be a warning),
and provides error messages for files we could open but not read.</p>

<p><u>Library</u>:
New library functions: strend() complements strstart(), minof()/maxof()
are min/max macros that evalute arguments once and autodetect type (why
isn't this in libc?), xmmap() checks MAP_FAILED (which is not NULL).</p>

<a name="21-02-2017" /><a href="#21-02-2017"><hr><h2><b>February 21, 2017</b></h2></a>
<blockquote><p>Only six people in the Galaxy knew that the job of the
Galactic President was not to wield power but to attract attention
away from it. Zaphod Beeblebrox was amazingly good at his job.</p>
<p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>

<p>Despite everything, <a href=downloads/toybox-0.7.3.tar.gz>Toybox 0.7.3</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.7.3>git commit</a>)
is out. The <u>new commands</u> this time are <b>ftpget</b>, <b>ftpput</b>, <b>microcom</b>, and <b>ascii</b>.<p>

<p>We also had two command _demotions_ out of defconfig:
<b>hostid</b> got moved to toys/example and
switched to "default n" because despite <a href=http://pubs.opengroup.org/onlinepubs/9699919799/functions/gethostid.html>still being in posix</a>
the concept of a unique 32 bit number identifying a system is something
Linux outgrew about the time Pauline Middelink wrote the first IP
Masquerading code. And Elliott did a complete rewrite of <b>dmesg</b> introducing
two codepaths that I didn't get a chance to unify and didn't want to
hold up the release for, so that's back in pending.</p>

<p><u>New features</u>: Rob added units to <b>find</b> -atime and friends
(with the legacy -amin alias). Elliott added color and -w to dmesg, fallocate
-o, and improved file's ELF parsing. Steve Muckle added -d and finit_module
support to modprobe. Rob and Elliott tweaked the
ps/top display format a bit more (extending the USER field from 8 to 18 chars
and putting + at the end of string fields that got truncated).
df -a isn't entirely new, but wasn't documented and needed a bugfix.</p>

<p><u>Bugfixes</u>:
Last release broke oneit because -c didn't get moved to xopen_stdio() (oops).
Rob and Elliott simultaneously spotted ps padding each line to 99999
chars when there's no tty (serial console or adb); now it pads to 80 in
that case but also switches on -w to avoid field truncation. The "tty"
field also sometimes had trailing debris (that's fixed now). And "top" was
endlessly redrawing with out tty because receipt of the ANSI size probe
results would set SIGWINCH, and handling that sent another ansi probe. (Sigh.)
And while we're there, replace "ADDR" with "BIT" in ps -l so there are
more than 4 chars left for the "CMD" field on 64 bit systems.</p>

<p>Izabera pointed out that split -b and -l can't mix, and suggested seq should
multiply to avoid accumulating rounding errors from repeated fractional
increments. Wang Xiao Jian fixed a bug in sort -k.
Elliott let getprop use the @ character in property names, and
Dimitry Ivanov removed the name length limit for system properties.
Elliott also improved some error reporting and improved top -H's display
of thread names.

<p>Josh Gao pointed out that recursive operations on . and .. could be ignored
in chmod -R (and the resulting generic fix to dirtree_notdotdot() fixed
it in several other places).</p>

<p>Justin Cormack caught tar producing a warning to stdout that screwed up
"tar c" to stdout.
Rob fixed an option parsing bug (where switching off a --longopt in menuconfig
confused the parser), and another one where an option excluding itself
(ala "abc[-ab][!abc]" with "command -a -b") would segfault.</p>

<p>There's some sort of gcc stack over-optimization bug where musl-libc's
version of vfork() doesn't get marked with attribute(returns_twice) so
stack varabiles in the same function after that get semi-randomly overwritten
when the optimizer decides to reclaim the space. So add the attribute
to the function the XVFORK() wrapper macro calls. (It's a nommu thing.)</p>

<p>Fixed a couple variable size mismatch bugs that were only tested on 64 bit
(printf %x 64) or only tested on 32 bit (modprobe), removed some
unnecessary casts in stat.</p>

<p>Continuing attempts to build under Android NDK brought up that posix
defines the global 'stdout' as a macro, which older versions of bionic
turned into an array member, but a function was using it as an argument
name. (This worked in the AOSP build because it only builds against current
bionic, where there's a global 'stdout'.)</p>

<p>Several commits argued with clang's warning generation, eventually
settling on a variant of __attribute__((__shut_up__)).</p>

<p>Android should no longer give spurious error messages
when you "ps -A | head" about EPIPE on output. (Older versions of bionic
set an error handler on SIGPIPE, but it shouldn't do that now. More recent
versions of adb set the SIGPIPE handler to SIGIGN instead of SIGDFL,
leading to write returning an error message instead of silently killing
the program. So we set it back to the default.)</p>

<p><u>Docs</u>:
Removed website link to the gmane archive (which didn't survive gmane's
change of ownership). The FAQ now answers a _second_ question. (Woo!)
Some roadmap updates.</p>

<p><u>Build tweaks</u>:
Upgraded "make install_airlock" target to only warn about missing
commands (unless $PEDANTIC is set) when it sets up the hermetic build
path. (The plan is still to implement everything but the toolchain
binaries in toybox, but in the meantime we're symlinking other stuff from
the $HOST that isn't ready yet. See
<a href=https://github.com/landley/mkroot>mkroot</a> for an example using
this.)</p>

<p>Elliott and Rob continue to poke at building toybox with Android's NDK,
but it's a work in progress (<a href=http://lists.landley.net/pipermail/toybox-landley.net/2016-December/008767.html>thread</a>). Various changes
removing libcutils dependencies and adding an selinux dependency to getprop
are fallout from this.</p>

<p>Cross-compiling from Macs needs to use "gsed" instead of apple's
version, so teach the build to use that name if it exists in the $PATH.
If you try to build without running config first, you should get better
error reporting now. Added a workaround for Centos' broken "which" command
producing output when it _can't_ find a name in the $PATH.</p>

<p><u>Library</u>:
The new dirtree flag DIRTREE_PROC skips non-numeric entries so things
like ps and top can scan /proc more efficiently.</p>

<a name="21-10-2016" /><a href="#21-10-2016"><hr><h2><b>October 21, 2016</b></h2></a>
<blockquote><p>Probability factor of one to one. We have normality. I repeat,
we have normality. Anything you still can't cope with is therefore your
own problem.</p><p> - The Hitchhiker's Guide to the Galaxy</p></blockquote>

<p><a href=downloads/toybox-0.7.2.tar.gz>Toybox 0.7.2</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.7.2>git commit</a>)
is out.</p>

<p>During this development cycle, Elliott Hughes <a href=http://androidbackstage.blogspot.com/2016/07/episode-53-adb-on-adb.html>got interviewed
on the ADB podcast</a>
and Rob Landley <a href=http://linuxluddites.com/shows/episode-88/>got interviewed on Linux Luddites</a> (<a href=http://linuxluddites.com/shows/episode-11/>again</a>).
Both talk about toybox and many other things.
The web page also grew a new <a href=faq.html>FAQ page</a>, currently with
just the one.</p>

<p>New comands added to defconfig are <b>tunctl</b>,
<b>log</b>, <b>start</b>, <b>stop</b>, and <b>sendevent</b>.
The commands <b>file</b> and <b>netstat</b> got promoted out of pending.
Pending added <b>chrt</b>, <b>setfattr</b>, and <b>getfattr</b>, and saw
a lot of cleanups to diffstat and dd but not enough to promote them to
defconfig yet. A new toys/net directory was added, moving ifconfig, netcat,
netstat, rfkill, and tunctl there so far.</p>

<p><b>Upgrades</b>: All commands now parse --version when they understand
--help, but "true" and "false" should now ignore their arguments entirely.
We taught stat to handle "%12x" and "%.12x" printf-style escapes, which
apparently other versions do. The ifconfig output now shows the interface's
device driver. Added patch -d and --dry-run, wc can now do -cm together,
find has a NOP -noleaf so scripts that use that don't break, add -c to md5sum
and sha1sum. Elliott taught ps to treat extra aguments as additional -p
pids, implemented xxd -s, did a number of upgrades to file (added -HL,
support for ar files, improved ELF support to report android API level
and stripped/not stripped and it no longer prints a guessed build ID type).
Elliott also added optional build-time support for using openssl's
assembly-optimized md5sum/sha1sum implementations (leading to a new
<a href=design.html>design</a> policy on shared libraries).</p>

<p><b>Bugfixes</b>: Too many fixes to "ps" and "touch" to list, from both
Elliott and Rob. Rob taught sed to handle s/[[:space:]/]// type sequences
properly, switched grep to a better
workaround for <a href=https://sourceware.org/bugzilla/show_bug.cgi?id=17829>glibc bug 17829</a>, made sed -i preserve ownership when run as root,
made du max out at 2 terabytes instead of 2 gigabytes on 32-bit systems
(it was always designed to, but was missing a typecast),
fixed the option parsing infrastructure (config options that remove command
line options got the placeholders wrong), fix to printf for printing
octal digits and handling the (posix-mandated) difference between %b and
non-%b octal output, reading from "-" no longer closes stdin when done,
netcat -L works with nommu (although it may need more portability work),
and you can now "make test_scankey" if you want to. Several commands
(stat, makedeves, chgrp, cp, find) handled user name lookup failure badly
(stat was segfaulting if you interrogated a file belonging to a nonexistent
user, "chown 12345 file" errored out if you didn't have that user
in /etc/passwd... now they should all print/accept the number when
appropriate). "LC_ALL=C ls -Cs --color" produces the same output
as other versions (two spaces padding, -k hardwired on).<p>

<p>Kyungsik Lee fixed a bug
in cp (readlink() doesn't actually null terminate the string it reads in),
Elliott Hughes made pgrep/pkill return success/failure, fixed trailing
whitespace in netstat, fixed a SMACK symbol conflict due to linux/xattr.h
changing, fixed ls -sh, and added a lot of
stuff to the <a href=roadmap.html>roadmap page</a>.
Izabera pointed out cmp -l and -s can't be selected at the same time,
that timeout was never actually checking -v, that ls should default to -q
when output is to a tty, and that "file -" would sometimes try to open "-"
instead of stdin.
Usischev Yury pointed out a use after free error, and that id shouldn't
call exit() directly. Matthias Urhahn pointed out that stat(2) returns
hardwired 512-byte units, so stat.c was wrong. David Hedges pointed out
that route could only handle 10 character interface names when the kernel
can do 15 (it's still in pending for a reason, but fixed). Evgenii
Stepanov found and helped diagnose one of the more subtle ps bugs fixed
this time around.</p>

<p>Calling "make test_blah" no longer causes make to error out if the last
test fails (and thus returns a nonzero error code).
Building single commands and the multiplexer used to require a "make clean"
between them (because they had different config files both of which were older
than generated/config.h so it didn't get rebuilt; now it just always
rebuilds it).</p>

<p>The defconfig build is now slightly less broken on older centos versions
(although <a href=http://lists.landley.net/pipermail/toybox-landley.net/2016-September/008664.html>the consensus</a> is that Centos is just generally broken).<p>

<p>Several commands were over-using xprintf(), which flushes its output
to check for error (something you only need to do maybe once per line,
and even then maybe only in loops because xexit() flushes and checks
ferror() for you and adjusts the exit code if we wrote stuff to stdout
that couldn't be printed). Lots of little flushes are inefficient,
so most things can use normal printf(). (Retransmission
of short writes is presumably libc's problem since it's buffering the
output and all.)</p>

<p><b>Library:</b>
New library functions readlink0() and readlinkat0() which properly null
terminates the symlink value (which the stock libc function inexplicably
doesn't).
The new do_lines() function interates reading lines from a filehandle
and calling a function on each line.
New function pollinate() factoring out netcat's poll() loop so things
like telnet can use it.
New functions getusername() and getgroupname() return a
char * given a uid/gid (and return a string representation of the number
if the lookup fails), and xgetpwnamid/xgetgrnamid were renamed to
xgetuid/xgetgid and now return an integer instead of a struct (also helping
handle lookup failures, you can still return the uid/get for "12345").</p>

<p>Switched atolx() to use long long internally.
Renamed xopen() to xopen_stdio() and made a new xopen() that never returns
stdin, stdout, or stderr (duping /dev/null into the filehandles as necessary).
New function xopenro() opens a file read only with one less argument, and
understands that "-" means stdin. New flag WARN_ONLY tells these functions
to just print a warning on failure, and return -1 instead of exiting.
Misc new functions like openro() which defaults to the WARN_ONLY behavior
and notstdio() which dup()s a filehandle up beyond stdin/out/err backfilling
with /dev/null as necessary. The WARN_ONLY flag let us remove the failok
argument from loopfiles().</p>

<p>New TOYFLAG_NOHELP disables --help processing (which "true" and "false"
should not do).</b>

<p>The test suite now has NOSPACE=1 to ignore whitespace (using diff -b to
check results), which helps TEST_HOST pass the same tests as toybox.
Fixes to chattr and date tests. It also has a new variable $C with the
absolute path to the command being tested (bypassing shell builtins),
and a function testcmd() which is just like testing() except it prepends
the command name ($C) to the test command line as well as the test
description.</p>

<a name="02-06-2016" /><a href="#02-06-2016"><hr><h2><b>June 2, 2016</b></h2></a>
<blockquote><p>When the 'Drink' button is pressed it makes an instant but
highly detailed examination of the subject's taste buds, a spectroscopic
analysis of the subject's metabolism, and then sends tiny experimental
signals down the neural pathways to the taste centres of the subject's
brain to see what is likely to be well received. However, no-one knows
quite why it does this because it then invariably delivers a cupful of
liquid that is almost, but not quite, entirely unlike tea.</p>
<p> - The Hitchhiker's Guide to the Galaxy</p></blockquote>

<p><a href=downloads/toybox-0.7.1.tar.gz>Toybox 0.7.1</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.7.1>git commit</a>)
is out. (Yes, I forgot to update the --version string, but I already
uploaded the <a href=downloads/binaries/0.7.1>binaries</a>.)</p>

<p>The website has https support now, you can "make cat ps ls"
to get standalone commands (and "make list list_pending" to see what's
available), and a whole lot of bugfixes and new options to existing
commands.</p>

<h2>New Commands</h2>
<p>Rob implemented <b>ulimit</b>. In pending, Elliott Hughes implemented
file. and Lipi Lee implemented a simple wget. (Pending also had minor
cleanups to more and lsof, but no promotions this time around.)</p>

<h2>New Options</h2>
<p>Izabera implemented env -u, suggested adding seq -w, made factor
use full unsigned 64 bit math even on 32 bit platforms, pointed out base64
-w0 should disable wrapping, and sped up wc -c.
Elliott Hughes added mount -o relatime, xxd -p -r, and od -w.
Sameer Pradhan (or possibly Bilal Qureshi) suggested adding stat -tL -c %m%t%T.
Tom Cherry added getprop -Z. Paul Barker added hostname -b and -F.
Rob added ls -b, made ls -q work with utf8,
made sed -f - read from stdin, and added top -O (like ps -O).</p>

<p>Elliott and Rob <b>added Thread support to ps and top</b>,
with -o TID, TNAME. We also added -o PCY (android scheduling policy),
-o BIT (process is 32 or 64 bit), and -o TNAME now shows the parent
command name for threads.</p>

<h2>Documentation</h2>

<p>Rob added the sed invocations to convert tabs/spaces and back to
design.html. Isaac Dunham updated hexedit's help text.
Jakob Flierl pointed out a broken URL in the README.</p>

<p>Rob also redid the naming scheme of sed's pattern manipulation code to
remove the gratuitous references to Roger Zelazny's "Amber" series, since it
was confusing people.</p>

<h2>Bugfixes</h2>

<p>Grep -H and -n should now work properly with -ABC. Andy Chu pointed out an
out of bounds access for zero length lines in rev, fixed a buffer overflow
in diff -r, and fixed operator precedence in expr (although Rob is rewriting
chunks of expr so toysh can use its plumbing for $(( )) ).
Patrick Ohly fixed the too-aggressive suid permission dropping logic.
Josh Gao fixed a segfault when find -iname got no argument, and
made tail -f work right with just one file argument.
Tom Marshall cleaned up tar's long filename support and improved
the tar tests, and reported another find bug (with -iname -o -iname not
tracking copy lifetimes properly) that got fixed.</p>

<p>Elliott Hughes fixed wc -c to not trust zero length files to actually be
zero length (/proc does that), fixed "mount -o rw,remount /system" on
Android, removed trailing spaces on ps -o cmdline, fixed pkill -9 and
the corresponding tests, made "insmod -" work, fixed top -b and tail -NUM,
pointed out that ps shouldn't trim numeric fields for display size limits,
and added some more
explicit "sort" calls to make pipelines so build tempfiles are easier to cache.
Rob <a href=https://github.com/landley/toybox/commit/32b3587af261>fixed an insane sed thing</a> the perl 5.22 build was doing.
Fixed mount -o to properly pass in leftover string data, and
<a href=http://lists.landley.net/pipermail/toybox-landley.net/2016-March/004790.html>documented how to use toybox to mount nfs</a> (warning: kernel patch
to fix some bitrot in the kernel NFS driver's string parsing attached
to that message).</p>

<p>George Burgess IV corrected some variable types in traceroute.
Base64 now wraps == properly. Fixed two bzcat segfaults reported by
John Regehr. Andy Chu found a segfault in "sed -e 'c\'" with no trailing
line, and implemented mv -n and cp -n. The cyanogenmod guys pointed out that
cp -a shouldn't complain if a non-root user can't chown, and we added
the output path to cp -r error messages while we were there (before was just
the filename).</p>

<p>Samuel Holland fixed blkid's handling of vfat labels, and
fixed a segfault when basename was passed an empty string and an empty
suffix. Davis Mosenkovs fixed touch -t seconds parsing.
Rob fixed a bunzip bug reported by John Regehr (the bad CRC
error message was printing a NUL argument).</p>

<p>Not all of the commands build standalone, but more of them do now;
scripts/single.sh can now build a "mv" that isn't actually "cp".
The dependencies are more granualr, so "make top; make ps" no longer
produces a broken ps that ignores -A (because ps.o wasn't getting rebuilt
even though top had the FLAG macros for -A zeroed).</p>

<h2>Build</h2>
<p>Rob added a <b>warning when building commands out of
pending</b>. (The pending directory is full of code that hasn't been
properly vetted. Use at your own risk.)</p>

<p><b>New build targets let you build individual commands by name</b>, ala
"make ls cat ps", and you can run the test suite for each standalone
command with "make test_ls" and such.
"make list" shows all such standalone commands in defconfig, and
"make list_pending" shows unfinished commands from toys/pending
("make list list_pending" shows both together). "make clean" now deletes
these filenames at the top level, and the corresponding unstripped files
live in the directory generated/unstripped.</p>

<p>Nicholas Boichat suggested switching make.sh to use $! for process
enumeration during parallel builds (which is both more efficient and more
portable), and suggested shell builtin replacements for wc/awk/sed so the
build loop has fewer forks now.</p>

<p>Lots of work on the test suite, much of it due to Andy Chu. It now
consistently prints the name of the command being tested at the start of each
test (and the common infrastructure does that, not each individual test), and
"make tests" actually runs all the available tests now.
Seperated pgrep and pkill tests, split lsattr/chattr, added fstype and base64
tests. The "tests/files" directory now collects files for tests to
use, with blkid, bzcat, and utf8 subdirectories: the $FILES variable
gives a path to it, so "$FILES/blkid/ext2.bz2" and so on.
The testsuite now has test files with 3 different types of "not utf8 output"
sequences that require escaping, plus some combining character torture
tests, direction reversals, and so on.</p>

<p>Added dependencies on TOYBOX_FORK to various pending commands that need
nommu conversion (which should fix the allyesconfig build).</p>

<p>Static builds with selinux should work again.</p>

<h2>Library</h2>

<p>New bufgetgrgid() and bufgetpwuid() functions cache previous lookup info
rather than repeatedly traversing /etc/passwd and /etc/group (which is slow).
Added xpipe() to lib to catch pipe creation failure.
The HELP_ macros generated by config2help.c now use a capital prefix
to avoid collicing with help_exit() and such.</p>

<p>The dirtree infrastructure got a cleanup pass in preparation for adding
infinite recursion depth support (needed by rm -r), updated the
<a href=code.html#ib_dirtree>documentation</a> to describe the new
semantics (removing dirtree_start() and adding dirtree_flagread()).
Now dirtree_recurse() takes the new dirfd as an argument.</p>

<p>Split out _xexit() from xexit() and let sigatexit() set multiple
callbacks.</p>

<p>For years the man pages have said to #include <sys/types.h> to get
major/minor/makedev but now that glibc
<a href=https://sourceware.org/ml/libc-alpha/2015-11/msg00253.html>has vowed
to break existing programs</a> and replace it with another nonstandard header
not in posix or lsb, we added our own functions to lib/ to do the transform
ourselves (based on what the kernel actually expects).</p>

<h2>Portability</h2>

<p>Debian unstable started needing an extra header #include for some reason, and
although printf("%.*s", INT_MAX, s) worked fine on Ubuntu 12.04 it
didn't on 14.04, so added a workaround for that. Typecast a printf because
wchar_t isn't a rigidly defined size. RLIMIT_RTTIME was
added to the kernel in 2008 but you can't expect uClibc to have noticed yet,
nor did it #define MS_RELATIME (added in 2006), or prlimit (2010)...
(Given the improvements in musl and bionic, uClibc support may be dropped
in a future release.) Given that the xattr functions were added during
linux 2.5, we can #include its header unconditionally.</p>

<p>Renamed basename_r() to something else to avoid conflicting with freebsd's
libc, and both scripts/install.h and scripts/config2help.c no longer include
toys.h (to make cross-compiling from systems we don't run on easier).</p>

<p>Debian bug 635570 did something unspeakably nonportable, depending on
"sed -e 'a\'" (with no next line of the pattern, so an unterminated
continuation) to add a newline to the last line of input if and only if
that last line of the input didn't have a newline, and to take no other
action. This is well into "depending on a bug" territory, but we implemented
it because otherwise Debian's install broke. (Of course this behavior
is undocumented, non-obvious, and doesn't really make logical sense.)</p>

<p>CONFIG_TOYBOX_NORECURSE now disables the stack measuring logic (which
was giving some "security" code fits). Also we typecast pointers to (long)
before comparing them to avoid spurious compiler "optimizations" that
break the code.</p>

<a name="02-02-2016" /><a href="#02-02-2016"><hr><h2><b>February 2, 2016</b></h2></a>
<blockquote><p>"I checked it very thoroughly," said the computer, "and that
quite definitely is the answer. I think the problem, to be quite honest with
you, is that you've never actually known what the question is."
- The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.7.0.tar.gz>Toybox 0.7.0</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.7.0>git commit</a>)
is out.</p>

<p>The new commands in defconfig are <b>iotop</b>, <b>top</b>, <b>pgrep</b>,
and <b>pkill</b>
(most replacing corresponding versions from pending). Added grep -ABC,
swapon -d (discard), mkswap -L (label) and UUID support, and find -delete.
Izabera added free -h and unshare -f. Josh Gao implemented tail -f.
Jose Bollo submitted cp --preserve=context,attr. Kylie McClain added
mktemp -u.</p>

<p>In pending there's the start of a vi command, and Sameer Pradhan contributed
a new dhcp6. This cycle saw several rounds of route cleanup and a little dhcp
cleanup, but neither are complete yet. Lipi Lee did some cleanup to netstat.c
and Elliott Hughes removed warnings from traceroute.</p>

<p>Lots of updates to ps: several new -o options, -k (--sort) -O and -M,
improved compatibility with Android's historical behavior, and
extensive internal code cleanup (including the removal of all
the magic constants).</p>

<h3><b>Website</b></h3>

<p>Dreamhost restored the <a href="#12-21-2015">missing 11 months</a>
to the mailing list archive, in the process deleting the month after
that. Now they've asked if I have mbox files archiving the new
gap (between December 20, 2015 to January 21, 2016, and presumably they
could also fill in the gap from December 14, 2014 to January 3, 2015 that's
been there since the last time they did this),
but due to some gmail filtering I've
<a href=http://landley.net/notes-2012.html#15-10-2012>never
been able to disable</a>, my copy of those files is spread among 3 different
mbox files I'd have to sort/filter/collate. (It's on the todo list.)</p>

<p>Added a code of conduct to the README (we're
<a href=https://engineering.twitter.com/opensource/code-of-conduct>borrowing twitter's</a>) because somebody
made it necessary.</p>

<h3><b>Bugfixes</b></h3>
<p>Fixed another sed bug where any ] right after [ was skipped (not just the
first one in the range, so [[] didn't terminate). Fixed sort -f and added test cases.
Assume 80 columns in "ls -m | cat", ls -L is no longer backwards,
and ls of files with no paths no longer uses an uninitialized (zero) dirfd.
Several bugfixes
to find (Gilad Arnold fixed -perm, Daniel K. Levy fixed "find . -exec echo {}",
and while we're there I fixed find --prune, made "find . -execdir
echo {} + -execdir ls {} +" work, and ripped out the environment size
measuring code that checked for a 128k limit removed back in linux 2.6.22).
Elliott Hughes fixed the date command's parsing of 4 digit
years and documented the %s escape, fixed hwclock -u, and pointed out
that runcon needs to exec to do its job (not recursively call another
command_main() in the same process). Tom Marshall reported that blkid was
handling ext2 wrong. Mike Moreton corrected cpio extraction's uid and gid
values, and added a --no-preserve-owner option. Fixed the SUID permission
dropping logic (which was a bit over-zealous, preventing some commands from
running at all).</p>

<p>I'm told that debian-testing broke its libc so the nsenter build breaks,
but my attempts to install the debian-testing network cd image under
qemu keep breaking. Maybe someday they'll fix it enough I can actually
reproduce the problem. (Debootstrap under unbuntu builds an ubuntu-flavored
chroot in which toybox builds fine.)</p>

<h3><b>Documentation</b></h3>
<p>Rewrite of the about.html page, tweaks to design.html, and a re-triage of
sbase in roadmap.html. Update to mkstatus.py to collate multiple span
tags with the same id, resulting in a larger status.html page (which
was previously ignoring some commands in the roadmap).</p>

<p>Expanded the defconfig/allyesconfig/allnoconfighelp text in "make help"
to explain what they're for.</p>

<h3><b>infrastructure</b></h3>
<ul>
<li><p>Expanded toys.optargs to 64 bits so a command can have more than 32 options.</p></li>
<li><p>Added NOEXIT() wrapper to turn xwrap() functions into warning versions
using the existing longjump(toys.rebound) infrastructure.</p></li>
<li><p>Renamed dirtree->data to dirfd and stopped storing symlink length
into it (this fixed a bug where following symlinks to directories
didn't give a valid directory filehandle, noticeable with ls -Z).</p></li>
<li><p>New TAGGED_ARRAY() infrastructure generates index and bitmask macros
for arrays of structures starting with a name string.</p></li>
<li><p>New lib/linestack.c for utf8 fontmetrics (draw_str() and utf8len()
and so on), and for tracking multiple lines of text
(vi, less, shell history) that need wordwrapping and scrolling up/down.</p></li>
<li><p>Upgrades to lib/interestingtimes.c: scan_key() now has a timeout
in milliseconds and recognizes more sequences including ANSI
window size probes. New utf8 test files in tests/files/utf8 including
sequence reversing, stacked combining chars, and all three types of
unprintable sequences (low ascii <32 ala ^X, invalid utf8 sequences ala
<AB><CD>, and invalid unicode code points ala U+1234).</p></li>
<li><p>More comma handling code in lib.c: comma_args()</p></li>
<li><p>Added error_msg_raw() to shut up fortify's endless static checking false
positives.</p></li>
<li><p>readfileat() can now realloc() in a loop to read long files
("zcat | insmod" needed it).</p></li>
</ul>

<h3><b>Roadmap</b></h3>
<p>We're getting close to having a self-hosting development environment
using toybox for the command line. The remaining busybox commands in
<a href=http://landley.net/aboriginal/about.html>Aboriginal Linux</a> are:</p>

<blockquote><p><b>
awk bunzip2 bzcat bzip2 dd diff expr fdisk ftpd ftpget ftpput gunzip gzip
less ping route sh sha512sum tar test tr unxz vi wget xzcat zcat
</b></p></blockquote>

<p>And the remaining non-busybox commands in Aboriginal Linux's build/host
directory (from the distcc, genext2fs, e2fsprogs, zlib, and squashfs packagesi)
are:</p>

<blockquote><p><b>
mke2fs fsck.ext2 resize2fs distcc genext2fs unsquashfs distccd mksquashfs tune2fs
</b></p></blockquote>

<p>Squashfs and distcc are probably out of scope for toybox, but mke2fs,
fsck.ext2, resize2fs, genext2fs, and tune2fs should all be added to the
above "busybox" replacement list.</p>

<p>Remind me to include this countdown in future releases. Once they've all
been replaced, the next goal is <a href=http://landley.net/aboriginal/about.html#selfhost>building AOSP under itself</a>.</p>

<p>See the full <a href=roadmap.html>roadmap</a> and <a href=status.html>status</a>
pages for more details.</p>

<a name="12-21-2015" /><a href="#12-21-2015"><hr><h2><b>December 21, 2015</b></h2></a>

<p>Yes, 11 months have gone missing from the mailing list web archive.</p>

<p>Yesterday evening Dreamhost's mailman server went down (timing out trying
to connect). I poked them about it, they
<a href=https://twitter.com/landley/status/678781271670149121>blamed
DNS</a>, I explained that the hang was _after_ the DNS lookup and
entered the dig info into the trouble ticket showing the IPs the DNS
queries were returning, they reinstalled the server at that IP from what I
assume was their most recent backup, and that's how 11 months of messages
vanished out of the archive.</p>

<p>I've <a href=https://twitter.com/landley/status/679114451975467008>continued to poke them about it</a> but I honestly believe that's the best they
can do. <a href=http://landley.net/dreamhost.txt>Last time</a>
this sort of thing <a href=http://landley.net/dreamhost2.txt>happened</a>
we went back and forth for months, so I added a link to a backup web
archive (in the nav bar on the left) that isn't controlled by dreamhost,
and thus doesn't gratuitously lose data on a regular basis. (I note
the earlier hole in Dreamhost's archive was never fixed either. That
was data never getting archived, this is a year's worth of data that
was in the archive until yesterday vanishing after the fact.)</p>

<p>If you're wondering why the <a href=http://lists.landley.net>top level</a>
list page has been "temporarily disabled" for multiple years now... you'd have
to ask Dreamhost. I know I have. More than a dozen times.</p>

<a name="03-11-2015" /><a href="#03-11-2015"><hr><h2><b>November 3, 2015</b></h2></a>
<blockquote><p>"Alright," said Ford. "How would you react if I said that I'm
not from Guildford after all, but from a small planet somewhere in the vicinity
of Betelgeuse?" Arthur shrugged in a so-so sort of way. "I don't know," he
said, taking a pull of beer. "Why - do you think it's the sort of thing you're
likely to say?" - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.6.1.tar.gz>Toybox 0.6.1</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.6.1>git commit</a>)
is out.</p>

<p>We have a new <b>ps</b> command with all the -o fields posix wants (although
it doesn't accept BSD non-dash option syntax yet), and <b>bunzip2</b> (not just
bzcat but the proper extract-in-place command).
Sameer Pradhan added <b>hostid</b> and <b>fsync</b>.
Elliott Hughes added <b>flock</b>.

<p>The people waiting for <b>human readable number support</b> (du -hH, ls -h,
and so on) can thank Elliott Hughes for implementing it. (Our output doesn't
exactly match others' because we our "binary" mode will say 1.0G instead of
1024M, which is a bug in the other one we didn't emulate.)</p>

<p>The other big news is <b>nommu support</b>, tested on the new
<a href=http://nommu.org/jcore>jcore</a> processor but presumaby working
on any nommu system. A few commands don't support nommu yet, but those
are disabled by dependencies on TOYBOX_FORK in menuconfig when building
for nommu. The roadmap now has a large section analyzing the uClinux
project (note that <a href=http://nommu.org>nommu.org</a> is slowly replacing
<a href=http://uclinux.org>uclinux.org</a> as the standard repository of
all knowledge and wisdom about nommu. The old site <a href=#12-02-2012>contains
much that is apocryphal</a>, or at least wildly inaccurate, and the new one
is trying to improve on that).</p>

<p>Both "make change" and scripts/single.sh (for building standalone commands
without the multiplexer logic) now use the top level .config
for toybox global settings such as Linux Security Blanket Module selection,
(so make defconfig before change now).</p>

<p>Documentation updates to the <a href=code.html>code</a> and
<a href=roadmap.html>roadmap</a> pages.</p>

<h3>pending</h3>

<p>In the pending directory Sameer Pradhan added tftp,
and Elliott Hughes sent lsof. Isaac Dunham upgraded mdev,
reboot, init, login, and modprobe, and fixed a distro-specific build break in
scripts/mkflags.h. Elliott Hughes and Lipi Lee made netstat -p handle
command lines longer than 21 characters, and Elliott fixed netstat -e and
some build warnings. Yeongdeok Suh fixed a warning in dhcpd.
I started cleanup on pgrep/pkill.</p>

<h3>Command updates, bugfixes, and infrastructure</h3>

<p>The multiplexer's "command not found" error exit is now 127, so now you can't
distinguish between a command not being found in the multiplexer and
the multiplexer itself not being found by the shell, because people wanted
that for some reason.</p>

<p>Elliott Hughes made date reject invalid dates rather
than set the clock to something weird (setting the clock 100 years into the
future makes most Linux desktops surprisingly unhappy, and ntpdate won't fix it
either), fixed several ls -l display issues (user/group field ordering,
make user/group/lsmcontext left aligned), did the aforementioned
extensive work on human readable number output, fixed ionice's default
class, fixed a mv overwrite bug, made df's columns auto-size, added
--ppid and -Z to ps, and teamed up with Daniel K. Levy to fix
a segfault in find's handling of -newer -group or -user.</p>

<p>Hyejin Kim added stat -c %T support. Colin Cross worked
on vmstat fixing
a header printing bug and calculating the bi and bo columns in the right
units. Isabella Parakiss reported that sed -e "/x/c\" -e "y" added an extra
newline and that grep -w '\(x\)\1' didn't work, both now fixed.
Alistair Strachan fixed several problems with switch_root. Kylie McClain
pointed out env should be able to clear variables via NAME= syntax.
Dima Krasner added support for running blkid without a partition (so it shows
all partitions). Hyejin Kim sent in a bunch of static analysis bug reports.</p>

<p>Isabella Parakiss reported that sed -e "/x/c\" -e "y" added an extra
newline and that grep -w '\(x\)\1' didn't work, both now fixed.
Alistair Strachan fixed several problems with switch_root. Kylie McClain
pointed out env should be able to clear variables via NAME= syntax.
Dima Krasner added support for running blkid without a partition (so it shows
all partitions). Hyejin Kim sent in a bunch of static analysis bug reports.</p>

<p>Two large thinko fixes in oneit: -3 was always enabled (which would
eventually block if the child never read the exiting PID numbers from its file
descriptor #3 until the pipe filled up), and the signal handlers weren't
set up right (for requesting semi-graceful halt/poweroff/reboot).
Calling install without a mode is now 0755, and install -g 0 no longer clashes
with cp --preserve. Better error message for ls -r on unreadable
directories, and ls -Z now uses O_PATH (with the /proc/self/fd/%d
workaround for kernel stupidity as necessary).</p>

<p>Date now understands @unixtime[.fraction] and uses -D for
the set-side format (matching busybox's extension for this). The seq -f
string now checks that it's got exactly one %f escape with the correct
attributes (and a whole bunch of test cases for it). Fixed a bug
in od that screwed up the position indicator on arm and mips.
In stat the d/h units moved from %d %D to the default string.
And patch can now correctly apply hunks with trailing context to the start of
the file.</p>

<p>The prompt argument moved out of yesno() (the caller can print the prompt
themselves). Replaced toys.exithelp with help_exit(). Added new
XVFORK() macro, and xpopen_both() calls /proc/self/exe when passed
a NULL argv (see cpio -p for example usage). Replaced toys.recurse
with toys.stacktop so the recurse or re-exec decision is now based
on bytes of stack space used. Marked a bunch of command-local functions
static.</p>

<p>New additions to lib/ include strlower(), xconnect(), and the
aforementioned help_exit().
The testsuite now has some infrastructure tests based on "example"
commands such as toys/examples/test_human_readable.c.
The login command finally got a long-overdue cleanup (it's one of the
commands that predate the "pending" directory but were part of the reason
for it). Hexedit had an
uninitialized variable (of course gcc didn't spot it, it was too busy
warning about "may be used uninitialized but never actually is" variables).</p>

<p>Tweaked makefile so
"make CROSS_COMPILE=prefix-" (as well as "CROSS_COMPILE=prefix- make",
which still works). Toybox is now installed chmod -w so broken installers
(like the bunzip2 package's) that try to overwrite existing binaries won't
knock out the whole of toybox.
GCC 5.2.0 stopped being able to compile Linux 2.6.12's kconfig, but
we added a workaround. You can now build uptime without utmpx.h.
Alejandro Joya pointed out that enabling smack required smack on the host
as well as target when cross compiling, which is now fixed.</p>

<p>Note: toybox can autodetect nommu support when building with a uClibc
toolchain such as <a href=http://landley.net/aboriginal/downloads/binaries/old/1.4.3/cross-compiler-sh2eb.tar.gz>the one from Aboriginal Linux</a>,
but <a href=http://github.com/richfelker/musl-cross-make>with musl-libc</a>
you'll have to enable CONFIG_TOYBOX_MUSL_NOMMU_IS_BROKEN to work around the
fact they provide a non-functional fork() implementation that always returns
-ENOSYS, to prevent you from compile-time probing for nommu support when
cross-compiling. Unfortunately "preventing you from probing" seems to be
an explicit policy with musl, they also don't provide an "#ifdef __MUSL__"
because their library is perfect and you're only ever allowed to work around
other people's bugs, not theirs. So we have to use menuconfig to manually
enable musl-specific bug workarounds.</p>

<a name="23-07-2015" /><a href="#23-07-2015"><hr><h2><b>July 23, 2015</b></h2></a>
<p>I recreated the <a href=downloads/toybox-0.6.0.tar.gz>0.6.0 source tarball</a>
(new sha1sum 08fb1c23f520c25a15f262a8a95ea5b676a98d54)
because I forgot to add --prefix to the git archive command when I updated
my release script from mercurial, so the files weren't in an enclosing
directory. (Ooops.)</p>

<a name="19-07-2015" /><a href="#19-07-2015"><hr><h2><b>July 19, 2015</b></h2></a>
<blockquote><p>
The reason why it was published in the form of a micro sub meson electronic
component is that if it were printed in normal book form, an interstellar
hitchhiker would require several inconveniently large buildings to carry it
around in." - The Hitchhiker's Guide to the Galaxy </p></blockquote>

<p><a href=downloads/toybox-0.6.0.tar.gz>Toybox 0.6.0</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.6.0>git commit</a>)
is out. (Yes, git. See the <a href=#05-04-2015>previous news entry</a>.)</p>

<p>Sorry for the unusually long gap between releases. Since last release Ye
Olde Project Maintainer traveled to japan twice and had two more "once
a century" floods at home. (Probably a coincidence.) Still catching up.</p>

<h3><b>CELF/ELC talk and Wikipedia[citation needed] article</b></h3>

<p>I gave another State Of The Toybox talk
(<a href=https://www.youtube.com/watch?v=04XwAbtPmAg>video</a>
<a href=http://landley.net/talks/celf-2015.txt>outline</a>), in which I
repeat my <a href=http://landley.net/notes-2013.html#07-11-2013>perennial</a>
<a href=https://twitter.com/landley/status/557309224535851009>complaint</a>
that Wikipedia[citation needed]
<a href=http://en.wikipedia.org/wiki/Toybox>still</a>
<a href=https://en.wikipedia.org/wiki/BusyBox#Controversy_over_Toybox>says</a>
toybox was relicensed before its hiatus, when relicensing was why
the hiatus ended.</p>

<p>Since Wikipedia[citation needed] seems unable to do the
<a href=#15-11-2011>most</a>
<a href=http://landley.net/hg/toybox/log/tip/LICENSE>basic</a>
<a href=http://landley.net/notes-2011.html#13-11-2011>research</a> on
this point, and has stuck to an incorrect sequence of events for years,
I've been gradually escalating my attempts to correct them. Toybox
came out of mothballs in November 2011 <b>because</b> it could be
relicensed. That's what opened up a new niche busybox wasn't already
filling with a 10 year headstart.</p>

<a name="asterisk_back" />
<p>The article has plenty of smaller issues<a href=#asterisk>*</a>, but
given that I gave an entire talk at Ohio LinuxFest in 2013
(<a href=http://landley.net/talks/ohio-2013.txt>outline</a>,
<a href=https://archive.org/download/OhioLinuxfest2013/24-Rob_Landley-The_Rise_and_Fall_of_Copyleft.mp3>audio</a>) on why I switched away from GPL for
my projects, that one bugs me.</p>

<h3><b>New stuff this release</b></h3>

<p>There's a new android menu in menuconfig, and rather a lot of Linux
Security Module support (Smack for Tizen from Xavier Roche and José Bollo,
and SELinux for Android from Elliott Hughes; see
the Security Blanket menu under global settings in menuconfig) has
trickled in, although there's still more to come.</p>

<p><b>New commands:</b> Added reset, nproc, ionice, and iorenice.
Elliott Hughes contributed xxd, runcon,
restorecon, load_policy, getenforce, setenforce, getprop, and setprop.
Promoted shred, nsenter, and hwclock.</p>

<p>You can once again build catv now the flag infrastructure's been updated to
let it coexist with cat -v.
And on a long plane flight I wrote
hexedit, an interactive hex editor that implements the start of
cursor control infrastructure (for eventual use by less and vi and shell
command history and so on).</p>

<p><b>New options:</b> Added sed -E as a BSD-compatible synonym for -r.
Upgraded oneit with -r (restart), -3 (send exiting PID values to child),
and signal handling. Added -v option to timeout, -m to mknod, -u to shred,
-t to dmesg, and -123 to head and tail. Added implicit "." to grep -r without
any files to work on. Hyejin Kim requested prefix support for truncate -s.
Greg Hackman added -inum to find.
Jan Cybulski added the smack side of ls -Z support. Various patches also
added -Z to mkdir, mknod, and mkfifo.
Basic cp --preserve support went in, but not yet the xattr/LSM parts.</p>

<p>The toybox command now has a --version option,
which uses "git describe" if available.</p>

<p><b>Build infrastructure:</b>
The "make change" target now saves the output of each failed standalone
command build in a .bad file, and "make defconfig" is quieter now.</p>

<p>Paul Barker submitted a large patch changing command install paths so
"toybox can be installed alongside busybox without confusing
update-alternatives". (There's some argument over
what the right paths should be, and I'm waiting for
people to tell me what else needs fixing because I have no idea. I've
been symlinking /bin to /usr/bin since 2002
<a href=http://landley.net/writing/hackermonthly-issue022-pg33.pdf>for
historical reasons</a>.)</p>

<p><b>Docs:</b> The repository link now goes to github, with another link
to the commit rss feed.</p>

<p>Elliott Hughes updated the Android section of the roadmap
(and he would know). Redid bits of scripts/mkstatus.py to make updating
status.html easier, and the README is larger.</p>

<p>More description of option parsing in code.html, which now describes the
FLAG_x macros, switching flag macro sets with FOR_newcommand, how
configuration zeroes flag macros and using FORCE_FLAGS to suppress the
zeroing of options shared between commands. Also added description of ";"
to make --longopts take an optional =value part, and more about TOYBOX_DEBUG
to check NEWTOY() option strings (otherwise a bad option string makes
lib/args.c obviously segfault, but doesn't explain why).</p>

<p>Added a "Why 0BSD?" section to license.html when submitting zero clause bsd
to SPDX (according to the pending license spreadsheet, it's been approved for
SPDX 2.2).</p>

<p>The old list of commands needing cleanup but not in pending was
removed from toys/pending/README and instead the issues were added
as TODO comments in the individual commands.</p>

<p><b>Bugfixes:</b>
Fixed mount -a segfaulting without -O (reported by Janus Troelsen),
and made it try a "become rw" ioctl() on the block device before falling
back to mounting read only (because Android expects that).
Fixed printf -- and printf ---. Lots of tweaks to ls -l spacing with
different options. Make touch -d and -t actually set time when you don't
specify nanoseconds.
Fixed a subtle bug where recursive calls (toybox commands that run other
toybox commands) weren't resetting all their state. (This manifested as
a "no }" error from "find | xargs sed", but could cause other problems.)
And David Halls reported another sed bug trying to compile libiconv (which
left extra \ at the start of lines in a generated shell script, breaking
the build). Output an error message for "cat /mnt".</p>

<p>Kylie McClain reported that mktemp broke when $TMPDIR was set to an empty
string (which is not the same as unset), that install/find didn't support
numeric uid/gids, and that sort -z affects both input and output.
Isabella Parakiss fixed a printf.c bug.
David Halls fixed bugs in install -D and find -exec. Samuel Holland
fixed unshare -r. Hyejin Kim fixed makedevs with a count of 1, fold -w
range checking, an error path in scripts/mkflags.c, added -i to dhcpd,
and stopped su from prompting the root user for the new user's password.
Jan Cybulski spotted wrong indentation when combining ls -s and -i with -C and
-x. José Bollo fixed stat %G. Sameer Pradhan fixed a bug in mkfifo -Z.</p>

<p>Elliott Hughes asked for a default SIGPIPE handler to disable
the signal handler bionic's dynamic loader installs (yes really). Still not
100% sure what the correct behavior is there. (Posix is
(<a href=http://permalink.gmane.org/gmane.comp.standards.posix.austin.general/10915>actively unhelpful</a>, but at least they're taking
<a href=http://austingroupbugs.net/view.php?id=789#c1976>years to
make up their mind</a>. Elliott also sent patches to fix a typo in
useradd.test, add missing arguments to error_exit() calls and clean up
printf() format strings, fix an off by one error in human_readable(),
fix dmesg -c error reporting, fix a segfault in comma_scan where the option
was the last item in optlist (triggered by mount -o ro,remount), fix
hwclock -w, made ifconfig print lowercase MAC addresses (it was bothering
him), and make terminal_size() read the right environment variable
(LINES, not ROWS). And he suggested the test suite notice high command exit
values (corresponding to segfault or other signals).</p>

<p>People are apparently using toys/pending commands, despite the police tape
and flashing lights, so added louder warnings to toys/pending/README.
Elliott Hughes fixed various problems with tar, dd, more, and top.
Hyejin Kim cleaned up syslogd and dumpleases. Isaac Dunham added hotplug
support to mdev. Yeongdeok Suh added RFC-3315 ipv6 support to dhcpd.</p>

<p>I rewrote ps.c from scratch (in pending), but it's not ready for real use
yet.</p>

<p><b>Portability:</b>
On the portability front Bernhard Rosenkranzer fixed a problem where the
menuconfig code wouldn't compile in C99 mode. (This led to me documenting
the craptacular nature of kconfig in a README, and the plan to replace it
sometime before 1.0.) Some extra flags to shut up overzealous llvm warnings
were added (and have to be probed for because gcc complains about
arguments it doesn't recognize even when they switch stuff _off_ using
a standard syntax). Don't depend on malloc(0) to return non-null in ls.
David Halls fixed some mac/ios portability issues,
implying somebody's built at least part of toybox on a mac.</p>

<p>Added basename_r() to lib/lib.c because the posix semantics for basename()
are stupid but what the gnu guys did to it was appalling.
Turns out bionic already had a basename_r(), but posix still doesn't.
Fixed it up in portability.h, but this
could break more stuff in future. (Correct fix is to lobby posix to add it,
which would probably take about 15 years...)</p>

<p><b>Infrastructure:</b>
The build now checks $LDFLAGS for linker-only flags, and allows the strip
command to fail (binflt toolchains provide a strip that doesn't work).
Since time.c uses floating point, added TOYBOX_FLOAT dependency in config.</p>

<p>There's a lib/lsm.h defining varous inline functions for linux
security modules stuff, if (lsm_enabled()) should turn into a compile-time
constant 0 and let code drop out when TOYBOX_LSM_NONE selected, but
testing against CFG_TOYBOX_LSM_NONE or derived symbols is still useful
becuase when it _is_ enabled the probe turns into a system call you
don't want to repeat too much.</p>

<p>Switched a bunch of commands from signal() to xsignal(). Factored out
xgetgrnamid() and xgetpwnamid() into xwrap.c. Make time.c depend on
TOYBOX_FLOAT (since it always uses float so shouldn't be available on
build targets without even software float). Added readfileat() to lib/lib.c.</p>

<p>The dirtree infrastructure now passes in full flags for the old symlink
field, and the new DIRTREE_SHUTUP flag disables warnings if a file vanishes
out from under you during traverse. New dirtree_start() wrapper to
create dirtree root with only two arguments.</p>

<p>The not-curses infrastructure introduced by hexedit mostly moved to
lib/interestingtimes.c.</p>

<a name="asterisk" />
<a href="#asterisk_back" />Asterisk:</a> such when
Tim contacted me (my blog says a couple days before nov 13, 2011, I.E.
11/11/11 not some specific day 2 months later) to ask if I wanted to work
on a new project he was proposing called
<a href=http://www.elinux.org/Busybox_replacement_project>BentoBox</a>
(because I used to do busybox, he'd forgotten toybox existed
until I brought it up). And don't ask me what "focuses not on compatibility
with its GNU counterparts" means when CP_MORE adds 7 non-posix options
and toys/other has 84 commands in neither posix nor LSB. I think they're
struggling to explain the difference having dismissed "licensing" as being
the reason it started up again after a long hiatus? The reason I don't think
GNU is special is there are a half-dozen other independent
implementations of the same unix command tools out there (AT&amp;T,
BSD, Coherent, Minix, plan 9, busybox, toybox, and several more analyzed in
the <a href=roadmap.html>roadmap</a>, and that's ignoring the implementations
written for DOS or in assembly over the years). But I do care what
Linux From Scratch expects, and if it's
<a href=http://archive.linuxfromscratch.org/lfs-museum/7.6/LFS-BOOK-7.6-NOCHUNKS.html#ch-tools-gcc-pass1>calling mv -v</a>
then I impelement mv -v
even if <a href=http://landley.net/toybox/roadmap.html>posix hasn't got
it</a>. And I don't know why "gnu counterparts" would describe this when
util-linux isn't a gnu package, nor are info-zip, e2fsprogs, kmod, less,
procps, shadow, sysklogd, vim, zlib, sudo, dhcpcd...</p>

<a name="05-04-2015" /><a href="#05-04-2015"><hr><h2><b>April 5, 2015</b></h2></a>
<p>Since <a href=https://android.googlesource.com/platform/external/toybox/>android</a> and
<a href=https://git.tizen.org/cgit/platform/upstream/toybox.git>tizen</a>
and <a href=https://github.com/kraj/meta-musl/tree/master/recipes-core/toybox>openembedded</a>
and <a href=https://packages.gentoo.org/package/sys-apps/toybox>gentoo</a>
and so on have all been using Georgi Chorbadzhiyski's git mirror rather
than the mercurial repository, I bit the bullet and switched the project's repo
<a href=https://github.com/landley/toybox>to git</a>. Georgi's
<a href=https://github.com/gfto/toybox>mirror</a> is now pulling from that.</p>

<a name="25-02-2015" /><a href="#25-02-2015"><hr><h2><b>February 25, 2015</b></h2></a>
<blockquote><p>"A common mistake that people make when trying to design
something completely foolproof is to underestimate the ingenuity of
complete fools."</p><p>- The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.5.2.tar.gz>Toybox 0.5.2</a>
(<a href=/hg/toybox/shortlog/1702>commit 1702</a>) is out.</p>

<p>New promoted commands: sed (finally fixed enough it builds Linux From
Scratch), printf (cleaned up and promoted), shred and
base64 (the Tizen guys wanted them), getenforce, setenforce, and chcon (android),
mix (promoted with fixes from Isaac Dunham), nsenter (from
Andy Lutomirski, merged into unshare).</p>

<p>Elliott Hughes submited a bunch of patches to support Android (to
both toybox and Bionic libc, which he maintains). On toybox's end this
involved a lot of fixups to portability.[ch] and fixes to over a dozen
commands, plus several new ones. Other portability fixes included working
with buildroot's uclibc fork and building for nommu targets.</p>

<p>The new "make change" target builds each toybox command as a standalone
binary. Rather a lot of commands that didn't build by themselves (mv depending
on cp and so on) were hit with a large rock until they built standalone.
This involved rewriting bits of option parsing, more elaborate dependency
generation, making each command have its own config
symbol and main() function (even when it's just a wrapper calling another
command's main()), and so on. Also, some commands can't be built standalone
at a conceptual level: "help" describes other enabled commands and "sh"
has a number of bulitin commands (cd, exit, set) that require the
multiplexer infrastructure, so "make change" filters them out.</p>

<p>The mailing list's web archive is still screwed up. Dreamhost has
been trying to fix it since approximately September. There are
<a href=http://www.mail-archive.com/toybox@lists.landley.net/>two</a>
<a href=http://news.gmane.org/gmane.linux.toybox>other</a> less broken
archives, but neither has quite the same UI as mailman.</p>

<h3>Bugfixes and tweaks</h3>

<p>Cynt Rynt sent in tests for ifconfig,
Robert Thompson taught factor to accept whitespace separated arguments,
Hyejin Kim pointed out that some of mktemp's longopts were attached to
the wrong short options,
Luis Felipe Strano Moraes fixed a wrong free() call in bootchartd in pending.
Patches from Ashwini Sharma to make "df /dev/node" work, prevent du from
looping endlessly following symlinks, and to make expr.c
(in pending) understand == and regex matches. (Speaking of expr, it gets
priority groupings wrong but the bug was actually in the posix spec's
HTML conversion. They fixed the posix spec upstream for us. Still need
to fix the expr code, but it's in pending for a reason...)</p>

<p>Some commands grew new option flags, such as cp --remove-destination
and touch -h.</p>

<p>The parallel build has better error reporting now. When toybox needs to
re-exec itself to regain suid root permissions and hasn't got the suid bit,
it now gives the right error message ("not root" instead of "no such command").

<p>Added a test to "mount" to not mount the same device/directory combination
over itself (the OS catches this for block devices, but not for tmpfs).
Make blkid distinguish ext3 from ext4. Added catv back into cat (because
the Android guys wanted it, and they have historical usage on their side,
so...). Handle nanoseconds in touch.</p>

<p>Fixed a segfault when CP_MORE was disabled (the resulting option flag list
no longer defined -d but still had it in option groups at the end).
Workaround for glibc redefining dirname() and basename() to random non-posix
semantics because gnu. (They could have created dirname_r() but didn't want
to.)</p>

<p>Fix an ifconfig test that was preventing assigning an ipv4 address to
interface aliases. Several cleanup passes on hwclock but not quite
promoted out of pending yet.<p>

<p>Fixed a wrong error message in rm (if you had a chmod 000 directory and
did rm -r on it without -f, after the prompt it would complain it was a
directory, which was not the problem).</p>

<p>The gzip compression code now does "store only" output to stdout, for
what that's worth.</p>

<p>Cleanup mountpoint and expand, and remove them from toys/pending/README
(a list of commands that predate the toys/pending directory but needed
another pass).</p>

<h3>Library and infrastructure:</h3>

<p>Reworked the option parsing infrastructure so more commands build
standalone (via scripts/single.sh or "make change"). The option flag bit
values are no longer packed, it leaves spaces where currently disabled
flags go, and you can #define FORCE_FLAGS so disabled flags aren't zeroed.
This allows multiple commands to more easily share infrastructure, even if
your current flag context is for a disabled command (switched off in config),
you can force them to stay on and as long as the flags read the same right
to left they'll have the same values.</p>

<p>We've started removing use of strncpy() because it's a hugely broken
standard C function: the length is the maximum length to _append_, not
the size of the destination buffer. It memsets the remaining space it didn't
copy ala "memset(dest+strlen(dest), 0, len);" so
if you think len is the size of dest you're guaranteed to stomp memory off the
end). And if it runs out of space it won't null terminate because reasons.
(Meanwhile sprintf("%*s", len, str) is counting wide characters in your current
locale, so if you set a locale other than "C" it will also go past your
allocated buffer size. Whoever is maintining the C library standards is really
bad at strings.)
Instead we have xstrncat() which will error_exit() if src+dest+1 doesn't
fit in the buffer. (Because randomly truncating input data isn't necessarily
an improvement.) And there's always xmprintf().</p>

<p>Similarly, strtol() doesn't return an error indicator on overflow,
you have to clear and then check errno. So new xstrtol() that cares
about overflow.</p>

<p>The bionic and musl guys agree faccessat(AT_SYMLINK_NOFOLLOW) is not
supported, so stop using it.</p>

<p>Fixed toy_exec() to detect when argc is in optargs, so we don't
need a separate xexec_optargs().</p>

<a name="18-02-2015" /><a href="#18-02-2015"><hr><h2><b>February 18, 2015</b></h2></a>
<p>Dreamhost continues to be unable to make mailing list archives work, so
here's <a href=http://www.mail-archive.com/toybox@lists.landley.net/>another
list archive</a> with a less awkward interface than gmane.</p>

<p>(Neither gives you the convenient historical monthly views of mailman,
but I still have hopes dreamhost will someday figure out what they're doing
wrong. They've only been trying since October. Last month they did a
<a href=http://www.dreamhoststatus.com/2015/01/14/discussion-list-hardware-maintenance/>hardware upgrade to fix a software problem</a>, and the stale
data loads much faster now, so that's something.)</p>

<p>Update (Feb 19): the archive started updating again, by discarding
all the pending data. So there are now _two_ giant holes in Dreamhost's
web archive, from Dec 15-Jan 3, and then another hole from Jan 16-Feb 18.
The relevant messages are in both of the other archives. Here's hoping
the chronic archive constipation problem won't happen a sixth time.</p>

<a name="30-12-2014" /><a href="#30-12-2014"><hr><h2><b>December 30, 2014</b></h2></a>
<p>Due to Dreamhost's <a href=http://landley.net/dreamhost.txt>ongoing</a>
<a href=http://landley.net/dreamhost2.txt>inability</a> to make mailman
work reliably, I've added a link to a backup web archive at
<a href=http://news.gmane.org/gmane.linux.toybox>gmane</a> to the nav bar
on the left.</p>

<p>You still subscribe to the list through
<a href=http://lists.landley.net/listinfo.cgi/toybox-landley.net>the first link</a>.</p>

<p>Update (January 27, 2015): they're <a href=https://twitter.com/landley/status/558428839462703104>still working on it</a>.</p>

<a name="19-11-2014" /><a href="#19-11-2014"><hr><h2><b>November 19, 2014</b></h2></a>

<blockquote><p>"This time it was right, it would work, and no one would have to get nailed to anything." - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.5.1.tar.bz2>Toybox 0.5.1</a>
(<a href=/hg/toybox/shortlog/1566>commit 1566</a>) is out.</p>

<p>It's an interim release, mostly bugfixes. There are several new commands,
but they're all in pending.</p>

<h3>Development</h3>

<p>Finally implemented sed, which is still in pending because although
it's feature complete according to posix, and even passes the parts of
Busybox's sed test suite that aren't explicitly testing for gnu bugs we
don't want to copy, it's not yet good enough to build Linux From Scratch.
(The ./configure stages use very long sed scripts. 20 commits worth of
implementation and debugging, just under 1000 lines of code, and there's
still more to do. We're definitely up to some of the "fiddly" commands now.
Did you know "echo hello | sed p - -" segfaults gnu sed in Ubuntu 12.04?
Yeah...)</p>

<p>Talked with the Tizen developers to follow up on their desire to
make toybox a part of the base Tizen system, and got a list of commands
to add to the roadmap. The tizen todo list is:</p>

<blockquote><p>
wget, sha256*, gzip, gunzip, bunzip2, rsync, zdiff*,
less, ar, arch, base64, csplit, dir, fmt, join, 
nproc, shred, shuf, stdbuf, stty, test, tr, unexpand,
users, vdir, diff3, sdiff, dosfsck (fsck.vfat), awk, fdisk
</p></blockquote>

<p>(Most of which was already on the todo list, but it helps prioritize.)</p>

<p>Fixed md5sum and sha1sum on big endian systems (reported by James McMechan).
Andy Lutomirski fixed unshare's help text and option parsing,
and submitted nsenter (a tool to use setns(2)) to pending.
Isaac Dunham implemented acpi -ctV options, and spotted the bug that ls -d
was inappropraitely following command line symlinks without -H or -L (it
should act like ls -l does), and ls -F handles symlinks wrong too.
Lukasz Szpakowski sent in two bugfixes to tail.c. Cynt Rynt spotted an
unnecessary assignment in lib/password.c.</p>

<p>Ashwini Sharma's team was as busy as usual, submitting tr, crontab, and
ipcrm, and hwclock to pending, more features to the pending ip.c, and a
pile of bugfixes (to chgrp, killall, ifconfig, insmod,
losetup, comm, cp, id, xwrap, netcat, modprobe, nohup...) mostly found by
static analysis. (These fixes are mostly to seldom-used codepaths like the
TOYBOX_FREE config option, but test coverage is always appreciated.) Ashwini
also suggested upgrading ln -f to leave the original target alone if link
creation fails, and reported that mv -f and -i weren't implemented (now fixed).</p>

<p>New config option: TOYBOX_NORECURSE prevents xexec() from making internal
function calls (for nommu systems with a finite stack).</p>

<p>The "toybox" multiplexer command no longer adds a trailing space to each
line of command names, so things like "./toybox | tr ' \n' '|'" to create
a grep pattern snippet are easier to do. (Why you'd want to is your business,
but the output is tidier now.)</p>

<h3>Infrastructure</h3>

<p>Isaac Dunham added Android support to portability.h, including compile
probes for functions missing from bionic-libc, and annotated the commands that
use those functions. We haven't really tested building against bionic,
but in theory it's possible now.</p>

<p>Running the test suite now color codes the PASS/SKIP/FAIL notifications
if output is to a tty. (And in case you missed it last time, VERBOSE=fail
to stop at the first failure is really useful.)</p>

<p>In loopfiles_rw() use O_CLOEXEC instead of O_RDONLY to request the loop
function close filehandles for us. (Otherwise the callback function must
close each supplied filehandle itself.)</p>

<p>The printf-style escape parsing ("\n" and friends) got factored out into
a new unescape() function.</p>

<a name="02-10-2014" /><a href="#02-10-2014"><hr><h2><b>October 2, 2014</b></h2></a>
<blockquote><p>"There is an art, it says, or rather, a knack to flying.
The knack lies in learning how to throw yourself at the ground and miss...
Clearly, it is this second part, the missing, which presents the
difficulties." - The Hitchhiker's Guide to the Galaxy.<p></blockquote>

<p><a href=downloads/toybox-0.5.0.tar.bz2>Toybox 0.5.0</a>
(<a href=/hg/toybox/shortlog/1512>commit 1512</a>) is out.</p>

<h3>New commands</h3>

<p>The new commands are find, install, factor, and mount. Promoted commands
(cleaned up and moved out of "pending") are lspci, inotifyd, and blockdev.</p>

<p>cp now implements -HL and -F to force delete of pending files, cpio now
ignores -m and implements -p, ls -C now has utf8 support (using wcwidth
instead of strlen), and umount got a number of upgrades involving
looking things up in /proc/mounts. Other minor cleanups happend to
cut, touch, free, and id.</p>

<p>In pending: Bradley Controy submitted mix (adjusts OSS sound volume). Ashwini
Sharma submitted diff, userdel, blockdev, ipcs, and crond, upgraded
fdisk, fsck, and ftpget, and ran a static analyzer on a lot of other code.
Partial cleanup was done to useradd, userdel, groupadd, and groupdel.</p>

<h3>Build infrastructure</h3>

<p><b>Parallel builds</b></p>

<p>The build now takes advantage of SMP, autodetecting the number of
processors. (Export the environment variable CPUS to pick a specific number.)
Other build changes: split out $LDOPTIMIZE because old compilers complain
about linker options passed with -c, and the entire "generated" directory now
gets deleted by clean (the README that was in there got merged into code.html).</p>

<p><b>Standalone builds</b></p>

<p>The standalone build infrastructure (scripts/single.sh) got upgraded to
build more commands as standalone executables. In make.sh the source file
selection uses a regex to find the source files with the NEWTOY/OLDTOY macro
for the command. It enables each command's
sub-options (so CP has CP_MORE), enables I18N and FLOAT support to build
full-featured commands, and includes --help text (at least when
the command doesn't use another command's help). The OLDTOY() macro
now produces (redundant) function prototypes so you can build an OLDTOY
without the NEWTOY</p>

<p>It doesn't quite have complete coverage yet, the defconfig entries that
aren't building standalone yet are:</p>

<blockquote><p>chown, egrep, fgrep, fstype, halt, mv, nc, poweroff, unix2dos,
whoami</p></blockquote>

<p>The main reason for standalone build failures is NEWTOY() or OLDTOY()
entries that don't have their own config symbol. Another problem is entries
that depend on another entry in kconfig, usually because common infrastructure
is using one command's flags (which the other commands copy): if that command
is disabled, the FLAG macros become 0 so dead code elimination can remove the
code. It's <a href=http://landley.net/hg/toybox/rev/1503>possible
to untangle</a> this, but a bit awkward. (It boils down to conflicting
design goals in the two contexts.)</p>

<p>Standalone builds are used by the test suite when testing individual
commands.

<p><b>Snapshot builds</b></p>

<p>A new addition to the "generated" directory is generated/build.sh
containing a single compiler command line to build toybox in its current
configuration. Combined with the generated/*.{h,sh} files from an
exisiting build, this may let you build on a new system that hasn't quite
got enough OS bits working to run a full configureand make.</p>

<h3>Internals</h3>

<p>Library code: xcreate/xopen now O_CLOEXEC by default to avoid leaking
filehandles to child processes. DIRTREE_COMEAGAIN's second callback is now
done with the directory filehandle still open (new dir->again variable added
to distinguish first from second callback, and requesting DIRTREE_RECURSE now
requires passing in the specific macro value, not just a true/false).
Use daemon() out of libc instead of hand-rolled daemonize() in various
pending commands. string_to_mode() now passes through type bits so you can
use it to more easily modify a file's existing mode.
Split xpopen() into xpopen_both(), xopen(), and xrun() depending on whether
we want to redirect both, one, or neither of stdin/stdout.</p>

<p>Bugfixes: Better error message when TOYBOX_SUID option can't drop priviliges
(which happens when you suid something _other_ than root).
The old pending version of nbd_client.c wasn't deleted when the
command was promoted (and the build would break if both were enabled),
toy_exec() sometimes needs to re-exec from $PATH rather than recurse
internally (to gain dropped root permissions or limit stack depth),
always call setlocale() when I18N is enabled to switch it back _off_ when
we run commands that expect sscanf("%n") to return bytes,
dirtree() had a memory leak in an error path, patch.c had some bugs in
error paths (didn't report problem clearly). Ashwini Sharma spotted an
option parsing bug where [-abc] would forget _all_ command line arguments
saved in the GLOBALS() block (not just the ones for options being switched
off), plus various minor fixes to nbd_client and cpio.
Lukasz Szpakowski fixed rm -f on a broken symlink (failed), and killall
with no arguments (segfaulted).</p>

<p><b>Portability</b></p>

<p>A somewhat fiddly fix to rm -rf (which needs to chmod directories to u+rwx
to descend into them) which hit a musl bug in faccessat() which the musl
maintainer refuses to fix. (He literally wants the man page changed
instead, despite other libcs working.) Added an #ifdef __MUSL__ section
to portability.h with a workaround, you may need CFLAGS=-D__MUSL__ in your
build if your musl build's features.h doesn't #define that. (I may do
a different workaround in future, but sometimes you've just got to make
it work so you can ship. Also, toybox grep with multiple patterns
requires <a href=http://landley.net/hg/aboriginal/rev/1692>a patch
to musl's regex engine</a>, which applies to 1.1.4 but not to the current
musl source control.)</p>

<p>More portability.h fixes for uClibc too. (I don't expect that to ever have
another release, so locally patching around posix-2008 violations is silly).</p>

<p><b>Change to username filtering</b></p>

<p>Posix recommends the username creation logic filter usernames to a small
allowed set of characters (which even Red Hat breaks by explicitly allowing
"$" at the end), but this prevents UTF-8 usernames. Posix' stated logic
is to allow filesystems to create the user's home directory, but Linux
filesystems can accept any character but NUL and "/". The only characters
we actually _need_ to filter out are ":" (field separator in passwd),
newline (line separator in passwd), and "/" (directory separator in
filesystem).</p>

<h3>Documentation</h3>

<p>Web pages updated: cleanup.html documents more cleanup, code.html
documents more code, and about.html now capitalizes "toybox" consistently
(it's just a word, capitalize at start of sentence).</p>

<p>The pending/README file now lists commands that needed review/cleanup
before the pending directory was added.</p>

<h3>Test Suite</h3>

<p>Moved out of scripts/test into top level "tests" directory, and the
testing.sh script is now in scripts rather than mixed into the *.test files.</p>

<p>Johan Bergström requested VERBOSE=fail to make tests (telling it to
stop at the first failure), and spotted a build bug where using gnu
sort on the host broke in non-C locales.</p>

<p>Divya Kothari submitted tests for chmod, link, tar, bzcat, xzcat, zcat,
and hostname. (And more, but that's all that's merged so far.)</p>

<a name="07-07-2014" /><a href="#07-07-2014"><hr><h2><b>July 7, 2014</b></h2></a>
<blockquote><p>"This planet has - or rather had - a problem, which was this:
most of the people living on it were unhappy for pretty much of the time. Many
solutions were suggested for this problem, but most of these were largely
concerned with the movement of small green pieces of paper, which was odd
because on the whole it wasn't the small green pieces of paper that were
unhappy." - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.9.tar.bz2>Toybox 0.4.9</a> (<a href=/hg/toybox/shortlog/1385>commit 1385</a>) is out.</p>

<p><b>New commands</b> added to pending include:
lsattr, chattr, inotifyd, rfkill, sulogin, strings, makedevs,
killall5, and tar from Ashwini Sharma, arp from Kyungwan Han,
sysctl by Bilal Qureshi, partprobe from Bertold Van den Bergh,
host from Rich felker, and I did nbd-client and the first 2/3 of mount.</p>

<p>Finished cleanups (commands promoted out of pending):
sysctl, rfkill, strings, mkpasswd, makedevs, partprobe, killall5,
fallocate, and nbd-client.</p>

<p>(Along the way partial cleanups got made to: last, fold, lspci, ps,
bootchartd, init, fsck, telnetd, telnet, vconfig, toysh, iconv, useradd,
login, host, openvt, deallocvt, getty, tftpd, and modprobe. But there's
still more to do on all of those.)</p>

<p>This time around the <a href=bin>static binaries</a> are linked against
musl instead of uClibc. (That's why there's no sparc version, musl doesn't
support that target yet.)</p>

<p><b>Documentation:</b></p>

<p>The help text parser expects lower case "usage:" lines with
a blank line after them, so go through and regularize those. Expand the
"coding style" section in the docs and move it to design.html. (Not a show
stopper for incoming
contributions, just an explanation of some of the things I'll do to them
during cleanup.) The help text for the "toybox" command now includes
the shell script snippet to install symlinks to the toybox binary.</p>

<p>The <a href=cleanup.html>cleanup page</a> now has descriptions for the
full ifconfig cleanup series, among others.</p>

<p>The new toys/examples directory contains hello.c and skeleton.c. The first is
a simple hello world program in toybox style, the second is a much more
elaborate example program using showing how to use the command line option
parsing and how to provide multiple commands in the same C file.</p>

<p><b>Fixes</b>:</p>

<p>Fix od bug reported by Samuel Holland ("od -v -b" was appending the default
output type even though an output type was specified). Ashwini Sharma reported
bugs where readfile() was incorrectly freeing its buffer, and where toy_init()
was zeroing the wrong data because the field it was using to measure (rebound)
had moved (when I moved it back I added a comment why the field needs to be
there), fixed a segfault in the dhcp client, and made a 0 length read at
the start of password entry count as EOF. Make the "we are not root" test
in the init code show the help text. Posix implies that fflush() can return
success even when the stream's error bit is set, so call both fflush() and
ferror() from xprintf().</p>

<p>Isaac Dunham pointed out that bloatcheck couldn't deal with diff
implementations that only implement "unified diff" format, and that some
diff implementations can't handle nonseekable input (I.E. reading from
a pipe). Bugfix so "help -a" works again. Option parsing on nohup now stops
at first nonoption argument. Fix segfault in "which" if PATH wasn't set,
which was actually a bug in lib function find_in_path(). Made rm -rf of
chmod 000 directories actually remove them.</p>

<p>The build now passes the same $CFLAGS to the library probe as the final
build, because arch linux is so broken it provides different sets of
libraries for static and dynamic linking.</p>

<p>It turns out sprintf("%.123s", str) is counting characters, not bytes,
so globally enabling locale support opens stack smashing vulnerabilities.
So there's a new TOYFLAGS_LOCALE you set in toyflags when you want the
setup code to setlocale().</p>

<p><b>Upgrades:</b></p>

<p>Isaac Dunham extended cpio to archive unreadable empty files, and I taught it
to set uid/gid and timestamp when extracting archives. Isaac also
added tests for cpio, link, and du, added lspci -i, made the pci database
parsing skip # comment lines, merged logname and whoami into id.</p>

<p>Daniel Verkamp sped up md5sum about 30% with some loop unrolling, making
it actually smaller in the process. I added -b flags to md5sum and sha1sum
for "brief" output that's just the hash with no filename. (I'm aware other
implementations use that for MSDOS "binary" mode, and don't care.)</p>

<p>When building standalone commands (scripts/singleconfig.sh commandname),
the build now switches on all the sub-options of the command so we get
a standalone version with all the bells and whistles enabled.</p>

<p>Add -ds flags to date and document +FORMAT escapes. Add the shell NOP
command ":" as an alias for true (for toysh).</p>

<p>Add uClibc probe for iconv() and fallocate. (The fact it didn't always
build against uClibc is why fallocate wasn't enabled in defconfig before.)</p>

<p>The umount command now does an losetup -d on the device by default, so
we don't leak loopback devices. Bugfix to losetup so "losetup /dev/loop0
filename" actually works again.</p>

<p>Divya Kothari sent in test suite entries for ls, ln, rm, mv, printf, dd,
and renice. Then a second round for lsattr/chattr, mount, chmod, pgrep/pkill,
groupadd, groupdel, and useradd. Several of these uncovered bugs, still
working to fix them.</p>

<p>There are now free() functions for the predefined llist types and a
dlist_terminate() function to break doubly linked lists. The new
generic_signal() handler either sets "toys.signal" or writes a byte
to toys.signalfd with the signal number if signalfd isn't -1 (which it's
initialized to in toy_init).</p>

<p>The option parsing logic can now detect when a double fits in a long and
use the more precise type for floating point arguments (the FLOAT macro
contains the type used). The human_readable() function now just outputs
decimal kilo/mega/gigabytes (so when du -u says 5.0G it means 5.0 billion
bytes). The build infrastructure now notices duplicate commands (so if you
cp toys/pending/command.c toys/other/command.c and forget to delete the
first one, the build break is now more informative).</p>

<a name="20-04-2014" /><a href="#20-04-2014"><hr><h2><b>April 20, 2014</b></h2></a>
<blockquote><p>And to this end they built themselves a stupendous supercomputer
which was so amazingly intelligent that even before the data banks
had been connected up it had started from "I think therefore I am" and got as
far as the existence of rice pudding and income tax before anyone managed to
turn it off. - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.8.tar.bz2>Toybox 0.4.8</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/1262>commit 1262</a>. And
about time too.</p>

<p>The big news is that the build no longer needs python to generate help.h,
that's now done in C. The help text generation is also collating help text
from multiple options, merging command line option blocks and usage: lines.
There's even a new <a href=help.html>help web page</a>.</p>

<p><b>New commands:</b> Ifconfig, cpio, and su were cleaned up the rest of the
way and promoted out of pending. That saga is mostly explained on the
<a href=cleanup.html>cleanup page</a>. Vivek Bhagat's freeramdisk,
Isaac Dunham's fsfreeze, and Felix Janda's iconv are also new.</p>

<p><b>In pending:</b>
Ashwini Sharma's team submitted tcpsvd, udpsvd, telnet, telnetd, last, more,
groupdel/delgroup, arping, brctl, ftpget, ftpput, printf, reset, and added
ipv6 support to traceroute. Kyungwan Han's team submitted modprobe and getty.
Vivek Bhagat submitted openvt and deacllocvt. Samuel Holland submitted fold.
I wrote a new inflate (zip/zlib/gzip decompression) implementation in
compress.c, and still  need to do a corresponding deflate (compression-side)
and plug them into gzip and zip and so on. (Right now it does zcat.)</p>

<p>Several commands (vmstat, login, du, vconfig, mountpoint, free, chroot,
cut, touch, modinfo, expand) predate the "pending" directory, and are thus
in other directories but still need cleanup. Of these, vmstat got some
work this time (which would be much easier other vmstat implementations
documented what their output actually meant).</p>

<p><b>Upgrades:</b> Ifconfig grew /prefix netmask support (ala 1.2.3.4/24). Grep now has -zZ to
handle null terminated data, cksum grew -H for hex output. Upgraded od so the
fields align better when producing multiple output types. Help has -a and -h
options (all commands, html output).
Bugfix to blkid building for a 32 bit target. The date command can actually
set dates now. The O_NOFOLLOW compile time probe didn't work with cross
compiling, so it's back to an #ifdef test in portability.h. Nathan McSween
sent in a bugfix to od and a portability fix in the common library code.
Ashwini Sharma spotted a bug in pidof -o, and added verbose (-v) options
to mkdir and ln, and suggested killall should have an -s option and
allow -l to take zero arguments. Ashwini Sharma and Felix Janda upgraded
tftpd.  Fixed dumpleases still using toynet.h after
that was removed. Corrected killall return code and error reporting.
Isacc Dunham fixed bugs all over the tree, did cleanup on a bunch of
pending commands (getty, ftpget, init, openvt, modprobe...), and clarified
find's help text. Tom Sparrow ran three different static analyzers on
the code, which resulted in a few cleanups. The peek()/poke() functions
now use "volatile" to prevent broken compiler "optimizations" to do with
aliasing.</p>

<p><b>Build stuff:</b> Each FOR_xxxx macro now has a complementary CLEANUP_xxxx macro, so you
can put multiple commands with different command line options in the same
.c file, so they can share infrastructure outside of lib. (This let the
bunzip logic move out of lib into bzcat.c.) See XXX for example.
i
<p>The headers #included in toys.h are now grouped by standard, and headers
not listed in Posix or LSB were moved to portability.h. The old xregcomp.h
was folded into lib.h because it's posix (and supporting oddball uClibc
configurations isn't as important as it once was).</p>

<p>Regression tested against Ubuntu 8.04 to fix up bit-rot in defconfig
build on older systems. (We depend on Posix-2008, but not necessarily
the absolute latest build environment.)</p>

<p><b>In lib</b>: lib/xwrap.c added xgetpwnam(), xchroot(), and lib/lib.c now has names_to_pid().
xsetuid() was replaced with xsetuser() which takes a struct passwd
and sets both gid and uid, mkpathat() got factored out into a library command,
get_int_value() became atolx_range(), and
xmsprintf() is now just xmprintf(). The bunzip2 logic moved from lib into
bzcat.c.</p>

<p><b>Documentation</b>: new <a href=help.html>help page</a> with the
help text for all the defconfig commands, using the new help -ah output.
The <a href=code.html>source code walkthrough</a> now says more about
#including header files, and how the generated/* directory works. The
<a href=design.html>design page</a> has some new paragraphs about trading
of different kinds of simplicity, and why comments aren't a substitute for
good code. The README no longer trails off into obvious unfinished confusion
at the end. Each page on the website should now have its own title.</p>

<a name="18-11-2013" /><a href="#18-11-2013"><hr><h2><b>November 18, 2013</b></h2></a>
<blockquote><p>"Space," it says, "is big. Really big. You just won't believe how vastly, hugely, mindbogglingly big it is. I mean, you may think it's a long way down the street to the chemist's, but that's just peanuts to space." -
The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.7.tar.bz2>Toybox 0.4.7</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/1122>commit 1122</a>.</p>

<p>New commands: Brad Conroy submitted blkid. Elie De Brauwer submitted
reboot, halt, and poweroff. Strake's nl got cleaned up and promoted from
pending to posix. In addition, the existing chvt and vconfig got some
cleanup.</p>

<p>That said, I haven't nearly kept up with the flood of new commands going
into pending: Ashwini Sharma's team submitted
dd, dumpleases, traceroute, top, useradd, groupadd, mkpasswd, tftpd, and
an fsck wrapper (with no filesystem drivers yet). Isaac Dunham sent in cpio.</p>

<p>Bugfixes: Jeroen van Rijn added a user count to uptime. Elie De Brauwer
added -e to watch, removed a memory leak, and fixed a terminal size problem.
William Haddon made xargs call its command line once even with blank input
(the standard is vague, but builds expect it), and fixed an off by one bug
where grep didn't malloc enough space with -E (leading to a segfault).
I fixed a glitch in bunzip2 (same one as went into busybox since they're using
the code I wrote), in od to fix -t co, -J, and -c options. Add uname -o as a
synonym for -s. Build fix to never use $CC without prefixing it with
$CROSS_COMPILE (since $HOSTCC could be different). Anca Emanuel spotted
a typo in the web page.</p>

<p>The compile-time command line option parsing got rewritten (ported from
bash to C), which should speed up builds a bit and allow code controlled by
--longopts to drop out properly when disabled in the configuration. Terminal
querying got refactored. Patch's -x option is now more informative (a
debug thing if you're trying to figure out why a patch didn't apply).
The "toynet.h" file got folded into toys.h since musl supports it and
micromanging uClibc options isn't very interesting anymore. The test suite
now uses scripts/single.sh when testing a single command.</p>

<a name="17-09-2013" /><a href="#17-09-2013"><hr><h2><b>September 17, 2013</b></h2></a>
<blockquote><p>"Think of a number," said the computer, "any number."
Arthur told the computer the telephone number of King's Cross railway
station passenger inquiries, on the grounds that it must have some function,
and this might turn out to be it. - The Hitchhiker's Guide to the Galaxy</p>
</blockquote>

<p><a href=downloads/toybox-0.4.6.tar.bz2>Toybox 0.4.6</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/1068>commit 1068</a>.</p>

<p>This release adds
several new commands: Felix Janda wrote paste and fallocate, Kyungwan Han
submitted eject, Strake contributed grep, Ashwini Sharma added pmap (and
a testsuite entry for grep), Lukasz Skalski sent pwdx, Isaac Dunham posted
acpi, and I did timeout and umount.</p>

<p>The ls command now has a --color=auto option (suggested by Rich Felker).
The multiplexer now has a --help option so you can say "./toybox --help blah"
instead of using the built-in "help" command. (Which is a shell built-in.
Try it on your command line, it's like man for shell builtins. But a certain
other project has conditioned people to expect --help, so...) I forget who
heehooman at gmail is but they pointed out unshare needed PID and UID
namespace support.</p>

<h3>Pending</h3>

<p>A lot of new commands in toys/pending, to the point the next release should
probably just focus on cleanup and review of this backlog. We've got klogd,
dhcp, dhcpd, watch, route, and ps from
Ashwini Sharma (and an fsck wrapper but no fsck.fstype engines yet),
syslogd, pgrep, and pkill from Madhur Verma, netstat by Ranjan Kumar,
test by Felix Janda, lspci by Isaac Dunham, nl, su, and renice by strake (I.E.
M. Farkas-Dyck), and sysvinit by Kyungwan Han.</p>

<p>Some cleanup work on existing pending commands that aren't
ready to promote yet: I did a few more rounds on ifconfig
and Isaac Dunham's did several cleanups to xzcat, Felix Janda cleaned up
logger and syslogd...</p>

<p>Also some cleanup work on commands that predate the pending directory,
but weren't quite polished when they went in, most prominently du,
expand, and touch.</p> 

<h3>Infrastructure</h3>

<p>The new scripts/single.sh builds a standalone command without the
multiplexer, although not all commands can be built that way yet (NEWTOY yes,
OLDTOY no) and the space savings aren't anything to write home about. (If a
command needs the option parsing logic at all, it needs all of it.) If
you're curious, you can do:</p>

<blockquote><pre>
make defconfig
make
mkdir singles
for i in $(./toybox)
do
  echo $i
  PREFIX=singles/ scripts/single.sh $i || break
done
</pre>
<p>(And then wait a long time and watch almost half the builds fail.)</p>
</blockquote>

<p>There is now libbuf analogous to toybuf, another global 4k buffer this
time for use by lib/ code instead of command code.</p>

<p>The lib directory got split up a bit, lib/pending.c contains functions
not yet used by anything outside of toys/pending/*, and lib/xwrap.c contains
functions that wrap other functions and handle failures (via error_exit).
This leaves lib/lib.c containing actual new functions.</p>

<p>General improvements and bug fixes to argument parsing. The [-abc] exclude
logic should now clear arguments slots when disabling options. Bare --longopts
should work now and be able to report errors using their name, the new ;
option allows optional arguments to longopts only suppliable with = (I.E.
--color and --color=auto but not --color auto).</p>

<p>I'm gradually weaning the code off of itoa()/utoa() because sprintf
does this already. In this case "simple" probably means "let libc do it
for us".</p>

<p>Rewrote for_each_pid_with_name_in() and renamed it to just names_to_pid().
It shouldn't get confused trying to compare absolute and relative paths quite
so much anymore.</p>

<p>lib/llist.c grew a new dlist_pop() function for removing a doubly
linked list entry while maintaining a circular list; tail and patch are
using it now.</p>

<p>The musl guys suggested a new optimization flag
(-fno-asynchronous-unwind-tables)
that shaves about 10% off the binary size by removing a C++ism that crept
into gcc's idea of C. While I don't normally try to micromanage the compiler,
"-fstop-being-stupid" is a thing you have to hit gcc with from time to time.</p>

<h3>Bugfixes</h3>

<p>Felix Janda and I did a largeish rewrite of tail to
finally make it work right (we think). Still need to implement tail -f
someday (the tricky bit is making -f follow multiple files at once).
Felix also reported a bug in xpidfile.</p>

<p>Juhani Haverinen pointed out that
python 3 doesn't work with config2help.py, so the detection logic looks
for python2 (until I get around to rewriting that in C). Elie De Brauwer
then fixed our first attempt at this, and also fixed uname's help string.</p>

<p>Ashwini Sharma
pointed out the build was making a FLAG_ macro for " " which broke some
configurations. (That's a control character, not a command line option.)</p>

<p>Jacek Bukarewicz pointed out a bug in chdir permission handling, and
a way to make env segfault. Both should be fixed now.</p> 

<p>The new function xexec_optargs()
replaces calls to xexec(toys.optargs) to avoid freeing and reusing optargs
during option parsing screwing stuff up (such as netcat's exec mode).</p>

<p>The stat command's %a output was padded with leading zeroes, which
didn't match anybody else's behavior and thus made the test suite hiccup
between TEST_HOST and testing toybox. (If you go "TEST_HOST=1 scripts/test.sh
command" it sanity checks the tests against the host implementation.)</p>

<p>Last release, "mkdir sub/sub && chmod 007 sub/sub && rm -rf sub" didn't
delete sub and didn't exit with an error either. Neither was correct, rm
should now be fixed.</p>

<p>
<a name="26-07-2013" /><a href="#26-07-2013"><hr><h2><b>July 26, 2013</b></h2></a>
<p>Georgi Chorbadzhiyski maintains a <a href=https://github.com/gfto/toybox>git
mirror</a> of the repository on github, automatically updated from the
mercurial every 6 hours. The mirror is read only, but you can generate patches
against it and post them to the list.</p>

<a name="02-07-2013" /><a href="#02-07-2013"><hr><h2><b>July 2, 2013</b></h2></a>
<blockquote><p>"Time is an illusion. Lunchtime doubly so." "Very deep. You
should send that in to the Reader's Digest. They've got a page for people
like you." -
The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.5.tar.bz2>Toybox 0.4.5</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/941>commit 941</a>. It adds
uuencode and uudecode from Erich Plondke, and enables Luis Morales' "who" by
default. Felix Janda and I cleaned up last year's "stat" submission and
enabled it. Ivo van Poorten added "groups".
Andre Renaud added "lsusb". I implemented "split", "pivot_root", and "mv".
</p>

<p>The "help" command is implemented differently now (lib/help.c) and
each command can now understand --help (including both "toybox --help"
and "toybox --help command" in the multiplexer).</p>

<p>The "pending" directory has several commands (find, xzcat, nbd-client,
logger, expr) which work but are not enabled by default pending further cleanup.
Ifconfig is enabled, but still in pending because it's only 2/3 cleaned up.
(It's an awkward halfway state but I'm not holding up the release for it.)</p>

<p>I'm <a href=cleanup.html>documenting the cleanups</a> to teach
more people to do it, but the writeups aren't caught up yet. The
<a href=roadmap.html>roadmap</a> also got updated a bit with further analysis
of other projects, and the README and about pages got updated.</p>

<p>Fixed _another_ "ls -C" segfault when terminal size can't be detected,
condensed the ls help text to fit on one page, implented --color, and taught
-l to print the major, minor numbers when showing block/char devices.
Argument parsing now handles "--" properly (to end option checking),
and the infrastructure can now handle bare --longopts that have no
corresponding short option (both were implemented before but didn't work).
Fixed an old bug in "patch", chmod grew -f, who grew -a. Isaac Dunham
fixed "-" vs "_" handling in modinfo, added a "firmware" output
field, added -b and -k support, and taught it that the ".ko" extension means
to look for the file at the specified path instead of under /lib. Felix Janda
moved file permission display code to lib so ls and
stat could share it. Ashwini Sharma spotted a bug in xabspath when the
last path component exists but we haven't got permissions to open it
(ala readlink -f /dev/sda as a normal user).
</p>

<p>In the build infrastructure, scripts/findglobals.sh finds leaked global
variables. (Leaked means they aren't part of the global union: Other than glibc
debris, toybox should define "this", "toy_list", "toybuf", and "toys", and
that's it; the rest add memory footprint to every command for the benefit of
just one command; use GLOBALS() to stick 'em in the union.) Static linking
against libraries other than the host's libc now applies to feature probes
for unshare and such. Neuter stupid internationalization support that makes
various host "sort" commands put things in an order other than alphabetical
(breaking the multiplexer's binary search on command names).

<p>You should now be able to build from a source control snapshot on a build
system that hasn't got python: if you disable CONFIG_TOYBOX_HELP. (The
release tarballs ship generated/help.h, but it's not in source control.
Eventually I should rewrite that python script in C.)</p>
</p>

<p><b>LICENSE TWEAK</b>: After <a href=http://lists.landley.net/pipermail/toybox-landley.net/2013-March/000794.html>discussion</a> on the mailing list the "2 clause
BSD" <a href=license.html>license</a> got slightly simplified so the first
paragraph now says:</p>

<blockquote><p>Permission to use, copy, modify, and/or distribute this
software for any purpose with or without fee is hereby granted.</p></blockquote>

<p>It used to continue "provided that the above copyright notice and this
permission notice appear in all copies", but A) what's the point? B) does "all
copies" mean binaries, or just source code, or what? C) lots of projects
that consider BSD and GPL compatible have <a href=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/crypto/aes_generic.c>files with
both license notices</a> on them (sometimes at <a href=http://git.busybox.net/busybox/tree/shell/ash.c>opposite ends of the file</a> to make the conflict
less obvious) because "all copies must include this function" would violate
the GPL but "all copies must include this magic text blob" somehow don't?</p>

<p>I don't want to have to care about this anymore. The tweaked version is more
or less public domain with a liability disclaimer, but we're still calling it
BSD (sometimes "0 clause BSD") to avoid explaining.</p>

<a name="21-03-2013" /><a href="#21-03-2013"><hr><h2><b>March 21, 2013</b></h2></a>
<p>Video of my ELC talk
"<a href=http://youtu.be/SGmtP5Lg_t0>Why is Toybox?</a>"
is up on youtube. Related materials include the
<a href=http://landley.net/talks/celf-2013.txt>talk outline</a> and an
<a href=/aboriginal/about.html#selfhost>android self-hosting writeup</a>.</p>

<p>[Updated June 4] The following links jump to specific topics in the video. (Sorry about
the ads, it's The Linux Foundation.)</p>

<ul>
<li>0m29s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=0m29s>The smartphone is replacing the PC</a></li>
  <ul>
  <li>4m22s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=4m22s>Software needed to become self-hosting</a></li>
  <li>6m20s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=6m20s>Do we care if android or iphone wins?</a></li>
  </ul>
<li>9m45s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=9m45s>Android not vanilla: oppose or accept?</a></li>
  <ul>
  <li>11m30s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=11m30s>Open source can't do User Interfaces</a></li>
  </ul>
<li>15m09s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=15m09s>Android is not copyleft: oppose or accept?</a></li>
<li>18m23s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=18m23s>Security issues</a></li>
<li>21m15s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=21m15s>Solutions to the software problems</a></li>
  <ul>
  <li>22m55s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=22m55s>What toybox needs to be/do</a></li>
  <li>28m17s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=28m17s>What is toybox?</a></li>
    <ul>
    <li>28m58s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=28m58s>Why toybox started...</a></li>
    <li>37m50s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=37m50s>What does toybox actually implement?</a></li>
    </ul>
  </ul>
</ul>
</span>


<a name="14-03-2013" /><a href="#14-03-2013"><hr><h2><b>March 14, 2013</b></h2></a>
<blockquote><p>"Ford, you're turning into a penguin. Stop it." -
The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.4.tar.bz2>Toybox 0.4.4</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/813>commit 813</a>, adding
the "time" and "readahead" commands, plus some bugfixes.</p>

<p>The "cp" command now implements the -s symlink option, plus bugfixes
getting various corner cases right as used in actual package builds.
"id -Gn root" should now print root's groups
instead of the current user's. Several build fixes so toybox builds under
Ubuntu 8.04 again (which is about as old a build environment as you
can expect to find posix-2008 features in).</p>

<p>Unfinished commands have generally been moved to "toys/pending".
Everything else should "default y" to participate in make defconfig.
Several of those pending commands got some basic cleanup so allyesconfig
should at least compile (although defconfig is still what's useful).</p>

<p>Significant roadmap updates, checking several other multicall binaries
(klibc, sash, sbase, s6...) to see what commands they include.</p>

<a name="18-01-2013" /><a href="#18-01-2013"><hr><h2><b>January 18, 2013</b></h2></a>
<blockquote><p>This must be Thursday. I never could get the hang of Thursdays. - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.3.tar.bz2>Toybox 0.4.3</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/793>commit 793</a>. There
are now exactly 100 commands in defconfig (of a little over 220 on the
<a href=roadmap.html>todo list</a>).</p>

<p>Elie De Brauwer added the rev command, cleaned up tac, implemented the -s
and -f flags for seq, added -v and -i to killall (and fixed killall not to
kill itself before finishing its pid list), and added to the test suite.
Felix Janda added -m to mkdir, pwd -L and -P, and more test suite entries.</p>

<p>Rob Landley added the losetup command, and fixed the existing ls, cp, and
readlink commands. The segfault in ls
happened when it couldn't determine the screen size (last release changed the
default to -C and a screen size of 0 made column view unhappy), and cp got an
extensive rewrite bringing it up to date with the dirtree changes and fixing
a number of things it never did right in the first place. The xabspath()
code in the library now handles a symlink after ".." properly (and the test
suite checks for it).</p>

<p>Infrastructure-wise the code is better about automatically setting the
error return code properly. Now error_msg() sets the exit code to 1 if it's
still defaulting to 0, and the global exit path does a fflush(NULL) with error
bit check rather than trying to be quite so granular about flushing. (That
means if we use printf() instead of xprintf() it still exits with the right
error code, it just doesn't end the program early on an output error.)
Minor bugfix so TOYBOX_DEBUG
doesn't always warn about the lack of suid bit when toybox is built with
at least one STAYROOT command. Bugfix for the option [grouping] logic
(and then further fixes to the error reporting pointed out by Ashwini Sharma).
dirtree_handle_callback() now has a prefix like the rest of the dirtree
functions. A lot of stuff doing manual path handling was switched to using
libc basename() (including, embarassingly, the basename command), which means
it now correctly detects "/trailing/slash/" which the previous code didn't.</p>

<p>Also, last release included some accidentally checked in debug code that
disabled compiler optimization, so the binary size bloated a bit. It's back
to -Os by default now.</p>

<a name="15-12-2012" /><a href="#15-12-2012"><hr><h2><b>December 15, 2012</b></h2></a>
<blockquote><p>"The major difference between a thing that might go wrong and a
thing that cannot possibly go wrong is that when a thing that cannot possibly
go wrong goes wrong it usually turns out to be impossible to get at or repair."
</p><p>- The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.2.tar.bz2>Toybox 0.4.2</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/749>commit 749</a> and is
just a resync. Linux 3.7 came out, meaning it's time to do an Aboriginal
Linux release, and that should use a stable version of toybox. So here's
a new stable version.</p>

<p>The new commands are cut (from Jason Kyungwan Han), touch
(from Choubey Ji), expand (from Jonathan Clairembault, and he fixed a
bug in login), and rm (from Rob Landley). Felix Janda added UTF-8
support infrastructure (for non-ascii character sets) with a config option.
Elie De Brauwer added tests for cat and sha1sum, and -so options to pidof.
The "ls" command defaults to -C (column view) now, and "readlink" now supports
-fenq.</p>

<p>Portability work: toybox should now build against the musl C library,
and against older glibc versions (circa 2008, much before that and kernel
features we depend on start to drop out).</p>

<p>The whole codebase got reindented from "one tab" to "two spaces" per
level. The option parsing logic now understands [groups] of commands (when more
than one in a group is selected it can switch the others off, or error out,
or other things). The error_exit() infrastructure can now longjmp back to an
earlier point instead of exiting. Each toys/* directory now has a README,
the first line of which is the fancy name menuconfig uses for the directory
(so no more hardwired directory list in scripts/genconfig.sh).</p>

<p>Fixed a filehandle leak in getmountlist().
Pass parent pointer to dirtree_add_node() so it can give error messages with
full path. The yesno() function now always reads from stdin and writes to
stderr (we can retry tty checking complexity once we've got commands needing
it).</p>

<p>The open group broke their website so the
<a href=http://opengroup.org/onlinepubs/9699919799>old links</a> to POSIX 2008
now <a href=http://pubs.opengroup.org/onlinepubs/9699919799>need to start with
pubs</a>. Some of the links in the tree have been updated, others haven't while
I wait to see if their webmaster notices and fixes it.</p>

<p>(I note that the current rm implementation is not technically posix compliant
because the standard requires infinite recursion depth and the current
implementation uses one filehandle per level. I can add a config option
to do it Posix's way, which is more brittle and needs extra security checks,
but am waiting for somebody to complain first. The default "ulimit -n" is 1024
filehandles, so drilling down over 1000 nested subdirectories).</p>

<a name="13-11-2012" /><a href="#13-11-2012"><hr><h2><b>November 13, 2012</b></h2></a>
<blockquote><p>"Rule Six: The winning team shall be the first team that wins."
- The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.1.tar.bz2>Toybox 0.4.1</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/691>commit 691</a>.</p>

<p>Elie De Brauwer contributed usleep, Ashwini Kumar contributed du, and
Kyungwan Han contributed vconfig. Other new commands include switch_root and
md5sum, and the remaining shell wrappers are now proper commands (dos2unix,
unix2dos).</p>

<p>The patch command now supports -l, and gethostname is now enabled by
default. The df command follows symlinks to get the actual device name.
Felix Janda added -m support to wc (for utf8).</p>

<p>On the infrastructure side, the commands have now been grouped into
"posix", "lsb", and "other" subdirectories (for things required by Posix-2008,
the Linux Standard Base 4.1, and commands in neither). This affects menuconfig
and the actual source layout (toys/cp.c is now toys/posix/cp.c, and so on).
An android directory is planned (see the updated
<a href=roadmap.html#android>android roadmap analysis</a>).</p>

<p>The FLAG_ macros for command option parsing and TT alias for the command's
global block are now automatically generated, commands should
#define FOR_commandname before #including <toys.h> to get the macros for that
command.</p>

<p>An upgrade to the build infrastructure now allows commands with _ and -
in them, such as switch_root.</p>

<p>Bugfixes: Avery Pennarun spotted a case where ls showed uid twice instead of
uid and gid, and that nice was using the wrong range of numbers.
The ls command also recursed inappropriately last time (not quite
properly converted for the dirtree changes last release), and now it's
fixed. Roy Tam pointed out a glitch in sh, and fixed df's percentage
calculation to match the POSIX spec. The kernel build didn't like our mktemp
and it does now. The wc command wasn't quite posix compliant (trailing spaces
break stuff). The ls command recursed inappropriately last time (not quite
properly converted for the dirtree changes last release), and now it's
fixed. The catv command wasn't displaying byte 255 correctly. Some lib
fixes (thinko in xpidfile). Fixed uname -m when running a 32 bit x86 binary
on an x86-64 host (it lies and says the system is i686, i586, or i486 depending
on what the toolchain that built the binary supported. This makes builds in
a 32 bit chroot on a 64 bit kernel break less.) The df command was checking
partitions in the wrong order (displaying undermounts instead of overmounts:
this used to work but some library code changed out from under it and it
wasn't updated to match until now). Felix Janda filled out the test suite
some more. The patch file creation logic got tweaked several times to
successfully apply more patches. Support for older (pre 2.10) glibc
versions was added to portability.h.</p>

<p>Miscelaneous cleanups all around (mknod, sha1sum, logname), including a
rewrite of taskset to be less dependent on libc getting the headers right. All
the command headers should now point to the current relevant standards
document, where applicable.</p>

<p>This news page had old news entries from before the relaunch moved into
a separate <a href=oldnews.html>oldnews</a> page.</p>

<p>I forgot to create <a href=bin>static binaries</a> last time, but they're
back now.</p>
</span>

<a name="23-07-2012" /><a href="#23-07-2012"><hr><h2><b>July 23, 2012</b></h2></a>
<blockquote><p>"Ford", Arthur said. "There's an infinite number of monkeys
out here who want to talk to us about this script for Hamlet they've worked
out." - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.0.tar.bz2>Toybox 0.4.0</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/640>commit 640</a>.</p>

<p>The new <a href=status.html>status page</a> is calculated from
the roadmap info, and should be easier to keep up to date in future.</p>

<p>Andre Renaud contributed od and modinfo. Elie De Brauwer contributed
taskset, bugfixes to cmp and tail, and tests for sort and tail. Kyungwan Han
contributed passwd. Gaurang Shastri contributed w. Ashwini Sharma spotted a
case where dirtree was adding extra slashes to a path.</p>

<p>I rewrote od, cleaned up comm, documented the
<a href=code.html#lib_llist>llist</a> and
<a href=code.html#lib_dirtree>dirtree</a> infrastructure, added an -r option
to date (and fixed a bug where -u wouldn't override /etc/localtime),
fixed bugs in chmod +stw, fixed ls to show suid bits properly when the
corresponding executable bit wasn't set, and worked around a longstanding
glibc bug where static linking prevents stdout from automatically flushing
pending output on exit.</p>

<a name="25-06-2012" /><a href="#25-06-2012"><hr><h2><b>June 25, 2012</b></h2></a>
<blockquote><p>"For a moment, nothing happened. Then, after a second or so, nothing continued to happen." - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.3.1.tar.bz2>Toybox 0.3.1</a> is based on commit
<a href=http://landley.net/hg/toybox/shortlog/607>commit 607</a>. It's
mostly a bugfix release for ls -l (which was unhappy on targets other than
x86-64), plus a new "date" from Andre Renaud and rewritten chgrp/chown which
now support the full set of posix flags, plus a little work on the test
suite and some more header tweaks towards eventual compatability with the
musl libc.</p>

<p>The todo list runneth over, but "release early, release often", so here
it is. The roadmap and documentation are a bit behind, and I've got ~40
pending submissions to review. I need to catch up...</p>
</span>

<a name="12-06-2012" /><a href="#12-06-2012"><hr><h2><b>June 12, 2012</b></h2></a>
<blockquote><p>"For instance, on the planet Earth, man had always assumed that
he was more intelligent than dolphins because he had achieved so much - the
wheel, New York, wars and so on - whilst all the dolphins had ever done was
muck about in the water having a good time. But conversely, the dolphins had
always believed that they were far more intelligent than man - for precisely
the same reasons." - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p>It's well past time for <a href=downloads/toybox-0.3.0.tar.bz2>toybox 0.3.0</a>,
so here it is, based
on <a href=http://landley.net/hg/toybox/shortlog/595>commit 595</a>, and the
statically linked <a href=downloads/binaries>prebuilt binaries</a> should
actually be statically linked this time (thanks Ashwini Sharma for spotting
that).</p>

<p>It's hard to figure out where to cut a release, because development
doesn't stop. "Long before now" is the obviuos answer, of course.
The project's maintainer also moved house during this development cycle, which
threw things off for a bit (so many boxes). Releases should hopefully be a bit
more frequent from here on.</p>

<p>The big things Rob worked on this time were the new dirtree (directory
tree traversal) infrastructure, and a complete rewrite of ls using that
which should now implement all 26 posix options.</p>

<p>Georgi Chorbadzhiyski added printenv, whoami, mkdir, mkfifo, chmod, chown,
chgrp, and uniq. He also added fraction and extension support to sleep (so if
you need a quarter-second sleep, it can do that now), and fixed a build bug
on slackware.</p>

<p>Daniel Walter contributed a string to mode_t parser (in use by chmod and
mkdir -m).  Ilya Kuzmich contributed comm. Elie De Brauwer added mountpoint,
vmstat, logname, login, and mktemp. Kevin Chase did some portability cleanups.
Pere Orga fixed some documentation.</p>

<p>The "tac" and "clear" commands are now normal commands instead of shell
wrappers, and the header #includes have been cleaned up a bit to remove
deprecated functions and attempt to increase compatability with the bionic and
musl C libraries, "tail" should now use lseek() for large files, and "id" got
some cleanups and bugfixes.</p>

<p>The new TOYBOX_FLOAT configuration option selects whether or not
to include floating point support (for embedded targets where that's
problematic).</p>

<p>Several random bugfixes: unshare() might actually build portably now,
yes 'n' | cp -i should no longer bypass stdin and prompt via the tty, the
SUID support no longer drops permissions going through the toybox
multiplexer command, and a bugfix to xargs -0 means it should no longer
segfault. (I have a pending bug report about xargs not doing the full
posix whitespace handling that -0 obsoleted, but I'll deal with that next
release.)</p>

<p>The build infrastructure is now automatically generating FLAG_ macros
for the options, but currently with the wrong names. Some more macro glue
is necessary, which I haven't quite figured out how to do yet.</p>

<p>A defconfig toybox at the start of the $PATH has successfully built
Linux From Scratch (in my Aboriginal Linux project). The commands that
'default n' in the config are often still broken, cleanup is ongoing.
(The new dirtree stuff broke several of them that haven't been converted
yet, but if I wait until everything works we won't have a release before
1.0, so here's a checkpoint.)</p>


<a name="03-03-2012" /><a href="#03-03-2012"><hr><h2><b>March 3, 2012</b></h2></a>

<blockquote><p>"They went unnoticed at Goonhilly, passed over Cape Canaveral
without a blip, and Woomera and Jodrell Bank looked straight through them.
Which was a pity, because it was exactly the sort of thing they'd been looking
for all these years."</p></p>- The Hitchhiker's Guide to the Galaxy.</p>
</p></blockquote>

<p>Here's <a href=downloads/toybox-0.2.1.tar.bz2>toybox 0.2.1</a> based
on <a href=http://landley.net/hg/toybox/shortlog/512>commit 512</a>.  This
time around, there are statically linked <a href=downloads/binaries>prebuilt
binaries</a> for various embedded targets.</p>

<p>It's been a busy few weeks, almost entirely due to new contributors. (I
have not quite been keeping up.)</p>

<p>Elie De Brauwer contributed free, uptime, swapon, swapoff, lsmod, mknod,
insmod, rmmod, and fixed a bug in basename.  Andre Renaud contributed ls, ln,
realpath, and hostname. Andres Heck contributed pidof and killall.  Daniel
Walter wrote kill and extended id. Timothy Elliott contributed tail and tests
for cmp. Frank Bergmann sent a warning fix. Bryce Fricke added -i to cp.
Nathan McSween pointed out an optimization. Georgi Chorbadzhiyski fixed
cross compiling to work more reliably.</p>

<p>(My own contribution this time around was just tightening up other people's
code, a build fix to unshare, some random bugfixes, and so on. My only new
code this time around was writing a bash replacement for the existing python
bloat-o-meter.)</p>

<p>Last time (the 0.2.0 release) included the first pass at an id command from
Tim Bird, env and basename from Tryn Mirell, cmp and head from Timothy Elliott,
more bugfixes from Nathan McSween and Elie De Brauwer, and Luis Felipe Strano
Moraes did a first pass at the who command plus other bugfixes and
optimizations.</p>

<p>(For that release I did xargs, cal, truncate, unlink, nohup, tty, wc, link,
dirname, unshare, and various infrastructure tweaks, but it took me 3 months
and those guys did their stuff in a week or so.)</p>


<a name="12-02-2012" /><a href="#12-02-2012"><hr><h2><b>February 12, 2012</b></h2></a>
<blockquote><p>
"for though it has many omissions and contains much that is apocryphal, or at
least wildly inaccurate, it scores over the older, more pedestrian work in two
important respects..."</p>
<p> - The Hitchhiker's Guide to the Galaxy</p></blockquote>

<p>Here's the first BSD licensed release,
<a href=downloads/toybox-0.2.0.tar.bz2>toybox-0.2.0</a>, more a synchronization
point than anything particularly useful.  47 commands in a reasonably
ready-to-use state (what "make defconfig" builds), another ten or so partially
finished stubs ("make allyesconfig"), and several
patches pending on the mailing list I need to review and merge.</p>

<p>More to come...</p>

<hr>
<a name="15-11-2011" /><a href="#15-11-2011"><hr><h2><b>November 15, 2011</b></h2></a>
- Back from the dead, Toybox is now under a 2
clause BSD license, and aiming to become the default command line
implementation of Android systems everywhere.</p>

<p>More to come...</p>

<hr>

<p><a href=oldnews.html>Old news</a> from before the relaunch.</p>

<!--#include file="footer.html" -->
