<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 Mac versions
(which should also work on BSD).</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" -->
