10f66f451Sopenharmony_ci<html><head><title>toybox news</title>
20f66f451Sopenharmony_ci<!--#include file="header.html" -->
30f66f451Sopenharmony_ci
40f66f451Sopenharmony_ci<p>Toybox combines the most common Linux command line utilities together
50f66f451Sopenharmony_ciinto a single BSD-licensed executable that's simple, small, fast,
60f66f451Sopenharmony_cireasonably standards-compliant, and powerful enough to turn Android into
70f66f451Sopenharmony_cia development environment. See the links on the left for details.</p>
80f66f451Sopenharmony_ci
90f66f451Sopenharmony_ci<h2>News</h2>
100f66f451Sopenharmony_ci
110f66f451Sopenharmony_ci<a name="30-11-2021" /><a href="#30-11-2021"><hr><h2><b>November 30, 2021</b></h2></a>
120f66f451Sopenharmony_ci<blockquote><p>
130f66f451Sopenharmony_ciBusy? We'll I've just got this bulldozer to lie in front of or otherwise it'll
140f66f451Sopenharmony_ciknock my house down but otherwise no, not especially, why?</p>
150f66f451Sopenharmony_ci<p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
160f66f451Sopenharmony_ci
170f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.8.6.tar.gz>Toybox 0.8.6</a>
180f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.8.6>git commit</a>)
190f66f451Sopenharmony_ciis out, with prebuilt <a href=downloads/binaries/0.8.6>static binaries</a> and
200f66f451Sopenharmony_ci<a href=downloads/binaries/mkroot/0.8.6>mkroot images</a>
210f66f451Sopenharmony_cibootable under QEMU (using vanilla linux-5.15).</p>
220f66f451Sopenharmony_ci
230f66f451Sopenharmony_ci<p><u>Make root</u>: The <a href=faq.html#mkroot>system builder</a> got upgraded, with better
240f66f451Sopenharmony_cilogging and layout of the output directory, plus <a href=https://github.com/landley/toybox/blob/0.8.6/scripts/mkroot.sh>scripts/mkroot.sh</a>
250f66f451Sopenharmony_cishould be easier to read and understand now.
260f66f451Sopenharmony_ci(Also added basic support for the <a href=http://lists.landley.net/pipermail/toybox-landley.net/2021-August/012497.html>qualcomm hexagon</a>,
270f66f451Sopenharmony_cialthough it just builds a chroot filesystem, you can't boot a hexagon kernel under qemu
280f66f451Sopenharmony_ci<a href=https://lists.nongnu.org/archive/html/qemu-devel/2021-07/msg06430.html>quite yet</a>.)</p>
290f66f451Sopenharmony_ci</p>
300f66f451Sopenharmony_ci
310f66f451Sopenharmony_ci<p><u>New commands</u>: Rob added <b>linux32</b>.
320f66f451Sopenharmony_ciDan Brown added <b>sha256sum</b> (and the related 224/384/512 variants).
330f66f451Sopenharmony_ciIn pending, Elliott contributed <b>strace</b> and
340f66f451Sopenharmony_ciMoritz Röhrich contributed <b>hexdump</b>.</p>
350f66f451Sopenharmony_ci
360f66f451Sopenharmony_ci<p><u>Features</u>:
370f66f451Sopenharmony_ciElliott added <b>date -s</b>, <b>pmap -p</b>, <b>tail -F -s</b>, <b>kill -0</b>,
380f66f451Sopenharmony_ci<b>reboot/halt/poweroff -d</b>, taught <b>file</b> to
390f66f451Sopenharmony_cirecognize Mach-o universal binaries, made Android's <b>log</b>
400f66f451Sopenharmony_citake input from stdin when it has no arguments, added <b>tail --bytes --lines</b>
410f66f451Sopenharmony_ci(the --long synonyms for -c and -n),
420f66f451Sopenharmony_ciadded <b>i2cdetect -q</b>, taught <b>i2cdump</b> to write XX for
430f66f451Sopenharmony_ciread failures, made <b>timeout</b> use the monotonic clock,
440f66f451Sopenharmony_ciand modernized the output of <b>uptime</b>.</p>
450f66f451Sopenharmony_ci
460f66f451Sopenharmony_ci<p>Rob added <b>find -quit -lname -ilname</b> and <b>-d</b> as a synonym for -depth,
470f66f451Sopenharmony_citaught <b>cut -d $'\n'</b>
480f66f451Sopenharmony_cito cut by line and added posix <b>cut -nb</b> (which wraps to the start of -c
490f66f451Sopenharmony_ciutf8 characters), added <b>cpio --ignore-devno --renumber-inodes</b>,
500f66f451Sopenharmony_citaught <b>cal</b> to use 3 arguments (day month year), added <b>tar --selinux</b>
510f66f451Sopenharmony_cisupport and a "had errors" message at the end, made <b>uname -o</b>
520f66f451Sopenharmony_cisay "Toybox", and fixed the <b>grep -Fw</b> combination (used by the 64 bit
530f66f451Sopenharmony_cipowerpc kernel build).</p>
540f66f451Sopenharmony_ci
550f66f451Sopenharmony_ci<p>Ella-0 added <b>split -n</b>. Peter Collingbourne added <b>grep -L</b>.</p>
560f66f451Sopenharmony_ci
570f66f451Sopenharmony_ci<p><u>Outside world</u>: The 0BSD license is <a href=https://lwn.net/Articles/868882/>now part</a> of the
580f66f451Sopenharmony_ci<a href=https://standards.iso.org/ittf/PubliclyAvailableStandards/>ISO-5962</a>
590f66f451Sopenharmony_cistandard. Of the currently <a href=https://github.com/search?q=license%3A0bsd&type=Repositories&ref=advsearch>38k 0BSD licensed projects on github</a> toybox
600f66f451Sopenharmony_ciisn't even the most popular, it's fourth.</p>
610f66f451Sopenharmony_ci
620f66f451Sopenharmony_ci<p>Elliott asked that toybox's <b>cut -DF</b> feature (a cheaper
630f66f451Sopenharmony_cialternative to <b>awk '{print $3}'</b> be supported by other packages so
640f66f451Sopenharmony_ciit might someday make it into posix, so Rob
650f66f451Sopenharmony_ci<a href=http://lists.busybox.net/pipermail/busybox/2021-June/088886.html>submitted it to busybox</a>
660f66f451Sopenharmony_ciwhere it was <a href=https://git.busybox.net/busybox/commit/?id=0068ce2fa0e3>eventually merged</a>.</p>
670f66f451Sopenharmony_ci
680f66f451Sopenharmony_ci<p>Added a local <a href=https://landley.net/toybox/git>git mirror</a> for
690f66f451Sopenharmony_cithose reluctant to trust Microsoft Github.</p>
700f66f451Sopenharmony_ci
710f66f451Sopenharmony_ci<p>In the web nav bar, our <a href=https://isfreenodedeadyet.com/>freenode</a>
720f66f451Sopenharmony_cichannel moved to libera.chat
730f66f451Sopenharmony_ci(like <a href=https://boingboing.net/2021/05/19/freenode-irc-staff-quit-after-new-owner-seizes-control.html>everyone else's</a>;
740f66f451Sopenharmony_ci<a href=https://lwn.net/Articles/856543/>there</a>
750f66f451Sopenharmony_ci<a href=https://hackaday.com/2021/05/20/freenode-debacle-prompts-staff-exodus-new-network/>was</a>
760f66f451Sopenharmony_ci<a href=https://twitter.com/marcan42/status/1396280769778098185>a</a>
770f66f451Sopenharmony_ci<a href=https://twitter.com/mjg59/status/1396237336988446722>certain</a>
780f66f451Sopenharmony_ci<a href=https://www.devever.net/~hl/freenode_abuse>amount</a>
790f66f451Sopenharmony_ci<a href=https://twitter.com/TwitchiH/status/1395756163527028739>of</a>
800f66f451Sopenharmony_ci<a href=https://twitter.com/joepie91/status/1395364883303182339>drama</a>
810f66f451Sopenharmony_ci<a href=https://twitter.com/RichFelker/status/1404816846734385164>involved</a>).</p>
820f66f451Sopenharmony_ci
830f66f451Sopenharmony_ci<p><u>Pending</u>: lots more work on <b>toysh</b>: it has basic $((math)) support
840f66f451Sopenharmony_cinow, += assignment, the "declare" command and corresponding variable
850f66f451Sopenharmony_citypes (declare -i, declare -u, etc), several bugfixes, greatly
860f66f451Sopenharmony_ciimproved support for background processes on NOMMU systems, and a bunch
870f66f451Sopenharmony_cimore sh.test entries.</p>
880f66f451Sopenharmony_ci
890f66f451Sopenharmony_ci<p>Elliott fixed <b>modprobe</b>'s parsing of short lines. Rob fixed a
900f66f451Sopenharmony_cidivision by zero error when <b>vi</b> tries to edit a zero length file.
910f66f451Sopenharmony_ciAnqi Dong made sure that syslogd messages sent to sockets end with a
920f66f451Sopenharmony_cinewline. Eric Molitor significantly upgrade <b>wget</b> with http 1.1,
930f66f451Sopenharmony_cichunked encoding, and (external library) https (TLS 1.2) support,
940f66f451Sopenharmony_ciplus several bugfixes. Michael Hope fixed <b>tftpd</b>'s option parsing.</p>
950f66f451Sopenharmony_ci
960f66f451Sopenharmony_ci<p><u>Documentation</u>: The roadmap.html and status.html pages
970f66f451Sopenharmony_cigot noticeable updates. (status.html is now directly generated by
980f66f451Sopenharmony_ciscripts/mkstatus.py, the old status.html wrapper that server-side-included
990f66f451Sopenharmony_cistatus.gen has been removed).
1000f66f451Sopenharmony_ciThe <a href=design.html>design</a>
1010f66f451Sopenharmony_cipage provides better links to the LP64 documentation, and the
1020f66f451Sopenharmony_ci<a href=code.html>code</a> page explains a corner case where the filename
1030f66f451Sopenharmony_ciand first command name expect to match (and how to work around it if they don't).
1040f66f451Sopenharmony_ciSome website files weren't in the repository: two jpegs linked from html
1050f66f451Sopenharmony_cifiles, and the www/.htaccess file that triggers the server side includes
1060f66f451Sopenharmony_ciin the navigation menu is now checked in. Johannes Schmitz fixed a
1070f66f451Sopenharmony_citypo in about.html.</p>
1080f66f451Sopenharmony_ci
1090f66f451Sopenharmony_ci<p>The <b>shred</b> usage line now includes all options.
1100f66f451Sopenharmony_ciThe <b>logwrapper</b> command now warns when it isn't built standalone.
1110f66f451Sopenharmony_ciThe <b>help</b> command no longer shows a header line about toybox unless
1120f66f451Sopenharmony_ciit's called with no arguments. (It still shows it for command --help.)
1130f66f451Sopenharmony_ciThe --help option no longer needs to be the first option, and is
1140f66f451Sopenharmony_cichecked before the "Not root" error message for restricted commands.</p>
1150f66f451Sopenharmony_ci
1160f66f451Sopenharmony_ci<p><u>Bugfixes</u>:
1170f66f451Sopenharmony_ciElliott made <b>ps</b> exit with status 1 if no processes were shown (for LTP),
1180f66f451Sopenharmony_cifixed an off-by-one in <b>dmesg</b> and a bounds check in <b>netstat</b>,
1190f66f451Sopenharmony_cifixed <b>pidof -s</b>, and taught <b>rmmod</b> to handle multiple arguments.
1200f66f451Sopenharmony_ciDenys Vlasenko pointed out that <b>free -t</b> is "total" not "terabytes".
1210f66f451Sopenharmony_ciSamanta Navarro pointed out a leftover 32 bit limitation in argument groups.
1220f66f451Sopenharmony_ciMikhail Kashkarov fixed mkdir's error handling for existing directories
1230f66f451Sopenharmony_ciwithout -p.
1240f66f451Sopenharmony_ciRob fixed the 32 bit <b>readelf</b> build on Android, fixed a race condition
1250f66f451Sopenharmony_ciin <b>tar</b> leading
1260f66f451Sopenharmony_cito the occasional spurious archiver warning,
1270f66f451Sopenharmony_ci<a href=https://github.com/landley/toybox/commit/127cff38809e>changed cp</a>
1280f66f451Sopenharmony_cito work around a posix violation in the kernel, made xparsedate() handle more
1290f66f451Sopenharmony_ciwhitespace and ignore trailing + or - (a NOP timezone), made <b>su</b> log the
1300f66f451Sopenharmony_ciright username, switched getuid() checks to geteuid() in <b>df</b> and <b>ping</b>,
1310f66f451Sopenharmony_cifixed a place in the test suite where do_test()
1320f66f451Sopenharmony_cicould get confused by symlinks in the $PATH (calling realpath too early
1330f66f451Sopenharmony_ciand losing the name of the command being run),
1340f66f451Sopenharmony_cimade <b>env -i</b> use the old $PATH to run its command,
1350f66f451Sopenharmony_ciand made <b>grep --color</b> highlight all matches.</p>
1360f66f451Sopenharmony_ci
1370f66f451Sopenharmony_ci<p>Worked around a bug in glibc+gcc 9.3 where linking against librt.a
1380f66f451Sopenharmony_ci(for things like timer_create()) pulls in libgcc_eh.a which uses
1390f66f451Sopenharmony_cithreads, meaning you can't statically link against librt.a from
1400f66f451Sopenharmony_cia non-threaded app. (I hadn't noticed because it works fine with the musl
1410f66f451Sopenharmony_ciand llvm/bionic toolchains, only fails statically linking on e.g. debian.)
1420f66f451Sopenharmony_ciThe <a href=https://github.com/torvalds/linux/commit/d18760560593>kernel fix</a> for the cpio encrypted filesystem issue worked around in 0.8.5 made
1430f66f451Sopenharmony_ciit in. Similarly, the
1440f66f451Sopenharmony_ciFS_IOC_{GET,SET}{VERSION,FLAGS} ioctl family are <a href=https://www.spinics.net/lists/linux-api/msg49101.html>historically broken</a>
1450f66f451Sopenharmony_ci(taking an unsigned int argument while advertising signed long),
1460f66f451Sopenharmony_ciwhich <a href=https://github.com/landley/toybox/commit/dcfac5c983ad>we fixed</a> and reported upstream to a long
1470f66f451Sopenharmony_ciround of bikeshedding (sadly
1480f66f451Sopenharmony_cithe result seems to have been the man page maintainer
1490f66f451Sopenharmony_ci<a href=https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/commit/man2?id=3de87d46840d>giving up</a>
1500f66f451Sopenharmony_cion documenting ioctls at all.</p>
1510f66f451Sopenharmony_ci
1520f66f451Sopenharmony_ci<p><u>Cleanups</u>:
1530f66f451Sopenharmony_ci<b>cut</b> switched to FLAG() macros and no longer allows -f with -F,
1540f66f451Sopenharmony_ci<b>eject</b> uses FLAG() macros and the linux/eject.h header,
1550f66f451Sopenharmony_ciprettycool@protonmail added tabs to <b>time</b>'s output, and Rob removed
1560f66f451Sopenharmony_cithe floating point dependency from time. Minor cleanups
1570f66f451Sopenharmony_cito lsattr, lspci, nsenter, xxd, file, insmod, modprobe, arp, bootchartd, pmap,
1580f66f451Sopenharmony_cicomm, lsof, blkid, crond, init, userdel, makedevs, and scripts/make.sh.
1590f66f451Sopenharmony_ciThe "int fd = fd;"
1600f66f451Sopenharmony_ciinitialization hack to shut up gcc's "may be used uninitalized, but isn't" false
1610f66f451Sopenharmony_cipositive warning has been replaced by a QUIET macro that resolves
1620f66f451Sopenharmony_cito nothing on llvm (which doesn't have the gcc bug).
1630f66f451Sopenharmony_ciRyan Pritchard reported a bug where <b>alias ls="ls --color"</b> would prevent
1640f66f451Sopenharmony_ci--help or --version from being the first argument to the command, which was
1650f66f451Sopenharmony_cia pain to fix without breaking things like <b>echo -- --version</b> and
1660f66f451Sopenharmony_ci<b>basename -s --help file--help</b>.
1670f66f451Sopenharmony_ci(Both toy_singleinit() in main.c _and_ get_optflags() in lib/args.c now
1680f66f451Sopenharmony_cicheck for those.)</p>
1690f66f451Sopenharmony_ci
1700f66f451Sopenharmony_ci<p><u>Infrastructure</u>:
1710f66f451Sopenharmony_cixabspath() now has a more granular (flag based) control interface.</p>
1720f66f451Sopenharmony_ci
1730f66f451Sopenharmony_ci<p><b>scripts/make.sh</b> now uses wait -n (available since bash 4.3 in February 2014)
1740f66f451Sopenharmony_cito keep the processors busier during a parallel build.
1750f66f451Sopenharmony_ciTests are now running in a subshell, which means functions and local
1760f66f451Sopenharmony_civariables defined in one don't pollute others during "make tests".
1770f66f451Sopenharmony_ci
1780f66f451Sopenharmony_ci<p>Guo Chuang reported that lsattr won't build on an 8 year old version of
1790f66f451Sopenharmony_ci<a href=https://github.com/landley/toybox/pull/292#issuecomment-899895909>centos</a>,
1800f66f451Sopenharmony_ciwhich is still supported for 2 more years because Red Hat can
1810f66f451Sopenharmony_cibe paid to have a 10 year support horizon, longer than toybox's 7. Rob
1820f66f451Sopenharmony_cifixed it (and merged a similarly ancient compilation failure fix when
1830f66f451Sopenharmony_cibuilding pending/ip.c against a 3.10 kernel),
1840f66f451Sopenharmony_cibut the <a href=http://lists.landley.net/pipermail/toybox-landley.net/2021-August/012537.html>philosophal argument</a>
1850f66f451Sopenharmony_ciremains <a href=http://lists.landley.net/pipermail/toybox-landley.net/2021-September/012603.html>unresolved</a>.</p>
1860f66f451Sopenharmony_ci
1870f66f451Sopenharmony_ci<p>Standalone builds can now override the .config file location with
1880f66f451Sopenharmony_ciKCONFIG_CONFIG same as the multiplexer build. scripts/single.sh can
1890f66f451Sopenharmony_cinow cope with a missing .config file (it uses the defconfig values
1900f66f451Sopenharmony_cifor the CONFIG_TOYBOX_* global symbols).
1910f66f451Sopenharmony_ci"make install_airlock" no longer needs host versions of sha256sum and sha512sum.</p>
1920f66f451Sopenharmony_ci
1930f66f451Sopenharmony_ci<p>In the test suite, <b>VERBOSE=spam</b> now shows expands successful tests
1940f66f451Sopenharmony_cilike it would for errors.</p>
1950f66f451Sopenharmony_ci
1960f66f451Sopenharmony_ci<p><b>scripts/record-commands</b> got updated and logwrapper got renamed <b>logpath</b>.</p>
1970f66f451Sopenharmony_ci
1980f66f451Sopenharmony_ci<a name="19-05-2021" /><a href="#19-05-2021"><hr><h2><b>May 19, 2021</b></h2></a>
1990f66f451Sopenharmony_ci<blockquote><p>It was of course a descendant of these eccentric poets
2000f66f451Sopenharmony_ciwho invented the spurious tales of impending doom which enabled the people of
2010f66f451Sopenharmony_ciGolgafrincham to rid themselves of the useless third of their population.
2020f66f451Sopenharmony_ciThe other two-thirds stayed firmly at home and lived full, rich and happy lives
2030f66f451Sopenharmony_ciuntil they were all suddenly wiped out by a virulent disease contracted from
2040f66f451Sopenharmony_cia dirty telephone.</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
2050f66f451Sopenharmony_ci
2060f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.8.5.tar.gz>Toybox 0.8.5</a>
2070f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.8.5>git commit</a>)
2080f66f451Sopenharmony_ciis out, with prebuilt <a href=downloads/binaries/0.8.5>static binaries</a> and
2090f66f451Sopenharmony_ci<a href=downloads/binaries/mkroot/0.8.5>mkroot images</a>
2100f66f451Sopenharmony_cibootable under QEMU (using vanilla linux-5.12, except that s390 needed another
2110f66f451Sopenharmony_ci<a href=http://lkml.iu.edu/hypermail/linux/kernel/2105.2/02904.html>perl
2120f66f451Sopenharmony_ciremoval patch</a>).</p>
2130f66f451Sopenharmony_ci
2140f66f451Sopenharmony_ci<p>This development cycle had thirty commits to sh.c fixing bugs and adding
2150f66f451Sopenharmony_cifeatures to <b>toysh</b>. Shell functions and local variables are now implemented,
2160f66f451Sopenharmony_cialong with the "set" builtin and trace support, and job control is
2170f66f451Sopenharmony_ciabout halfway in. The shell as a whole is <a href=https://en.wikipedia.org/wiki/Ninety%E2%80%93ninety_rule>maybe 80% done</a>, but still
2180f66f451Sopenharmony_cihas some obvious gaps like $((math)) and interactive command line
2190f66f451Sopenharmony_cihistory/editing, plus a bunch of testing.</p>
2200f66f451Sopenharmony_ci
2210f66f451Sopenharmony_ci<p><u>New commands</u>:
2220f66f451Sopenharmony_ciMoritz Röhrich added <b>pwgen</b> and <b>base32</b>, and
2230f66f451Sopenharmony_ciElliott Hughes added <b>unicode</b>. The
2240f66f451Sopenharmony_ci<b>readelf</b> command got promoted out of pending, and
2250f66f451Sopenharmony_ci<b>sha3sum</b> is now switched on in defconfig.</p>
2260f66f451Sopenharmony_ci
2270f66f451Sopenharmony_ci<p>Michael Christensen added <b>chsh</b> to pending, which hasn't been promoted
2280f66f451Sopenharmony_ciyet because it's part of a group of commands (useradd, userdel, groupadd,
2290f66f451Sopenharmony_cigroupdel) that should all be promoted together at some point
2300f66f451Sopenharmony_ci(and depend on lib/passwd.c, which could use some more work).</p>
2310f66f451Sopenharmony_ci
2320f66f451Sopenharmony_ci<p><u>Upgrades</u>:
2330f66f451Sopenharmony_ci<b>cpio</b> now supports extracting multiple concatenated archives.
2340f66f451Sopenharmony_ci<b>file</b> now recognizes android's new XML binary format.
2350f66f451Sopenharmony_ci<b>devmem</b> now works on nommu, can handle 0x prefxes on the address,
2360f66f451Sopenharmony_ciand prints
2370f66f451Sopenharmony_cihex or decimal output to match the address type.
2380f66f451Sopenharmony_ci<b>df</b> -a now shows overmounted filesystems.
2390f66f451Sopenharmony_ci<b>test</b> -k checks the sticky bit.
2400f66f451Sopenharmony_ciAdded -t to <b>install</b>, <b>cp</b>, and <b>mv</b>, and -u to <b>cp</b>
2410f66f451Sopenharmony_ciand <b>cpio</b>.
2420f66f451Sopenharmony_ci<b>find</b> -executable checks that _we_ can execute them (u+x could be owned
2430f66f451Sopenharmony_ciby a different user or have selinux weirdness).</p>
2440f66f451Sopenharmony_ci
2450f66f451Sopenharmony_ci<p>Elliott added several features to <b>date</b> (--iso, %:z output format, and
2460f66f451Sopenharmony_ci--utc as a synonym for -u), added a <b>sed</b> s///x option,
2470f66f451Sopenharmony_ciadded units to <b>ulimit</b> output, and
2480f66f451Sopenharmony_cimade several UI changes to <b>hexedit</b> including a color
2490f66f451Sopenharmony_cimode (which is now the default, press x to toggle between old and new
2500f66f451Sopenharmony_cidisplay), masked out the file type in <b>chmod</b> error messages and
2510f66f451Sopenharmony_citaught it to handle complex modes (like u+s+s), 
2520f66f451Sopenharmony_cihardened <b>file</b> and <b>readelf</b> against invalid input,
2530f66f451Sopenharmony_ciadded a portability.h workaround for macos statvfs for <b>df</b>,
2540f66f451Sopenharmony_cienabled line buffering in <b>echo</b> and <b>yes</b>,
2550f66f451Sopenharmony_ciand significatly sped up <b>tr</b>. Rob similarly optimized <b>seq</b>
2560f66f451Sopenharmony_ciand <b>count</b>.</p>
2570f66f451Sopenharmony_ci
2580f66f451Sopenharmony_ci<p><b>make tests</b> now defaults to VERBOSE=fail (and now has VERBOSE=all to
2590f66f451Sopenharmony_cicontinue after failure, and VERBOSE=quiet to show FAIL: lines without
2600f66f451Sopenharmony_cidiff -u output).
2610f66f451Sopenharmony_ciCleanups to tee, netstat, file, and df. Added "static" annotations in a
2620f66f451Sopenharmony_cilot of commands, made more things use FLAG() macros. Ethan Sommer pointed out
2630f66f451Sopenharmony_cian unnecessary wrapper function in chgrp.
2640f66f451Sopenharmony_ciIn pending, Elliott did some cleanups and bugfixes to gettty, telnet, telnetd,
2650f66f451Sopenharmony_citftpd, init, modprobe, and dd, and added more features to vi.
2660f66f451Sopenharmony_ciRob did some cleanup on modprobe.</p>
2670f66f451Sopenharmony_ci
2680f66f451Sopenharmony_ci<p><u>Bugfixes</u>:
2690f66f451Sopenharmony_ciYi-Yo Chiang fixed a <b>rm</b> bug where -f could get confused by read
2700f66f451Sopenharmony_cionly filesystems and produce an error trying to unlink a nonexistent
2710f66f451Sopenharmony_cifile, pointed out <b>install</b> -D was broken when the target file
2720f66f451Sopenharmony_cialready exists, pointed out a <b>cpio</b> interaction with certain encrypted
2730f66f451Sopenharmony_cifilesystems where readlink() wouldn't write as much payload as the header
2740f66f451Sopenharmony_cipromised (corrupting the archive) and fixed another cpio bug where -t test
2750f66f451Sopenharmony_cimode would chown() files, and fixed quoting in mount.test.
2760f66f451Sopenharmony_ciElliott fixed a sequencing issue in <b>setsid</b>'s system calls,
2770f66f451Sopenharmony_cifixed some <b>sed</b> tests (sed's lie-to-autoconf --version
2780f66f451Sopenharmony_cioutput was preventing toyonly tests from triggering) and
2790f66f451Sopenharmony_cifixed <b>tar</b>'s base 256 output for very large files.
2800f66f451Sopenharmony_ciNir Lichtman pointed out that <b>rm</b> -p shouldn't try to rmdir / at the end,
2810f66f451Sopenharmony_ciLuke Frankart pointed out a typo that broke <b>test</b> checking file modes,
2820f66f451Sopenharmony_ciFiras Khalil Khana fixed a duplicate entry in the roadmap,
2830f66f451Sopenharmony_ciEthan Sommer fixed <b>install</b> -Dt,
2840f66f451Sopenharmony_ciAndy Hu requested that <b>mount</b> handle mixed options like
2850f66f451Sopenharmony_ci-tnomsdos,smbfs.
2860f66f451Sopenharmony_ciDenys Nykula reported a <b>chmod</b> regression,
2870f66f451Sopenharmony_ciasm89 pointed out a <b>netcat</b> bug writing transactions larger than
2880f66f451Sopenharmony_ci4k,
2890f66f451Sopenharmony_ciDaniel Santana fixed <b>df</b> combining -P and -k,
2900f66f451Sopenharmony_ciRobin Hsu fixed <b>grep</b> getting confused by libc setting errno when
2910f66f451Sopenharmony_cia library function call succeeded.
2920f66f451Sopenharmony_ciPuck Meerburg taught the <b>gunzip</b> code not to be confused by FEXTRA entries
2930f66f451Sopenharmony_ci(as described in RFC 1952) and added a test suite entry for that.</p>
2940f66f451Sopenharmony_ci
2950f66f451Sopenharmony_ci<p><b>find</b> handles empty arguments properly now (with test), <b>date</b>
2960f66f451Sopenharmony_ci-I with no arguments no longer segfaults, <b>grep</b> -f /dev/null no
2970f66f451Sopenharmony_cilonger adds a "" regex matching everything, -z no longer splits patterns
2980f66f451Sopenharmony_cion \n, and -o can print zero length matches,
2990f66f451Sopenharmony_ci<b>cp</b> -t works with one argument and with --parents.
3000f66f451Sopenharmony_ci<b>readelf</b> displays properly in 80 columns and doesn't reject .bss
3010f66f451Sopenharmony_cioff end of file, and <b>sed</b> s///2 now works when there isn't more than one
3020f66f451Sopenharmony_cimatch.
3030f66f451Sopenharmony_ci<b>tar</b> now removes empty directories where it wants to put a non-directory.
3040f66f451Sopenharmony_ci<b>microcom</b> sets serial device terminal attributes correctly.</p>
3050f66f451Sopenharmony_ci
3060f66f451Sopenharmony_ci<p>The prebuilt x86-64 binaries shouldn't segfault on older x86-64 processors
3070f66f451Sopenharmony_cianymore (workaround for gcc bug).
3080f66f451Sopenharmony_ciCross compiling was sometimes confusing install.sh because it created
3090f66f451Sopenharmony_cia hyphenated "toybox-$TARGET" and then tried to make symlinks to just "toybox".</p>
3100f66f451Sopenharmony_ci
3110f66f451Sopenharmony_ci<p><u>Build</u>:
3120f66f451Sopenharmony_ciCONFIG_TOYBOX_I18N went away: toybox builds always support utf8 now.
3130f66f451Sopenharmony_ciElla-0 added OpenBSD support (but not a separate defconfig, try
3140f66f451Sopenharmony_ci"make freebsd_defconfig").</p>
3150f66f451Sopenharmony_ci
3160f66f451Sopenharmony_ci<p><u>Library</u>:
3170f66f451Sopenharmony_ciutf8towc() is now unsigned instead of wchar_t, matching wctoutf8().
3180f66f451Sopenharmony_cixclose() tests if fd is -1 so the caller doesn't have to.
3190f66f451Sopenharmony_citxpect (the test suite's built-in "expect", implemented in shell) can
3200f66f451Sopenharmony_cinow do regex matches, and sh.test uses this.</p>
3210f66f451Sopenharmony_ci
3220f66f451Sopenharmony_ci<p>Elliott added the failing regex to the xregcomp() error message, and
3230f66f451Sopenharmony_cimade multiple portability tweaks (header tweaks to build in more
3240f66f451Sopenharmony_cienvironments, running tests on Raspberry Pi OS and under mksh,
3250f66f451Sopenharmony_cifix utf8 locale selection on macos).</p>
3260f66f451Sopenharmony_ci
3270f66f451Sopenharmony_ci<p><u>Docs</u>:
3280f66f451Sopenharmony_ci<b>chmod</b>'s help text explains why o+s doesn't set +t (and has a
3290f66f451Sopenharmony_citest for it). The <b>echo</b> help text is more compact.
3300f66f451Sopenharmony_ciChecked in a better conversion of <a href=https://landley.net/toybox/toycans.png>toycans.png</a>.</p>
3310f66f451Sopenharmony_ci
3320f66f451Sopenharmony_ci<a name="24-10-2020" /><a href="#24-10-2020"><hr><h2><b>October 24, 2020</b></h2></a>
3330f66f451Sopenharmony_ci<blockquote><p>
3340f66f451Sopenharmony_ci"We are now cruising at a level of two to the power of twenty-five thousand to
3350f66f451Sopenharmony_cione against and falling, and we will be restoring normality just as soon as we
3360f66f451Sopenharmony_ciare sure what is normal anyway."</p>
3370f66f451Sopenharmony_ci<p>- The Hitchhiker's Guide to the Galaxy</p>
3380f66f451Sopenharmony_ci</blockquote>
3390f66f451Sopenharmony_ci
3400f66f451Sopenharmony_ci<p>After a longer and slightly more
3410f66f451Sopenharmony_ci<a href=https://github.com/landley/toybox/commit/07a896862ddf>turbulent</a>
3420f66f451Sopenharmony_cidevelopment cycle than some,
3430f66f451Sopenharmony_ci<a href=downloads/toybox-0.8.4.tar.gz>Toybox 0.8.4</a>
3440f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.8.4>git commit</a>)
3450f66f451Sopenharmony_ciis out with new commands <b>sha3sum</b> and <b><a href=https://github.com/landley/toybox/commit/6b4c32ae3986>watchdog</a></b>.</p>
3460f66f451Sopenharmony_ci
3470f66f451Sopenharmony_ci<p>There are <a href=downloads/binaries/mkroot/0.8.4>prebuilt mkroot binaries</a>
3480f66f451Sopenharmony_cinow, tiny toybox linux systems for a dozen architectures, all bootable under
3490f66f451Sopenharmony_ciqemu. (The vmlinux in each tarball is a vanilla linux-5.9 kernel built
3500f66f451Sopenharmony_cifrom the included config file.)</p>
3510f66f451Sopenharmony_ci
3520f66f451Sopenharmony_ci<p>The FAQ got <a href=faq.html>noticeably larger</a>, and the README has
3530f66f451Sopenharmony_cimore links. New command features include the <b>sed -s</b> flag,
3540f66f451Sopenharmony_ci<b>cpio --no-preserve-owner</b> now affects archive creation,
3550f66f451Sopenharmony_ciElliott added <b>tar -I</b> and multi-type
3560f66f451Sopenharmony_ci<b>find -type a,b,c</b> support, Mark Salyzyn added <b>xargs -P</b> to
3570f66f451Sopenharmony_cirun parallel jobs, the <b>ps</b> and <b>top</b> commands
3580f66f451Sopenharmony_cinow autodetect pid length, and <b>top</b> adjusts units for memory display based on
3590f66f451Sopenharmony_cisystem size.</p>
3600f66f451Sopenharmony_ci
3610f66f451Sopenharmony_ci<p><u>Toysh and toyroot</u>:
3620f66f451Sopenharmony_cilots of new work on <b>toysh</b>: 29 commits to sh.c since last release, adding 1500
3630f66f451Sopenharmony_cilines and deleting 700, plus a bunch of sh.tests entries). Since last release
3640f66f451Sopenharmony_ciwe implemented wildcards, case/esac and select, brace expansion sequences
3650f66f451Sopenharmony_ci(ala {1..10..2} and {a..z}),
3660f66f451Sopenharmony_cithe remaining variable slice types ${a#y} ${a%y} ${a^y} ${a,y}
3670f66f451Sopenharmony_ci${a/search/replace}, the "<b>source</b>" shell builtin,
3680f66f451Sopenharmony_cithe start of job control, and several bugfixes.
3690f66f451Sopenharmony_ciPlus the standalone "<b>make sh</b>" build understands MAYFORK now. It's
3700f66f451Sopenharmony_cistill missing features like functions() and $((math)) but it's getting
3710f66f451Sopenharmony_ciclose to usable now.</p>
3720f66f451Sopenharmony_ci
3730f66f451Sopenharmony_ci<p><u>Documentation</u>:
3740f66f451Sopenharmony_ciSome of the README contents moved to the FAQ, and the README's "presentations"
3750f66f451Sopenharmony_cisection got some new links. Several new <a href=faq.html>FAQ</a> entries explaining things like
3760f66f451Sopenharmony_cimkroot ("how do I build a working Linux system
3770f66f451Sopenharmony_ciwith toybox"), cross compiling (how to get/setup the 2 compilers and
3780f66f451Sopenharmony_ci3 libc we regression test against), and "where does toybox fit into the
3790f66f451Sopenharmony_cilinux/android ecosystem".
3800f66f451Sopenharmony_ciThe "toybox --help" output now lists the project's web page (<a href=https://github.com/landley/toybox/issues/50>by request</a>).
3810f66f451Sopenharmony_ciElliott removed
3820f66f451Sopenharmony_cigetevent (an android board bringup/hardware debugging tool built by running
3830f66f451Sopenharmony_cia python script against kernel headers, not really in scope for toybox),
3840f66f451Sopenharmony_cifixed xargs help formatting, and taught the toybox multiplexer's
3850f66f451Sopenharmony_cicommand list output (and "kill -l") to measure the current the terminal width
3860f66f451Sopenharmony_ciwhen wordwrapping (previously hardwired to 80 columns).
3870f66f451Sopenharmony_ciIf you're curious, I checked in my <a href=www/release.txt>release procedure
3880f66f451Sopenharmony_cichecklist</a>, and
3890f66f451Sopenharmony_cifixed a stale link in the nav bar on the left ("statistics" changed domains).
3900f66f451Sopenharmony_ciFiras Khaliki Khana fixed some issues in the roadmap, and Rob
3910f66f451Sopenharmony_citweaked the roadmap so status.html is slightly more current.</p>
3920f66f451Sopenharmony_ci
3930f66f451Sopenharmony_ci<p><u>Tests</u>:
3940f66f451Sopenharmony_ciThe "make tests" target now fails if any of the tests it ran failed.
3950f66f451Sopenharmony_ciLots of TEST_HOST tests got fixed (checking for specific error messages exposes
3960f66f451Sopenharmony_ciTEST_HOST to version skew, and scripts/test.sh will now skip TEST_HOST
3970f66f451Sopenharmony_cicommands that aren't installed) and added toyonly annotations as necessary
3980f66f451Sopenharmony_ci(replacing most uses of SKIP_HOST).
3990f66f451Sopenharmony_ciEric Molitor added automated github tests on MacOS and Ubuntu using their
4000f66f451Sopenharmony_ci"workflows" thing.
4010f66f451Sopenharmony_ciThe clang asan plumbing slows some code down more than 10 times, so some testing timeouts were expanded.
4020f66f451Sopenharmony_ci
4030f66f451Sopenharmony_ci<p><u>Pending</u>:
4040f66f451Sopenharmony_ciEric Molitor did a bunch of work on route: moved it to sbin, added xsend and
4050f66f451Sopenharmony_cixrecv, taught display_routes() and setroute to use the rtnetlink API and
4060f66f451Sopenharmony_cido hostname lookups, added support for mss, win, and irtt, merged ipv6 and ipv4
4070f66f451Sopenharmony_cicodepaths with autodetection of address type, implemented RTA_CACHEINFO
4080f66f451Sopenharmony_cisupport, switched exit paths to perror_exit(), and removed unused code.
4090f66f451Sopenharmony_ciEthan Sommer fixed warnings in dhcpd, removed a bunch of unnecessary
4100f66f451Sopenharmony_ci; after GLOBALS() blocks and an unnecessary return in df.
4110f66f451Sopenharmony_ciErik Moqvist fixed dns setting in the dhcp client.
4120f66f451Sopenharmony_ciRob did some cleanup on bootchartd, traceroute, getty...
4130f66f451Sopenharmony_ciElliott fixed getty to reliably update utmp.
4140f66f451Sopenharmony_ciChris Sarra added ipv6 support to wget.
4150f66f451Sopenharmony_ciAriadne Conill submitted several small fixes from testing Alpine Linux with
4160f66f451Sopenharmony_citoybox, and Antoni Villalonga i Noceras fixed typos in error messages.</p>
4170f66f451Sopenharmony_ci
4180f66f451Sopenharmony_ci<p><u>Bugfixes</u>:
4190f66f451Sopenharmony_ciElliott avoided sign extension in devmem, and Ethan Sommer switched it from
4200f66f451Sopenharmony_cigetpagesize() to posix sysconf(_SC_PAGESIZE).
4210f66f451Sopenharmony_ciElliott fixed chmod -R
4220f66f451Sopenharmony_ciignoring dangling symlinks, fixed stty <a href=https://github.com/landley/toybox/issues/251>misparsing c_iflags</a>, fixed the chattr f2fs test with
4230f66f451Sopenharmony_cicompression enabled, taught blkid not to show empty tags, taught xparsedate()
4240f66f451Sopenharmony_cito read date's default output format, fixed a recent echo -e \0 regression,
4250f66f451Sopenharmony_cichanged cpio -p parsing to match a <a href=http://lists.landley.net/pipermail/toybox-landley.net/2020-August/011955.html>bug</a> in the gnu version
4260f66f451Sopenharmony_ciwhich an existing script <a href=https://github.com/landley/toybox/commit/fa1af3b085cc>depended on</a>,
4270f66f451Sopenharmony_ciand switched hwclock back to looking
4280f66f451Sopenharmony_cionly at /dev/rtc0 for <a href=https://github.com/landley/toybox/commit/70e2232ce61c>reasons</a> involving kernel version skew and vendor bug reports.</p>
4290f66f451Sopenharmony_ci
4300f66f451Sopenharmony_ci<p>David Legault pointed out that unescape2() (and thus echo -e) wasn't handling
4310f66f451Sopenharmony_ci\0 right.
4320f66f451Sopenharmony_ciKhem Raj reported that mips glibc doesn't have SIGSTKFLT, leading to
4330f66f451Sopenharmony_cia build break if we assume glibc behaves consistently, which led to a bunch of
4340f66f451Sopenharmony_cimacos signal portability cleanups from Elliott.
4350f66f451Sopenharmony_ciWilliam Djupström fixed tar extracting long file paths, adding hardlinks
4360f66f451Sopenharmony_cito an archive, and reported that --exclude wasn't working.
4370f66f451Sopenharmony_ciPeter McConalogue pointed out that cp/mv -i prompt should
4380f66f451Sopenharmony_cidefault N, and mv should only prompt when stdin is a tty.
4390f66f451Sopenharmony_ciPatrick Oppenlander made rtcwake and hwclock default to UTC if /dev/adjtime
4400f66f451Sopenharmony_ciisn't available, suggested watchdog catch SIGINT, and caught an
4410f66f451Sopenharmony_ciuninitialized offset in blkdiscard which gcc apparently didn't.
4420f66f451Sopenharmony_ciRyan Pritchard reported that <b>file</b> wasn't getting gif heights right,
4430f66f451Sopenharmony_ciand Elliott added gif version output so TEST_HOST provided similar output.
4440f66f451Sopenharmony_ciMartin Stjernholm fixed <b>cp -P</b> to not follow symlinks and updated
4450f66f451Sopenharmony_cithe help text to say it's not the default.
4460f66f451Sopenharmony_ciAntoni Villalonga added more --long asiases to <b>chgrp/chown/rmdir</b>.
4470f66f451Sopenharmony_ci
4480f66f451Sopenharmony_ci<p>The symlink indirection code subtly broke xexec() so it would still try to call
4490f66f451Sopenharmony_cia builtin when given a path to a command (fixed now).
4500f66f451Sopenharmony_ciThe code to trip \n off xgetline() was using the length of the allocation
4510f66f451Sopenharmony_ciinstead of the length of the read.
4520f66f451Sopenharmony_ciNetcat no longer leaks sockfd into child processes.
4530f66f451Sopenharmony_ciPatch "fuzz" support was outputting context lines from the hunk, not the
4540f66f451Sopenharmony_cifile. Chrisrfq fixed i2cdetect parameter reading.
4550f66f451Sopenharmony_ciChris Sarra taught dd not to throw an error trying to truncate device files,
4560f66f451Sopenharmony_ciadded a misshing fflush() to lib/password.c, fixed a parse error in logger
4570f66f451Sopenharmony_cipreventing local facility logging from working right, taught init
4580f66f451Sopenharmony_cito reload inittab when it receives SIGHUP, and fixed a memory leak in tar.</p>
4590f66f451Sopenharmony_ci
4600f66f451Sopenharmony_ci<p><u>Library</u>:
4610f66f451Sopenharmony_ciNew xvdaemon() function daemonizing on nommu systems, to wean commands
4620f66f451Sopenharmony_cioff daemon() which requires TOYBOX_FORK.
4630f66f451Sopenharmony_ciTeach sendfile_len() to use copy_file_range() when available, with compile
4640f66f451Sopenharmony_citime probe. Fix xsignal_all_killers() to install the correct handler.
4650f66f451Sopenharmony_ciRob switched dirtree_path() to a non-recursive implementation, and
4660f66f451Sopenharmony_citaught dirtree that a top level entry named "" is equivalent to
4670f66f451Sopenharmony_ci"." but should not show up in dirtree_path(),
4680f66f451Sopenharmony_ciread_password() now reads from tty device rather than stdin, and handles ctrl-c and ctrl-d, and
4690f66f451Sopenharmony_cihuman_readable() now has HR_NODOT so it can print single digit numbers without going "0.0".
4700f66f451Sopenharmony_ciPetri Gynther increased the vmstat column sizes so it didn't fit
4710f66f451Sopenharmony_ciin 80 columns anymore.
4720f66f451Sopenharmony_ciElliott added UTC offset support to xparsedate().</p>
4730f66f451Sopenharmony_ci
4740f66f451Sopenharmony_ci<p><u>Infrastructure</u>:
4750f66f451Sopenharmony_cimkroot now only passes --no-preserve-owner to cpio (so initramfs files
4760f66f451Sopenharmony_cibelong to root rather than whichever user ran the build) when using toybox's
4770f66f451Sopenharmony_civersion, because the other one is brain-damaged and errors out not
4780f66f451Sopenharmony_ciunderstanding it. (It understands it for extract, but not create. Yes really.)
4790f66f451Sopenharmony_ciNew PENDING variable you can set to enable more than just sh and route out
4800f66f451Sopenharmony_ciof pending.
4810f66f451Sopenharmony_ciThe "make distclean" no longer deletes root_download (where mkroot's "extra plumbing"
4820f66f451Sopenharmony_cifile saves source code downloads it tarballs, such as dropbear).</p>
4830f66f451Sopenharmony_ci
4840f66f451Sopenharmony_ci<p><u>Cleanup</u>:
4850f66f451Sopenharmony_ciCleanup openvt (35 lines added, 78 lines removed)
4860f66f451Sopenharmony_ciCleanup blkdiscard so lib/args.c parses the -o and -l numbers, which means
4870f66f451Sopenharmony_ci32 bit systems are limited to 2 gigabyte sizes which is a TODO item systemwide.
4880f66f451Sopenharmony_cioneit now uses flag macros and mentions -rn in the help. demo-utf8towc
4890f66f451Sopenharmony_cinow has main.c call setlocale for it.
4900f66f451Sopenharmony_ciSome cleanup on stty.</p>
4910f66f451Sopenharmony_ci
4920f66f451Sopenharmony_ci<a name="11-05-2020" /><a href="#11-05-2020"><hr><h2><b>May 11, 2020</b></h2></a>
4930f66f451Sopenharmony_ci<blockquote>
4940f66f451Sopenharmony_ci<p>Ford: Ah. A
4950f66f451Sopenharmony_ci<a href=https://www.youtube.com/watch?v=WSsR419HBpQ>towel</a>.
4960f66f451Sopenharmony_ciKeep this and guard it with your life.</p>
4970f66f451Sopenharmony_ci<p>Arthur: Huh?</p>
4980f66f451Sopenharmony_ci<p>Ford: Listen, it's a tough universe. There's all sorts of people and things
4990f66f451Sopenharmony_citrying to do you, kill you, rip you off, everything. If you're going to
5000f66f451Sopenharmony_cisurvive out there, you've really got to know where your
5010f66f451Sopenharmony_ci<a href=towel.jpg>towel</a> is.</p>
5020f66f451Sopenharmony_ci<p>- The Hitchhiker's Guide to the Galaxy</p>
5030f66f451Sopenharmony_ci</blockquote>
5040f66f451Sopenharmony_ci
5050f66f451Sopenharmony_ci<p>Despite everything <a href=downloads/toybox-0.8.3.tar.gz>Toybox 0.8.3</a>
5060f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.8.3>git commit</a>)
5070f66f451Sopenharmony_ciis finally out, with new commands <b>rtcwake</b> from Elliott Hughes and
5080f66f451Sopenharmony_ci<b>blkdiscard</b> from Patrick Oppenlander.
5090f66f451Sopenharmony_ciThe big news is "<b>make root</b>" now boots to a shell prompt,
5100f66f451Sopenharmony_ciwith toysh making it all the way through toyroot's init script.
5110f66f451Sopenharmony_ci(Some people were looking forward to <b>patch --fuzz</b> support too.)</p>
5120f66f451Sopenharmony_ci
5130f66f451Sopenharmony_ci<p><u>Toyroot</u>: <b>make root</b> now does what it says on the tin, it
5140f66f451Sopenharmony_cibuilds a bootable toybox-based Linux system using two source
5150f66f451Sopenharmony_cipackages (toybox and linux). The trivial version is "make root && sudo chroot
5160f66f451Sopenharmony_ciroot/host/fs /init". Here's
5170f66f451Sopenharmony_cia <a href=http://lists.landley.net/pipermail/toybox-landley.net/2020-April/011667.html>post with instructions</a> if you want to know how to build the
5180f66f451Sopenharmony_cicross compilers for testing the various architectures. The self-contained
5190f66f451Sopenharmony_ci<a href=https://github.com/landley/toybox/blob/0.8.3/scripts/mkroot.sh>script
5200f66f451Sopenharmony_cithat builds a simple bootable Linux system</a> is 250 lines long, and
5210f66f451Sopenharmony_cishould be easy to read if you want to know how it works.</p>
5220f66f451Sopenharmony_ci
5230f66f451Sopenharmony_ci<p>It also has basic module support, meaning arguments that aren't X=Y variable
5240f66f451Sopenharmony_ciassignments are the names of scripts to run to build more
5250f66f451Sopenharmony_cipackages at the end of the build. I checked in an <a href=https://github.com/landley/toybox/blob/master/scripts/root/dropbear>example package</a>,
5260f66f451Sopenharmony_ciand there's generic "download and extract source tarballs"
5270f66f451Sopenharmony_ci<a href=https://github.com/landley/toybox/blob/master/scripts/root/plumbing>plumbing</a> available to such modules.
5280f66f451Sopenharmony_ci(The Makefile doesn't know how to pass module names through to the script,
5290f66f451Sopenharmony_ciso instead of "make root" you have to
5300f66f451Sopenharmony_cicall the script directly, ala "scripts/mkroot.sh CROSS=sh4 LINUX=~/linux dropbear".)</p>
5310f66f451Sopenharmony_ci
5320f66f451Sopenharmony_ci<p>The resulting root filesystem now uses /root as the home
5330f66f451Sopenharmony_cidir for UID 0, and creates /dev/fd and /dev/shm in devtmpfs. The build works
5340f66f451Sopenharmony_ciaround a kernel
5350f66f451Sopenharmony_cibuild bug where "make distclean" doesn't work in a "cp -sfR" symlink
5360f66f451Sopenharmony_cidirectory. (The bug meant if you pointed LINUX= at unclean source, it was
5370f66f451Sopenharmony_ciunhappy, so now it distcleans the source directory before copying it. This
5380f66f451Sopenharmony_cimodifies said source directory, which is not ideal, but as usual the kernel guys
5390f66f451Sopenharmony_ci<a href=http://lkml.iu.edu/hypermail/linux/kernel/2002.2/00083.html>ignored
5400f66f451Sopenharmony_cithe bug report</a>, so a workaround was required.)
5410f66f451Sopenharmony_ciThe CROSS=all build announces each target in the title bar, puts
5420f66f451Sopenharmony_ciits logs into root/log, and has better trap handling to stop with one
5430f66f451Sopenharmony_cictrl-c.
5440f66f451Sopenharmony_ciSince last release it uses a more concise config format for the various kernel
5450f66f451Sopenharmony_ciarch targets (which shrank the script by about 50%), and merged
5460f66f451Sopenharmony_cithe old (now removed) scripts/cross.sh into the main script so
5470f66f451Sopenharmony_ci"make CROSS=armv7l LINUX=~/linux" is
5480f66f451Sopenharmony_ciliterally just a call to "scripts/mkroot.sh CROSS=armv7l LINUX=~/linux" now.</p>
5490f66f451Sopenharmony_ci
5500f66f451Sopenharmony_ci<p>As for <b>scripts/mcm-buildall.sh</b> building cross compilers,
5510f66f451Sopenharmony_ciof COURSE gcc 8.3 requires a different configuration to build the same
5520f66f451Sopenharmony_citoolchain as previous versions, it's gcc. It now builds a proper
5530f66f451Sopenharmony_cinommu libc for sh2eb without a broken fork() call in it that can never
5540f66f451Sopenharmony_cibe used but prevents compile-time probes from detecting nommu,
5550f66f451Sopenharmony_ciand checks that the cross compiler completed before trying to build
5560f66f451Sopenharmony_cithe native compiler.</p>
5570f66f451Sopenharmony_ci
5580f66f451Sopenharmony_ci<p>This was all tested with a recent
5590f66f451Sopenharmony_ci<a href=https://github.com/richfelker/musl-cross-make/commit/5086175f2902>version</a>
5600f66f451Sopenharmony_ciof musl-cross-make with the top level Makefile
5610f66f451Sopenharmony_ciedited to use BINUTILS_VER = 2.32 because the newer one
5620f66f451Sopenharmony_ci<a href=https://www.spinics.net/lists/linux-sh/msg56844.html>breaks the kernel
5630f66f451Sopenharmony_cibuild</a>
5640f66f451Sopenharmony_ciand LINUX_VER = 4.19.90 because the default musl-cross-make config uses an
5650f66f451Sopenharmony_ciout-of-tree headers package for some reason (those who forget history are
5660f66f451Sopenharmony_ci<a href=https://lkml.org/lkml/2006/4/28/194>doomed to repeat it</a>) which
5670f66f451Sopenharmony_cibreaks m68k and s390x. I won't post binaries of the resulting toolchains
5680f66f451Sopenharmony_cibecause they're GPLv3, but <a href=https://musl.cc/>Thalheim might</a>.
5690f66f451Sopenharmony_ci(I've also <a href=http://lists.landley.net/pipermail/toybox-landley.net/2020-May/011673.html>test built</a>
5700f66f451Sopenharmony_ciwith the Android NDK, but bionic's startup code currently segfaults before
5710f66f451Sopenharmony_cicalling main() if it can't open /dev/null, and the kernel guys
5720f66f451Sopenharmony_ci<a href=https://lkml.org/lkml/2017/9/13/651>ignored my patches</a> to
5730f66f451Sopenharmony_cimake CONFIG_DEVTMPFS_MOUNT work in initramfs.)</p>
5740f66f451Sopenharmony_ci
5750f66f451Sopenharmony_ci<p>At the moment toyroot cheats and uses two commands out of pending: toysh
5760f66f451Sopenharmony_ciis about 80% of the way to being useful but still missing some
5770f66f451Sopenharmony_ciobvious features like function support, job and terminal control, command
5780f66f451Sopenharmony_cihistory, $((math)), wildcard expansion... plus a lot of bash features like array
5790f66f451Sopenharmony_civariables, so it isn't out of pending yet. And route needs to be redone to use the
5800f66f451Sopenharmony_cinetlink interface that can handle multiple routing tables. For the moment
5810f66f451Sopenharmony_ciscripts/mkroot.sh adds both of them to defconfig if you haven't already
5820f66f451Sopenharmony_cigot a .config when you run it. (If you build and can't boot, your .config
5830f66f451Sopenharmony_ciprobably hasn't got CONFIG_SH switched on. Fix it in menuconfig, or
5840f66f451Sopenharmony_cirm .config and try gain.)</p>
5850f66f451Sopenharmony_ci
5860f66f451Sopenharmony_ci<p><u>New toybox features</u>:
5870f66f451Sopenharmony_ciElliott taught <b>patch</b> to understand [FILE [PATCH]] arguments, made
5880f66f451Sopenharmony_ci<b>cal</b> highlight the current day, added -T to <b>cp</b>/<b>mv</b>,
5890f66f451Sopenharmony_cidid a lot of work on <b>lsattr</b>/<b>chattr</b> (including adding -p
5900f66f451Sopenharmony_ciand "chattr ="), added tar --absolute-names, taught <b>id</b> to
5910f66f451Sopenharmony_cisupport numeric lookup and handle unknown groups, made -G show all
5920f66f451Sopenharmony_cigroups, and removed context= from -Z.
5930f66f451Sopenharmony_ciRob added <b>patch -F</b> (fuzz factor) support and <b>help -u</b> (usage only),
5940f66f451Sopenharmony_citaught <b>echo -e</b> about bash extensions like \uXXXX unicode escapes,
5950f66f451Sopenharmony_ci<b>netcat -L</b> no longer automatically includes stderr (new -E
5960f66f451Sopenharmony_cioption does that),
5970f66f451Sopenharmony_ci<b>setsid</b> now uses -c (like the man page says) instead of -t, and added
5980f66f451Sopenharmony_ci-w (wait) and -d (detach from tty). 
5990f66f451Sopenharmony_ciAndrew Ilijic added <b>ls -w</b>, removed trailing whitespace on output,
6000f66f451Sopenharmony_ciand added tests for -C and -x.</p>
6010f66f451Sopenharmony_ci
6020f66f451Sopenharmony_ci<p><u>Library</u>:
6030f66f451Sopenharmony_cianother fix to 32 bit option parsing of long long optflag values,
6040f66f451Sopenharmony_ciremove getdirname() and just use the libc function (which modifies
6050f66f451Sopenharmony_ciits argument, but we don't have to free a malloc),
6060f66f451Sopenharmony_cidlist_terminate() can now be called repeatedly on the same list,
6070f66f451Sopenharmony_cinew relative_path() function finds path from one directory to another,
6080f66f451Sopenharmony_ciand readfd() works like readfile() but on an already open fd.
6090f66f451Sopenharmony_ciUse MPATH macros in mkpathat(). Elliott added macOS versions of
6100f66f451Sopenharmony_cidev_minor()/dev_major()/makedev() to portability.c,
6110f66f451Sopenharmony_ciimplemented posix_fallocate() for macOS, removed a
6120f66f451Sopenharmony_cileftover uClibc workaround in fallocate that was breaking macOS,
6130f66f451Sopenharmony_ciand moved the table of ELF architectures from file to lib/lib.c (so
6140f66f451Sopenharmony_cireadelf can share).
6150f66f451Sopenharmony_ciPark Ju Hyung pointed out the fast path of fdlength() was commented out,
6160f66f451Sopenharmony_ciand we switched it to the 64 bit API while we were there (and then Elliott
6170f66f451Sopenharmony_ciadded macOS support).
6180f66f451Sopenharmony_ciJoeky taught file to recognize 7z archives.</p>
6190f66f451Sopenharmony_ci
6200f66f451Sopenharmony_ci<p><u>Pending</u>:
6210f66f451Sopenharmony_ciThe shell got a bunch of work: standalone "make sh" now includes the
6220f66f451Sopenharmony_cimultiplexer for builtin commands like "exit" and "cd". Added MAYFORK annotation
6230f66f451Sopenharmony_cifor commands that exist in the $PATH but can also be run within the shell
6240f66f451Sopenharmony_ciprocess (and sometimes have different behavior within the shell):
6250f66f451Sopenharmony_cicurrently applied to help, echo, false, kill, printf, pwd, test, time, and
6260f66f451Sopenharmony_citrue.</p>
6270f66f451Sopenharmony_ci
6280f66f451Sopenharmony_ci<p>Elliott added new commands <b>getopt</b> and <b>readelf</b>.
6290f66f451Sopenharmony_ciJarno Mäkipää taught wget how to follow http 301 and 302 redirects,
6300f66f451Sopenharmony_ciand did lots of work on vi. (Elliott also did work on vi.)
6310f66f451Sopenharmony_ciGavin Howard fixed a comparison bug in bc.
6320f66f451Sopenharmony_ciEthan Sommer fixed numerous small issues (including several build
6330f66f451Sopenharmony_ciwarnings and FLAG() macro conversions).</p>
6340f66f451Sopenharmony_ci
6350f66f451Sopenharmony_ci<p><u>Bugfixes</u>:
6360f66f451Sopenharmony_ci<b>tar</b> extract now deletes files and symlinks where it's making a directory,
6370f66f451Sopenharmony_ci<b>find -L -type -l</b> now finds dangling symlinks, extra #ifdefs in
6380f66f451Sopenharmony_ciportability.h prevent old gcc versions from barfing on __has_include(),
6390f66f451Sopenharmony_cixgetline() now returns NULL at EOF, tee with no arguments was
6400f66f451Sopenharmony_ciwriting to stdout twice, setsid works on nommu (I.E. vfork) now,
6410f66f451Sopenharmony_ci<b>netcat -L</b> no longer accumulates zombie processes,
6420f66f451Sopenharmony_ci<b>sntp</b> now uses adjtimex instead of adjtime (to build on bionic).
6430f66f451Sopenharmony_cixcreate_stdio() was checking WARN_ONLY in the wrong field (and tar was
6440f66f451Sopenharmony_cipassing it in the wrong field, so it worked there).
6450f66f451Sopenharmony_ciSeveral people wrestled with the <b>xargs</b> "argument too long" problem.
6460f66f451Sopenharmony_ciAlessio Balsini fixed memory leaks in loopback_setup() and "wayling"
6470f66f451Sopenharmony_ciadded a missing continue to losetup.
6480f66f451Sopenharmony_ciElliott fixed xargs -E, various things in modinfo,
6490f66f451Sopenharmony_ciadded an error check to gzip when using zlib (which copies non-gzip data to
6500f66f451Sopenharmony_cithe output verbatim for some reason),
6510f66f451Sopenharmony_cifound an case where dirtree could use
6520f66f451Sopenharmony_ciuninitialized data and silenced "Invalid argument" warnings (triggered by
6530f66f451Sopenharmony_ciAndroid's selinux policies making stat() and readlink() fail),
6540f66f451Sopenharmony_cifixed locale support in macOS (both in iconv
6550f66f451Sopenharmony_ciand in main.c), taught stat to show filesystem time on macOS,
6560f66f451Sopenharmony_cifixed a 32 bit truncation in sntp, fixed a memory access one byte outside
6570f66f451Sopenharmony_ciof its array in patch.c, removed the cpio --trailer option,
6580f66f451Sopenharmony_ciand widened the pid display fields in ps to
6590f66f451Sopenharmony_ci6 digits. Rich Felker fixed find.c assuming
6600f66f451Sopenharmony_citime_t is a long (y2038 issue on 32 bit).
6610f66f451Sopenharmony_ciGreg Kaiser fixed a thinko in get_block_device_size().
6620f66f451Sopenharmony_ciJarno Mäkipää fixed utf8 support in cut -C, and cp --parents.
6630f66f451Sopenharmony_ciDavid Legault complained that dir/.* tells rm to delete dir/.. and we'd do it.
6640f66f451Sopenharmony_ciJakeSFR pointed out a bug in file's identification of broken symlinks.
6650f66f451Sopenharmony_ciWilliam Haddon fixed cp to treat a directory with a trailing slash
6660f66f451Sopenharmony_citeh same as one without.
6670f66f451Sopenharmony_ciDenys Nykula fixed rm -i not to prompt for an empty "" argument.
6680f66f451Sopenharmony_ciSebiderSushi reported that chmod g+s wasn't working.
6690f66f451Sopenharmony_ciThe linux kernel doesn't let an O_PATH fd work with fgetxattr(), so
6700f66f451Sopenharmony_ciElliott switched <b>ls</b> to use the path-based functions now (which is racy,
6710f66f451Sopenharmony_ciit means you can stat() one inode and get the xattrs for a different one,
6720f66f451Sopenharmony_cibut nobody in kernel land seems to use xattrs much so they're not fully
6730f66f451Sopenharmony_cisupported by the API, and who's crazy enough to use xattrs for security
6740f66f451Sopenharmony_cianyway). Derick Pallas pointed out an xclearenv() bug.
6750f66f451Sopenharmony_ciAtatsulo (or possibly luolongjuna) did a lot of work on the <b>ping</b>
6760f66f451Sopenharmony_cicommand: pointed out min/range/max were out of order,
6770f66f451Sopenharmony_cithat we shouldn't print a summary unless we received at least one
6780f66f451Sopenharmony_cireply packet, and implemented ttl support.</p>
6790f66f451Sopenharmony_ci
6800f66f451Sopenharmony_ci<p><u>Build plumbing</u>:
6810f66f451Sopenharmony_ciThe "make root CROSS=all" build announces each target in the title bar, puts
6820f66f451Sopenharmony_ciits logs into root/log, and has better trap handling to stop with one
6830f66f451Sopenharmony_cictrl-c.</p>
6840f66f451Sopenharmony_ci
6850f66f451Sopenharmony_ci<p>Fixed scripts/single.sh to work when PREFIX has no trailing slash,
6860f66f451Sopenharmony_cimake silentoldconfig no longer feeds "y" to kconfig (which puts menus in a
6870f66f451Sopenharmony_ciloop) and instead just feeds in newlines to accept whatever the default is.
6880f66f451Sopenharmony_ciThe non-git version number I keep forgetting to update each release moved
6890f66f451Sopenharmony_cifrom main.c to toys.h.
6900f66f451Sopenharmony_ciFixed a couple different errors in mkflags.c (one of which caused ls --color
6910f66f451Sopenharmony_cito set all the other flags).</p>
6920f66f451Sopenharmony_ci
6930f66f451Sopenharmony_ci<p>Elliott added more macos support and tests, and added
6940f66f451Sopenharmony_cifallocate, cp, mktemp, and mv to the macOS defconfig.</p>
6950f66f451Sopenharmony_ci
6960f66f451Sopenharmony_ci<p><u>Cleanup</u>:
6970f66f451Sopenharmony_ciRob did some cleanup on xargs, ls, md5sum, and sort, tidied up main.c a bit,
6980f66f451Sopenharmony_cimade cp, base64, dmesg, and free use FLAG macros,
6990f66f451Sopenharmony_ciand switched fallocate to new style global names.
7000f66f451Sopenharmony_ciElliott Hughes switched rfkill from the old byte at a time get_line()
7010f66f451Sopenharmony_cito libc getline(), made du use FLAG() macros, and mad chattr use
7020f66f451Sopenharmony_cistandard toybox argument parsing for -v and -p.
7030f66f451Sopenharmony_ciSeveral commands (help, cp) had sub-options removed from menuconfig.
7040f66f451Sopenharmony_ciMerged realpath into readlink.c, and use xabspath() instead of libc realpath().</p>
7050f66f451Sopenharmony_ci
7060f66f451Sopenharmony_ci<p><u>Documentation</u>:
7070f66f451Sopenharmony_ciNew roadmap section about <a href=roadmap.html#packages>other packages</a>
7080f66f451Sopenharmony_cithat toybox can (eventually) replace.</p>
7090f66f451Sopenharmony_ci
7100f66f451Sopenharmony_ci<p>Update roadmap to note that posix-2008 moved to a different URL (content
7110f66f451Sopenharmony_ciat the old URL undergoes random changes), and link to the IETF RFCs.
7120f66f451Sopenharmony_cidesign.html explains more of the history of environment sizes on links
7130f66f451Sopenharmony_ciand has a #bits anchor tag.</p>
7140f66f451Sopenharmony_ci
7150f66f451Sopenharmony_ci<p>Update the <a href=design.html#bits>LP64 section</a> of design.html to
7160f66f451Sopenharmony_cifish the documents out of archive.org now that unix.org is gone,
7170f66f451Sopenharmony_ciand show the actual size table locally.</p>
7180f66f451Sopenharmony_ci
7190f66f451Sopenharmony_ci<p>Elliott improved the help of <b>date</b> and <b>chattr</b>, and
7200f66f451Sopenharmony_cimade the usage: lines in the posix directory more consistent.</p>
7210f66f451Sopenharmony_ci
7220f66f451Sopenharmony_ci<p>Shrank the sed help from 150 lines to 90-ish.</p>
7230f66f451Sopenharmony_ci
7240f66f451Sopenharmony_ci<p><u>Tests</u>:
7250f66f451Sopenharmony_ciNew "txpect" performs interactive tests, running through a sequence of
7260f66f451Sopenharmony_ciwrites to a command's stdin and reads from stdout and stderr, when failing it
7270f66f451Sopenharmony_cireports the first non-matching step. (This for example lets sh.test check
7280f66f451Sopenharmony_cithe shell line continuation logic prompts with $PS1 and $PS2 appropriately
7290f66f451Sopenharmony_ciwith various unfinished input lines, and that "echo hello; if" doesn't
7300f66f451Sopenharmony_cioutput hello before prompting for the next line of input.) Added
7310f66f451Sopenharmony_ciVERBOSE=xpect to print out each read and write successfully performed by txpect.</p>
7320f66f451Sopenharmony_ci
7330f66f451Sopenharmony_ci<p>runtest.sh only creates an "input" file when the input argument isn't empty,
7340f66f451Sopenharmony_ciEVAL doesn't supply -- (you have to provide your own if you want that).</p>
7350f66f451Sopenharmony_ci
7360f66f451Sopenharmony_ci<p>Rob added basic <b>stat</b>, <b>patch</b>, and <b>tee</b> tests.
7370f66f451Sopenharmony_ciJarno added a bunch of <b>vi</b> tests.
7380f66f451Sopenharmony_ciElliott fixed tests for <b>ifconfig</b>, <b>lsattr</b>, <b>chattr</b>,
7390f66f451Sopenharmony_ciand <b>date</b>, added tests for find, id, xargs, and made
7400f66f451Sopenharmony_cithe id, iconv, env, file, printf and cat tests work on macOS (and skipped
7410f66f451Sopenharmony_cithe du tests there). Rob cleaned up chmod tests.</p>
7420f66f451Sopenharmony_ci
7430f66f451Sopenharmony_ci<p><u>Sheer pedantry</u>:
7440f66f451Sopenharmony_citrue and false now have usage: lines (which you have to "help false" to see
7450f66f451Sopenharmony_cibecause they (intentionally!) don't support --help.
7460f66f451Sopenharmony_ciRenamed get_chunk()/dump_chunk() to read_chunk()/write_chunk() in tail.c
7470f66f451Sopenharmony_ciElliott fixed some typos.</p>
7480f66f451Sopenharmony_ci
7490f66f451Sopenharmony_ci<a name="18-10-2019" /><a href="#18-10-2019"><hr><h2><b>October 18, 2019</b></h2></a>
7500f66f451Sopenharmony_ci<blockquote>
7510f66f451Sopenharmony_ci<p>"In those days spirits were brave, the stakes were high, men were real
7520f66f451Sopenharmony_cimen, women were real women and small furry creatures from Alpha Centauri
7530f66f451Sopenharmony_ciwere real small furry creatures from Alpha Centauri."
7540f66f451Sopenharmony_ci</p> <p>- The Hitchhiker's Guide to the Galaxy</p>
7550f66f451Sopenharmony_ci</blockquote>
7560f66f451Sopenharmony_ci
7570f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.8.2.tar.gz>Toybox 0.8.2</a>
7580f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.8.2>git commit</a>)
7590f66f451Sopenharmony_ciis finally out (only two months late).</p>
7600f66f451Sopenharmony_ci
7610f66f451Sopenharmony_ci<p>The new commands this time are minor variants of existing ones
7620f66f451Sopenharmony_ci(<b>dnsdomainname</b> is hostname -d, <b>arch</b> is uname -m), but about
7630f66f451Sopenharmony_ci1/3 of toysh got implemented in pending, <a href=https://github.com/landley/mkroot>mkroot</a> got merged as a "make root" target (see Build),
7640f66f451Sopenharmony_ciand Android's <a href=http://lists.landley.net/pipermail/toybox-landley.net/2019-August/010845.html>hermetic build</a>
7650f66f451Sopenharmony_ciwork continued resulting in a lot of fixes.</p>
7660f66f451Sopenharmony_ci
7670f66f451Sopenharmony_ci<p>The android-specific <b>getprop</b>, <b>setprop</b>, <b>start</b>, and <b>stop</b>
7680f66f451Sopenharmony_cicommands were removed from toybox because they grew dependencies on android
7690f66f451Sopenharmony_cilibraries, and since toybox tries to avoid mandatory external dependencies
7700f66f451Sopenharmony_cithey moved to another package.</p>
7710f66f451Sopenharmony_ci
7720f66f451Sopenharmony_ci<p><u>Build</u>:
7730f66f451Sopenharmony_ciThe new "make root" target builds a simple toybox root filesystem,
7740f66f451Sopenharmony_ciusing scripts/mkroot.sh which is a stripped
7750f66f451Sopenharmony_cidown version of the external <a href=https://github.com/landley/mkroot>mkroot</a>
7760f66f451Sopenharmony_ciproject merged into toybox. (Alas, at the moment it wants sh and route out
7770f66f451Sopenharmony_ciof pending, which aren't quite load bearing yet.)</p>
7780f66f451Sopenharmony_ci
7790f66f451Sopenharmony_ci<p>The new "scripts/mcm-buildall.sh" convenience script builds cross
7800f66f451Sopenharmony_cicompilers based on gcc+musl multiple targets (arm, x86, mips, m68k, s390,
7810f66f451Sopenharmony_cimicroblaze...)
7820f66f451Sopenharmony_ciusing <a href=https://github.com/richfelker/musl-cross-make>musl-cross-make</a>,
7830f66f451Sopenharmony_ciand a new scripts/cross.sh to easily cross compile for one or more targets
7840f66f451Sopenharmony_ciusing the resulting compilers. (This works with "make root", "make
7850f66f451Sopenharmony_citoybox", and other builds understanding the CROSS_COMPILE environment variable.)</p>
7860f66f451Sopenharmony_ci
7870f66f451Sopenharmony_ci<p>Setting the environment variable ASAN=1 enables the
7880f66f451Sopenharmony_cillvm address sanitizer. (You may need to
7890f66f451Sopenharmony_ciexport ASAN_SYMBOLIZER_PATH on debian to use it, they add the version number to
7900f66f451Sopenharmony_cithe filename in /usr/bin which confuses llvm.)</p>
7910f66f451Sopenharmony_ci
7920f66f451Sopenharmony_ci<p>Patrick Oppenlander fixed make -j (our make is a wrapper around
7930f66f451Sopenharmony_ciscripts/make.sh which was already doing a parallel build, but if you called
7940f66f451Sopenharmony_cimake with -j it wouldn't wait for make.sh to finish and the build broke).</b>
7950f66f451Sopenharmony_ci
7960f66f451Sopenharmony_ci<p>Lots of fixes for the MacOS build.</p>
7970f66f451Sopenharmony_ci
7980f66f451Sopenharmony_ci<p><u>New options</u>:
7990f66f451Sopenharmony_ciWe upgraded <b>tar</b> to extract some older tarballs, <b>file</b> added -b and -s
8000f66f451Sopenharmony_cioptions and can also recognize older tarballs,
8010f66f451Sopenharmony_cisome xz archives, .otf fonts, perf/simpleperf data files,
8020f66f451Sopenharmony_ciandroid boot images, and dtb files. Upgraded <b>file</b> to show the device type
8030f66f451Sopenharmony_cifor block and char devices, the target for symlinks, and it says _why_ it can't
8040f66f451Sopenharmony_ciopen a file.</p>
8050f66f451Sopenharmony_ci
8060f66f451Sopenharmony_ci<p>Several commands ignore some options rather than erroring on them:
8070f66f451Sopenharmony_ci<b>patch</b> ignores the -f -g# and --no-backup-if-mismatch options
8080f66f451Sopenharmony_ci(all of which we were already doing by default anyway), and <b>xargs</b>
8090f66f451Sopenharmony_ciignores -P# (which requests parallel execution, maybe add it later but
8100f66f451Sopenharmony_cisingle threading works), and Denys Nykula made <b>wget</b> ignore
8110f66f451Sopenharmony_ci--no-check-ceritificate and <b>gzip</b> ignore -n (again, we weren't doing
8120f66f451Sopenharmony_cieither anyway) to satisfy pkgsrc.</p>
8130f66f451Sopenharmony_ci
8140f66f451Sopenharmony_ci<p>William Haddon taught <b>diff</b> and <b>patch</b> to support special characters in path
8150f66f451Sopenharmony_cinames (via quoting) and more timestamp formats.
8160f66f451Sopenharmony_ciEric Molitor implemented <b>nl</b> -v (with negative and zero starting values),
8170f66f451Sopenharmony_ciand fixed a MacOS compatibility issue in the build scripts.
8180f66f451Sopenharmony_ciTom Cherry added <b>netcat</b> -U (UNIX domain socket support).
8190f66f451Sopenharmony_ciDenys Nykula taught <b>wget</b> to call ftpget for ftp:// URLs.
8200f66f451Sopenharmony_ciEthan Sommer added ln -t and rmdir --ignore-fail-on-non-empty.
8210f66f451Sopenharmony_ciElliott Hughes added <b>grep</b> -R, <b>killall</b> -w, tar --mode,
8220f66f451Sopenharmony_ci fixed <b>ls</b> -Z and spacing in -lZ and --full-time,
8230f66f451Sopenharmony_ciadded <b>xargs</b> --max-args and removed xargs -I (which we never actually
8240f66f451Sopenharmony_cisupported) and tweaked the size calculation to more closely match other
8250f66f451Sopenharmony_civersions,
8260f66f451Sopenharmony_ciadded xargs -o and made -p read from /dev/tty, added <b>blkid</b> -s, SEC_TYPE for ext3,
8270f66f451Sopenharmony_cimsdos, and ntfs, f2fs and ntfs LABEL, fixed vfat/ntfs UUID, and switched
8280f66f451Sopenharmony_cithe endianness for UUID of msdos/ntfs/vfat, simplified the octal mode
8290f66f451Sopenharmony_cidisplay in <b>lsof</b>, added <b>pidof</b> -x (thus making the default behavior _not_
8300f66f451Sopenharmony_cibe -x).</p>
8310f66f451Sopenharmony_ci
8320f66f451Sopenharmony_ci<p>When readdir() succeeds but stat() fails, <b>ls</b> now prints "??? ? ? filename"
8330f66f451Sopenharmony_cientries instead of "cannot access" errors. (Still trying to make ls / on
8340f66f451Sopenharmony_ciandroid work more gracefully with the SELinux weirdness they added in 9.)</p>
8350f66f451Sopenharmony_ci
8360f66f451Sopenharmony_ci<p>Added %C to <b>stat</b> and made it show device type in its default output,
8370f66f451Sopenharmony_ci<b>cmp</b> now works
8380f66f451Sopenharmony_ciwith 1 argument (implicit - as second argument reading from stdin).
8390f66f451Sopenharmony_ci<b>sed</b> added exit codes to the q command (q123), added Q, and fixed a
8400f66f451Sopenharmony_cibad error message with "!".
8410f66f451Sopenharmony_ciRemoved TAIL_SEEK config option (it just always does that now),
8420f66f451Sopenharmony_ci<b>find</b> grew several new options (%Z, -true, -false, and -newerXY), <b>ln</b> added -T.
8430f66f451Sopenharmony_ciThe argument to <b>mktmp</b> --tmpdir is now optional.</p>
8440f66f451Sopenharmony_ci
8450f66f451Sopenharmony_ci<p><u>Bugfixes</u>:
8460f66f451Sopenharmony_ciThe unshare probe bit-rotted so it was impossible to build <b>unshare</b>
8470f66f451Sopenharmony_ciand <b>nsenter</b> on some distros.
8480f66f451Sopenharmony_ciCommit 771e94e2a08 broke toybox's ability to say "unknown command" when
8490f66f451Sopenharmony_ciyou pointed a symlink at it that it that didn't correspond to a command,
8500f66f451Sopenharmony_cipointing a symlink at another symlink
8510f66f451Sopenharmony_cito make toybox run a command under a name it doesn't recognize
8520f66f451Sopenharmony_ci(ln -s toybox sh; ln -s sh ash) had an off by one error,
8530f66f451Sopenharmony_ci<b>ifconfig</b> no longer error_exits if the "read mac address" ioctl fails (Android N
8540f66f451Sopenharmony_ciand later block that for non-root users to prevent device tracking).
8550f66f451Sopenharmony_ciWhen the libcrypto library was disabled, md5sum was building commands it
8560f66f451Sopenharmony_cihasn't got built-in support for yet (like sha3sum) which acted like redundant
8570f66f451Sopenharmony_cicopies of md5sum,
8580f66f451Sopenharmony_ci<b>tar</b> wasn't correctly reading or writing sparse files with a hole at
8590f66f451Sopenharmony_cithe end, and tar tzf blah.tar.xz was calling xz when it meant xzcat,
8600f66f451Sopenharmony_ci<b>xargs</b> would spuriously fail on large memory systems (due to a missing
8610f66f451Sopenharmony_ci"unsigned" in a typecast),
8620f66f451Sopenharmony_ci<b>basename</b> can now remove suffixes starting with a dash,
8630f66f451Sopenharmony_ci<b>cp</b> -r unlinks() an existing symlink before trying to
8640f66f451Sopenharmony_cirecreate the symlink (otherwise cp -r into an existing directory will
8650f66f451Sopenharmony_citry to follow the existing symlink and create another symlink at its
8660f66f451Sopenharmony_cidestination, failing if a file already exists there, which
8670f66f451Sopenharmony_ciwas confusing gentoo's package manager), <b>timeout</b> now produces the
8680f66f451Sopenharmony_ciright exit code when the timed command intercepts the exit signal,
8690f66f451Sopenharmony_ciand <b>hostname</b> -d no longer segfaults on machines with no domain name.</p>
8700f66f451Sopenharmony_ci
8710f66f451Sopenharmony_ci<p>Denys Nykula fixed the <b>ftpget</b> freeze (it was sending REST instead
8720f66f451Sopenharmony_ciof RETR), made <b>mv</b> work with a trailing slash in the source,
8730f66f451Sopenharmony_cifixed a <b>find</b> segfault,
8740f66f451Sopenharmony_ciand made <b>env</b> always exec rather than recursing to a builtin
8750f66f451Sopenharmony_ci(on the theory #!/usr/bin/env is expected to search the $PATH).</p>
8760f66f451Sopenharmony_ci
8770f66f451Sopenharmony_ci<p>Elliott improved <b>killall</b>'s handling of long filenames, made <b>kill</b> work
8780f66f451Sopenharmony_ciwhen killall5 is disabled (missing FORCE_FLAGS), fixed error reporting in
8790f66f451Sopenharmony_ci<b>hostname</b>, fixed several things in <b>xargs</b>,
8800f66f451Sopenharmony_cimade <b>printf</b> \c and \0 octal escapes work, fixed a <b>find</b> -name corner
8810f66f451Sopenharmony_cicase (find src/*.c -name file.c) and find dangling symlink behavior,
8820f66f451Sopenharmony_cimade some <b>rm</b> error messages consistent, fixed \x behavior in echo and
8830f66f451Sopenharmony_ciprintf, fixed linestack.c's buffer length for utf8 U+XXXX escape printing,
8840f66f451Sopenharmony_cifixed a race in <b>losetup</b>, fixed <b>grep</b> -F with multiple matches on the same
8850f66f451Sopenharmony_ciline and an -I failure in the existing grep tests, made <b>readlink</b> notice
8860f66f451Sopenharmony_ciwhen it has more than one argument, and made various
8870f66f451Sopenharmony_cifixes to <b>modinfo</b>.</p>
8880f66f451Sopenharmony_ci
8890f66f451Sopenharmony_ci<p>Ethan Sommer reported that <b>stat</b> of an suid/sticky file output 5 digits of
8900f66f451Sopenharmony_cioctal stat date instead of 4.
8910f66f451Sopenharmony_ciRob fixed an unaligned access in <b>grep</b>. Alessio Balsini removed an incorrect
8920f66f451Sopenharmony_cinull termination in <b>losetup</b>.
8930f66f451Sopenharmony_ciJarno Mäkipää fixed <b>hexedit</b>
8940f66f451Sopenharmony_ciscrolling up and down on older terminals, and fixed <b>ls</b> segfaulting with a broken
8950f66f451Sopenharmony_ci(non-UTF8) locale (didn't expect wcrtomb to return -1).
8960f66f451Sopenharmony_ciAndrew Ilijic made ls put 2 spaces between columns like other implementations
8970f66f451Sopenharmony_ci(which helps when terminals get confused and apply UTF8 combining characters
8980f66f451Sopenharmony_cito the space after a filename).
8990f66f451Sopenharmony_ci</p>
9000f66f451Sopenharmony_ci
9010f66f451Sopenharmony_ci<p><u>Library</u>:
9020f66f451Sopenharmony_ciAdded dlist_lpop() to use a dlist as a stack (it removes the last entry
9030f66f451Sopenharmony_ciinstead of the first), and dlist_pop() now works on a dlist_terminate()d list.
9040f66f451Sopenharmony_ciDIRTREE_STATLESS returns entries we couldn't stat() (with a zeroed ->st
9050f66f451Sopenharmony_cifield, and ->again |= 2), but filling in the file type from readdir().
9060f66f451Sopenharmony_ciCoversions between signal names and numbers now include all the Linux signals,
9070f66f451Sopenharmony_cinot just posix ones. The functions sig_to_num() and num_to_sig() moved into
9080f66f451Sopenharmony_cilib/portability.h, because MacOS has different signals.
9090f66f451Sopenharmony_ciTOYFLAG_MAYFORK allows commands to run in toysh's process without forking,
9100f66f451Sopenharmony_cibut also makes them accessable from the toybox multiplexer or standalone.
9110f66f451Sopenharmony_ciA MAYFORK command has to clean up after itself (even in error paths) and
9120f66f451Sopenharmony_cican't discard anything we need to keep (such as closing stdout).</p>
9130f66f451Sopenharmony_ci
9140f66f451Sopenharmony_ci<p>Elliott did a big xbind/xconnect cleanup (adding xbindany and xconnectany),
9150f66f451Sopenharmony_citaught xregcomp that an empty regex matches the whole line
9160f66f451Sopenharmony_ci(because FreeBSD, and thus MacOS, doesn't already do that), and
9170f66f451Sopenharmony_cireplaced several uses of get_line() (which does single byte reads)
9180f66f451Sopenharmony_ciwith getline() (which doesn't).</p>
9190f66f451Sopenharmony_ci
9200f66f451Sopenharmony_ci<p><u>Plumbing</u>:
9210f66f451Sopenharmony_ci"make clean" doesn't produce a screenful of unnecessary output now,
9220f66f451Sopenharmony_cirm, ln, cp, kill, and netcat use the FLAG() macros now, makedevs uses the new
9230f66f451Sopenharmony_ciGLOBALS naming format, timeout now uses xwaitpid(), and we fixed an
9240f66f451Sopenharmony_cioff by one error in xwaitpid().</p>
9250f66f451Sopenharmony_ci
9260f66f451Sopenharmony_ci<p>Elliott removed a workaround for old NDK versions from getconf and
9270f66f451Sopenharmony_cimoved sort off of get_rawline() (which let us remove it).
9280f66f451Sopenharmony_ciRob undid some loop unrolling in md5sum/sha1sum (we have libcrypto if you want
9290f66f451Sopenharmony_cian assembly optimized version instead of an understandable version).</p>
9300f66f451Sopenharmony_ci
9310f66f451Sopenharmony_ci<p>Android ndk-r20 doesn't define the __ANDROID_NDK__ symbol, so we switched
9320f66f451Sopenharmony_cito using clang's __has_include() (which is an undefined macro and thus a NOP
9330f66f451Sopenharmony_ciresolving to false on gcc).</p>
9340f66f451Sopenharmony_ci
9350f66f451Sopenharmony_ci<p><u>Pending</u>:
9360f66f451Sopenharmony_ciRob did a lot of work on toysh: continuation support works (it knows when to ask
9370f66f451Sopenharmony_cifor another line of text and when to run what it's got), as do
9380f66f451Sopenharmony_cinested if/else/elif statements, and while and for loops (supporting "for i"
9390f66f451Sopenharmony_ciand "for i in", but not for ((;;)) yet).
9400f66f451Sopenharmony_ciIt parses pipes and redirections but doesn't perform them yet.
9410f66f451Sopenharmony_ciThe next big todo chunk is environment variable resolution.
9420f66f451Sopenharmony_ci</p>
9430f66f451Sopenharmony_ci
9440f66f451Sopenharmony_ci<p>Gavin Howard fixed some bugs in bc, such as not returning error when raising
9450f66f451Sopenharmony_cizero to a negative power.
9460f66f451Sopenharmony_ciJarno Mäkipää continues to extend vi, adding yank and push, support for tabs,
9470f66f451Sopenharmony_cirewriting delete, changing the drawing code, etc. Elliott also added several
9480f66f451Sopenharmony_cifixes and features to vi,
9490f66f451Sopenharmony_cifixed host to cope with large DNS responses, switched crontab to
9500f66f451Sopenharmony_ciuse getline(), did work on man, fixed fixed several things in dd,
9510f66f451Sopenharmony_ciimplemented diff --strip-trailing-cr and made diff not need /tmp.
9520f66f451Sopenharmony_ciMike Bennett added extended attribute support to ip.c's route change.</p>
9530f66f451Sopenharmony_ci
9540f66f451Sopenharmony_ci<p><u>Test suite</u>: The killall and pgrep tests were having occasional
9550f66f451Sopenharmony_cispurious failures due to a race condition (the test script would fork()
9560f66f451Sopenharmony_cito call sleep and for just a moment there were two instances of the test
9570f66f451Sopenharmony_ciscript, reporting an extra process if killall or pgrep ran then).
9580f66f451Sopenharmony_ci
9590f66f451Sopenharmony_ci<p>Elliott Hughes did a lot of work on the test suite: add kill -l tests,
9600f66f451Sopenharmony_cimake losetup.test notice (and skip) if loopback
9610f66f451Sopenharmony_cidevices area already in use, blkid.test can TEST_HOST e2fsprogs blkid now,
9620f66f451Sopenharmony_cimodinfo.test notices (and skips) if there's no /proc/modules or modules
9630f66f451Sopenharmony_cidirectory, ifconfig.test skips if "dummy0 up" fails and disabled the
9640f66f451Sopenharmony_cipointtopoint tests entirely (the kernel never supported it?),
9650f66f451Sopenharmony_citruncate.test is less
9660f66f451Sopenharmony_ciconfused by SELinux, hostname.test can run some tests as non-root,
9670f66f451Sopenharmony_ciaddressed a race condition in killall.test on slow systems,
9680f66f451Sopenharmony_cimade chgrp.test, chown.test, and tar.test handle an empty /etc/passwd or /etc/group
9690f66f451Sopenharmony_ci(we were checking whether they were _there_ but some android devics have
9700f66f451Sopenharmony_ciempty ones),
9710f66f451Sopenharmony_cifixed a couple things in env.test, extended killall.test to explicitly cover
9720f66f451Sopenharmony_cilong and short names (and not assume the shell is /bin/sh), taught split.test not to rely on bash process substitution,
9730f66f451Sopenharmony_ciadded missing TZ=utc to touch.test,  fixed cp.test to pass for root
9740f66f451Sopenharmony_cior with a restrictive umask, and fixed the FAILCOUNT arithmetic to use more portable
9750f66f451Sopenharmony_ci$(()). Elliott also made some tests more flexible (find.test can handle any
9760f66f451Sopenharmony_cierror message about symlink loops, etc), and disabled others (such as du)
9770f66f451Sopenharmony_ciwhen SELinux is enabled.</p>
9780f66f451Sopenharmony_ci
9790f66f451Sopenharmony_ci<p>Rob taught testcmd not to use the shell builtin for TEST_HOST unless there
9800f66f451Sopenharmony_ciisn't one in the $PATH, work if $PWD has a space in it,
9810f66f451Sopenharmony_ciand make kill.test stop testing the shell builtin
9820f66f451Sopenharmony_ciinsead of the command, quieted tests that were producing output
9830f66f451Sopenharmony_ciother than their PASS/FAIL line, and made NOSPACE tests ignore the
9840f66f451Sopenharmony_cipresence/absence of leading/trailing whitespace as well as differences
9850f66f451Sopenharmony_ciin the amount of space.</p>
9860f66f451Sopenharmony_ci
9870f66f451Sopenharmony_ci<p><u>Documentation</u>:
9880f66f451Sopenharmony_ciThe <a href=roadmap.html>roadmap</a> got freshened up a bit, with updates
9890f66f451Sopenharmony_cifor android from Elliott.
9900f66f451Sopenharmony_ciIn <a href=design.html>the design page</a> the Features section starts with
9910f66f451Sopenharmony_ci4 new paragraphs about the scope of toybox, and a new License section talks
9920f66f451Sopenharmony_ciabout 0BSD.
9930f66f451Sopenharmony_ciThe "./toybox --help" output now explains how to do install_flat by hand.</p>
9940f66f451Sopenharmony_ci
9950f66f451Sopenharmony_ci<p><u>Sheer pedantry</u>:
9960f66f451Sopenharmony_ciElliott fixed a double close in loopfiles_lines() so strace doesn't
9970f66f451Sopenharmony_cihave an EBADF in it, and added a missing "static" in lib/net.c.</p>
9980f66f451Sopenharmony_ci
9990f66f451Sopenharmony_ci<a name="21-05-2019" /><a href="#21-05-2019"><hr><h2><b>May 21, 2019</b></h2></a>
10000f66f451Sopenharmony_ci<blockquote>
10010f66f451Sopenharmony_ci<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>
10020f66f451Sopenharmony_ci</blockquote>
10030f66f451Sopenharmony_ci
10040f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.8.1.tar.gz>Toybox 0.8.1</a>
10050f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.8.1>git commit</a>)
10060f66f451Sopenharmony_ciis out.</p>
10070f66f451Sopenharmony_ci
10080f66f451Sopenharmony_ci<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>
10090f66f451Sopenharmony_ci(meaning Android is building under toybox, which is halfway to Android
10100f66f451Sopenharmony_cibuilding 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>
10110f66f451Sopenharmony_ci
10120f66f451Sopenharmony_ci<p><u>New commands</u>: Isaac Dunham added <b>mcookie</b>, which is used by
10130f66f451Sopenharmony_ciX11. Elliott Hughes added <b>devmem</b>, which replaces toolbox's "r".</p>
10140f66f451Sopenharmony_ci
10150f66f451Sopenharmony_ci<p><u>Promoted</u>: <b>tar</b>, <b>gunzip</b>, and <b>zcat</b> were cleaned
10160f66f451Sopenharmony_ciup and moved out of pending.
10170f66f451Sopenharmony_ciTar is a near-rewrite with support for --owner --group and --sparse,
10180f66f451Sopenharmony_cicapable of autodetecting "wget blah.tar.bz2 -O - | tar xv", a --restrict option
10190f66f451Sopenharmony_cithat only allows files to extract into a single subdirectory, and so on.</p>
10200f66f451Sopenharmony_ci
10210f66f451Sopenharmony_ci<p><u>Added to pending</u>:
10220f66f451Sopenharmony_ciJarno Mäkipää contributed a new <b>vi</b> implementation. Makepost added
10230f66f451Sopenharmony_ci<b>man</b>.</p>
10240f66f451Sopenharmony_ci
10250f66f451Sopenharmony_ci<p><u>Updates</u>: Elliott added <b>find</b> -wholename/-iwholename, -printf,
10260f66f451Sopenharmony_ciand -context, <b>grep</b> --exclude-dir, and <b>echo</b> -E.
10270f66f451Sopenharmony_ciRob added <b>blkid</b> -U and -L, <b>mount</b> now has UUID= support via blkid -U,
10280f66f451Sopenharmony_ciyou can now specify TZ="blah" in the <b>date</b> -d input string (although
10290f66f451Sopenharmony_ciwhy the double quotes are required is an open question), and <b>sed</b> now
10300f66f451Sopenharmony_ciunderstands ,+N relative ranges. Makepost added <b>rm</b> -v.
10310f66f451Sopenharmony_ciThe human_readable fields in <b>ps</b>/<b>top</b>/<b>iotop</b> now use all
10320f66f451Sopenharmony_ciavailable space to show more precision, <b>iotop</b> displays swap bandwidth
10330f66f451Sopenharmony_ciproperly (it was showing a signed field as unsigned), and
10340f66f451Sopenharmony_ci<b>touch</b> -t and -d autodetect the time format.</p>
10350f66f451Sopenharmony_ci
10360f66f451Sopenharmony_ci<p><u>Cleanups</u>: In pending Rob did some bc cleanup,
10370f66f451Sopenharmony_ciColin Davidson did some arp cleanup, 
10380f66f451Sopenharmony_ciUros Prestor fixed route argument parsing, and
10390f66f451Sopenharmony_ciin bc Daniel Rosenberg fixed bc_vec_concat()'s allocation and
10400f66f451Sopenharmony_ciGavin Howard fixed an overflow bug in bc_num_ulong().</p>
10410f66f451Sopenharmony_ci
10420f66f451Sopenharmony_ci<p>Elliott made scan_key() detect cursor keys and such with several more
10430f66f451Sopenharmony_citerminal types, made more better about directories and non-tty output,
10440f66f451Sopenharmony_cicleaned up inconsistent uses of ARRAY_LEN(), taught file
10450f66f451Sopenharmony_cito recognize a c-sky ELF machine, and fixed timezone and daylight
10460f66f451Sopenharmony_cisavings time issues in date and its tests.
10470f66f451Sopenharmony_ciRob simplified netcat and ping using new lib/net.c infrastructure.
10480f66f451Sopenharmony_ciWhen run as non-PID 1 (for a chroot) oneit's exit code now indicates
10490f66f451Sopenharmony_ciwhich signal it's exiting due to.
10500f66f451Sopenharmony_ciHadrian Węgrzynowski #defined constants for mkpathat.
10510f66f451Sopenharmony_ciDate now uses the current time for unspecified fields (instead of zeroing
10520f66f451Sopenharmony_cithem), and should set the weekday properly.
10530f66f451Sopenharmony_ciSort's -k2.3,4.5 syntax is now documented and behaves more closely to
10540f66f451Sopenharmony_ciother implementations (silly as that behavior is).
10550f66f451Sopenharmony_ciSignificant speedup to sed s/a/b/g on a megabyte long line (it was
10560f66f451Sopenharmony_ciO(n^2) and now it's quite snappy).</p>
10570f66f451Sopenharmony_ci
10580f66f451Sopenharmony_ci<p>Several cases of warning about stdout failing to write were silenced
10590f66f451Sopenharmony_cibecause things like piping the output to head means stdout is a special
10600f66f451Sopenharmony_cicase: its output is often discarded and that's fine. And xprintf()
10610f66f451Sopenharmony_ciand friends only checks stdout for errors so it can exit early ("yes | head"
10620f66f451Sopenharmony_cishould not spin endlessly) without actually flushing anything.
10630f66f451Sopenharmony_ciThere's an ongoing design debate about line buffering stdin and stdout
10640f66f451Sopenharmony_cithat'll have to be resolved next dev cycle.</p>
10650f66f451Sopenharmony_ci
10660f66f451Sopenharmony_ci<p><u>Bugs</u>:
10670f66f451Sopenharmony_ciElliott sent in a lot of fixes for building AOSP with toybox:
10680f66f451Sopenharmony_cisupport for more date formats, sed substitution of empty capture groups
10690f66f451Sopenharmony_ciand an endless loop with -EPIPE, fixed find -path/-ipath, made loggit()
10700f66f451Sopenharmony_cionly feed LOG_AUTH to syslog when we have a tty, gave grep a bunch
10710f66f451Sopenharmony_ciof --longname synonyms for short options, added getfattr --only-values,
10720f66f451Sopenharmony_ciand timeout --foreground --preserve-status and --signal.</p>
10730f66f451Sopenharmony_ci
10740f66f451Sopenharmony_ci<p>Top got a lot of tweaks: it no longer collates thread's CPU usage into the
10750f66f451Sopenharmony_ciparent thread (in -H mode), hides the cursor in interactive mode, updates the
10760f66f451Sopenharmony_cidisplay properly in batch mode, and accepts ENTER
10770f66f451Sopenharmony_cias a synonym for SPACE when refreshing the display. The header lines
10780f66f451Sopenharmony_cinow abbreviate long numbers with units (via human_readable()),
10790f66f451Sopenharmony_cimore reliably spans the terminal width, and says "Thread" instead
10800f66f451Sopenharmony_ciof "Task" when it's showing threads. The task/thread count now adds up
10810f66f451Sopenharmony_ci(understanding more kernel states and treating unknown ones as "sleeping").
10820f66f451Sopenharmony_ciTop now treats -o "" as an error (previously it displayed an empty screen).</p>
10830f66f451Sopenharmony_ci
10840f66f451Sopenharmony_ci<p>William Djupström pointed out login needs to chown() the tty, and made it
10850f66f451Sopenharmony_ciclear the environment when -p is absent.
10860f66f451Sopenharmony_ciVidar Holen fixed inverted find -exec exit status.
10870f66f451Sopenharmony_ciRob made chgrp() stop relying on libc's printf("%s", NULL) printing "(null)"
10880f66f451Sopenharmony_cibecause a <a href=https://github.com/varnishcache/varnish-cache/issues/2879>newly added gcc bug</a> turns that into a build break, and
10890f66f451Sopenharmony_cifixed an outright embarassing xstrndup() bug.
10900f66f451Sopenharmony_ciLiwugang fixed a segfault when stat's format string had a trailing %.
10910f66f451Sopenharmony_ciA missing else in grep meant -x was sometimes ignored.</p>
10920f66f451Sopenharmony_ci
10930f66f451Sopenharmony_ci<p><u>Infrastructure</u>:
10940f66f451Sopenharmony_ciin the build scripts/portability.sh now tests that the compiler it's trying
10950f66f451Sopenharmony_cito use exists up front. We no longer link against librt because on glibc that's
10960f66f451Sopenharmony_cipulling in libpthread for some unknown reason.</p>
10970f66f451Sopenharmony_ci
10980f66f451Sopenharmony_ci<p>TOYFLAG_ARGFAIL() lets commands return custom exit values when option parsing
10990f66f451Sopenharmony_cifails (because AOSP build scripts cared), so timeout --unknown returns 125
11000f66f451Sopenharmony_ciand so on: chroot, diff, cmp, env, grep, nohup, and sort also use it now with
11010f66f451Sopenharmony_civarious values.</p>
11020f66f451Sopenharmony_ci
11030f66f451Sopenharmony_ci<p>New FLAG() macros: FLAG(x) expands to (toys.optflags&FLAG_x) and returns
11040f66f451Sopenharmony_cizero if the command line argument's bit isn't set and nonzero if it is
11050f66f451Sopenharmony_ci(meaning -x was or wasn't encountered on the command line this time by
11060f66f451Sopenharmony_cilib/args.c). Lots of commands got converted to use them.</p>
11070f66f451Sopenharmony_ci
11080f66f451Sopenharmony_ci<p>New lib/env.c with reset_env(), xsetenv(), and xunsetenv() which frees
11090f66f451Sopenharmony_cithe old environment variable when it wasn't inherited from exec(). This
11100f66f451Sopenharmony_cilets long-running loops reset environment variables without memory leaks.</p>
11110f66f451Sopenharmony_ci
11120f66f451Sopenharmony_ci<p>New xnotify() plumbing in lib/portability.c with Linux and Mac versions
11130f66f451Sopenharmony_ci(which should also work on BSD).</p>
11140f66f451Sopenharmony_ci
11150f66f451Sopenharmony_ci<p>New xparsedate() and xvali_date() functions allow date, tar --mtime, and
11160f66f451Sopenharmony_citouch to understand the same date formats,
11170f66f451Sopenharmony_cixpopen_both() now knows how to use existing filehandles for the child's
11180f66f451Sopenharmony_cistdin/stdout, and no longer redirects stderr (which hides errors),
11190f66f451Sopenharmony_cinew nanomove(), nanodiff(), union socksaddr, xrecvwait(),
11200f66f451Sopenharmony_ciand human_readable_long() to show more than 3 digits of output.</p>
11210f66f451Sopenharmony_ci
11220f66f451Sopenharmony_ci<p>Taught xgetaddrinfo() to return a wildcard address for a NULL host,
11230f66f451Sopenharmony_cixconnbind() sets SO_REUSEADDR by default,
11240f66f451Sopenharmony_cifileunderdir() returns the abspath to the file now (since we had to work
11250f66f451Sopenharmony_ciit out anyway), and
11260f66f451Sopenharmony_cixabspath() uses O_PATH now (because Android's SELinux rules got more aggressive).</p>
11270f66f451Sopenharmony_ci
11280f66f451Sopenharmony_ci<p>Several new xsendfile() variants, including sendfile_len() to copy
11290f66f451Sopenharmony_cia specific amount of data and xsendfile_pad() to append zeroes to the
11300f66f451Sopenharmony_cioutput when there isn't enough input.</p>
11310f66f451Sopenharmony_ci
11320f66f451Sopenharmony_ci<p>regexec0() is now using libc's REG_STARTEND supported by every libc out
11330f66f451Sopenharmony_cithere _except_ musl. (It originated in BSD and was adopted by glibc, bionic,
11340f66f451Sopenharmony_ciand uClibc 15 years ago, and is also supported in macosx. Musl's maintainer
11350f66f451Sopenharmony_ci<a href=https://www.openwall.com/lists/musl/2013/01/15/26>turned down</a>
11360f66f451Sopenharmony_cithe feature request as an invalid use case he didn't think they should
11370f66f451Sopenharmony_cibe trying to do.)</p>
11380f66f451Sopenharmony_ci
11390f66f451Sopenharmony_ci<p><u>Docs</u>:
11400f66f451Sopenharmony_cithe <a href=license.html>license page</a> now has an SPDX identifier, and links to more
11410f66f451Sopenharmony_cihistory/context. The actual LICENSE file had its title line removed
11420f66f451Sopenharmony_ciso <a href=https://github.com/github/choosealicense.com/pull/643#issuecomment-463746027>github could recognize it</a> as 0BSD. (We're still waiting for
11430f66f451Sopenharmony_ci"<a href=https://github.com/github/choosealicense.com/pull/643#issuecomment-464380789>a while</a>" to pass before github actually does, though.)</p>
11440f66f451Sopenharmony_ci
11450f66f451Sopenharmony_ci<p>A new www/doc/mount.txt file describes how mount works under the covers.</p>
11460f66f451Sopenharmony_ci
11470f66f451Sopenharmony_ci<p>Rob consistently misspelled "canonical" and "millisecond", mountpoint
11480f66f451Sopenharmony_cihas a synopsis now,
11490f66f451Sopenharmony_ciKevin van der Kamp fixed a typo in netstat's help text, and Elliott
11500f66f451Sopenharmony_ciHughes fixed typos everywhere and made the tense, capitalization, and
11510f66f451Sopenharmony_cipunctuation of help text more consistent.</p>
11520f66f451Sopenharmony_ci
11530f66f451Sopenharmony_ci<p>New paragraph in the code style part of design.html explaining that
11540f66f451Sopenharmony_ci"char* a, b;" is not how C works, and since you wind up with "char *a, b;"
11550f66f451Sopenharmony_cianyway you might as well say that.</p>
11560f66f451Sopenharmony_ci
11570f66f451Sopenharmony_ci<p>Given dreamhost's tendency to repeatedly delete the mailing list
11580f66f451Sopenharmony_ciarchive, the nav bar on the left links to a backup web archive now too.</p>
11590f66f451Sopenharmony_ci
11600f66f451Sopenharmony_ci<p>The FAQ now says why we do time based releases.</p>
11610f66f451Sopenharmony_ci
11620f66f451Sopenharmony_ci<p><u>Testing</u>: Added VERBOSE=nopass to not show passing tests.
11630f66f451Sopenharmony_ciThe test suite now does an rm -rf on testdir between each command so
11640f66f451Sopenharmony_cidebris files don't accumulate.
11650f66f451Sopenharmony_ciNew skipnot function skips the next test if a command line fails, and
11660f66f451Sopenharmony_citoyonly function only runs command when we're testing the toybox version
11670f66f451Sopenharmony_ciof command. (This isn't the same as TEST_HOST, the host version could be
11680f66f451Sopenharmony_citoybox.)
11690f66f451Sopenharmony_ciThe find -newer test calls "sleep .1" to avoid intermittently failing with an
11700f66f451Sopenharmony_ciidentical timestamp.
11710f66f451Sopenharmony_ciElliott added the start of a file.test rogues gallery.
11720f66f451Sopenharmony_ciNo longer call lsattr in "make tests" because the behavior differs by
11730f66f451Sopenharmony_cifilesystem and it needs fixing somehow.</p>
11740f66f451Sopenharmony_ci
11750f66f451Sopenharmony_ci<a name="08-02-2019" /><a href="#08-02-2019"><hr><h2><b>February 8, 2019</b></h2></a>
11760f66f451Sopenharmony_ci<blockquote>
11770f66f451Sopenharmony_ci<p>"Most readers get as far as the Future Semiconditionally Modified
11780f66f451Sopenharmony_ciSubinverted Plagal Past Subjunctive Intentional before giving up; and
11790f66f451Sopenharmony_ciin fact in later editions of the book all pages beyond this point have
11800f66f451Sopenharmony_cibeen left blank to save on printing costs."</p>
11810f66f451Sopenharmony_ci<p>- The Hitchhiker's Guide to the Galaxy</p>
11820f66f451Sopenharmony_ci</blockquote>
11830f66f451Sopenharmony_ci
11840f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.8.0.tar.gz>Toybox 0.8.0</a>
11850f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.8.0>git commit</a>)
11860f66f451Sopenharmony_ciis out.</p>
11870f66f451Sopenharmony_ci
11880f66f451Sopenharmony_ci<p>Toybox now builds on MacOS and FreeBSD, thanks to the efforts of Elliott
11890f66f451Sopenharmony_ciHughes and Ed Maste respectively. Use the "make macos_defconfig" and "make
11900f66f451Sopenharmony_cifreebsd_defconfig" targets to enable the set of commands that compile on
11910f66f451Sopenharmony_cieach so far.</p>
11920f66f451Sopenharmony_ci
11930f66f451Sopenharmony_ci<p><u>New commands</u>: Added an <b>sntp</b> client/server (RFC 4330 Simple Network Time
11940f66f451Sopenharmony_ciProtocol, a compatible subset of ntp). The <b>test</b> command was rewritten
11950f66f451Sopenharmony_ciand promoted out of pending.</p>
11960f66f451Sopenharmony_ci
11970f66f451Sopenharmony_ci<p><u>New options</u>: <b>grep</b> now has --color, supports embedded NUL bytes in its input,
11980f66f451Sopenharmony_cirecognizes binary files, and passes all of grep.test (in case you
11990f66f451Sopenharmony_cineeded the middle numerical field of -bB, etc).
12000f66f451Sopenharmony_ciJosh Gao added ipv6 and UDP support to <b>netcat</b>.
12010f66f451Sopenharmony_ciVolodymyr Medvid reported that install -d doesn't honor -o or -g.
12020f66f451Sopenharmony_ciElliott Hughes did a lot of work to support hermetic Android/AOSP builds:
12030f66f451Sopenharmony_ci<b>mkdir</b> accepts both --parent and --parents as synonyms for -p, <b>touch</b> ignores -f,
12040f66f451Sopenharmony_ci<b>basename</b> added -s to remove a trailing suffix, <b>dirname</b> now supports multiple
12050f66f451Sopenharmony_ciarguments, <b>cmp</b> accepts --quiet and --silent as synonyms for -s, <b>hostname</b>
12060f66f451Sopenharmony_ciadded -sfd, <b>head</b> added --bytes as a synonym for -c and --lines as a synonym
12070f66f451Sopenharmony_cifor -n, <b>mktemp</b> added -t and fixed -u, <b>sed</b> added -z and -iEXT to keep backup files,
12080f66f451Sopenharmony_ci<b>md5sum</b> and sha1sum added --status and --check as synonyms -s and -c,
12090f66f451Sopenharmony_ci<b>readlink</b> added --canonicalize as a synonym for -f, <b>sort</b> grew -V,
12100f66f451Sopenharmony_ci<b>patch</b> added -s its synonym --quiet, <b>stat</b> added --format as
12110f66f451Sopenharmony_cia synonym for -c, <b>xargs</b> added -p -t -r,
12120f66f451Sopenharmony_ciEduardas Meile asked
12130f66f451Sopenharmony_cithat <b>umount</b> ignore -c. Reverend Homer added a small optimization to file.c,
12140f66f451Sopenharmony_ciand Elliott taught <b>file</b> to recognize riscv ELF binaries. Peter Collingbourne
12150f66f451Sopenharmony_citaught <b>ls</b> -t to use the nanoseconds field.
12160f66f451Sopenharmony_ci<b>patch</b> has better support for patching a file with a tab in the name.</p>
12170f66f451Sopenharmony_ci
12180f66f451Sopenharmony_ci<p><u>Bugfixes</u>:
12190f66f451Sopenharmony_ci<b>cp</b> --preserve was segfaulting when you didn't specify _what_ to
12200f66f451Sopenharmony_cipreserve (it now correctly defaults to "mot") and didn't get the permissions
12210f66f451Sopenharmony_ciright when copying a symlink's contents as a regular file,
12220f66f451Sopenharmony_ci<b>sort</b> -x didn't work when
12230f66f451Sopenharmony_ciattached to a key, <b>host</b> didn't allocate a big enough buffer for worst
12240f66f451Sopenharmony_cicase ipv6 address size, <b>sed</b> needed a ; between b and } when other
12250f66f451Sopenharmony_ciimplementations don't (we're already well past what posix says but a script
12260f66f451Sopenharmony_ciout in the field broke...),
12270f66f451Sopenharmony_ciand several fixes to <b>hostname</b> in a container, <b>ps</b>/<b>top</b> were
12280f66f451Sopenharmony_cimisreading the VIRT and SHM fields.</p>
12290f66f451Sopenharmony_ci
12300f66f451Sopenharmony_ci<p><u>Pending</u>: Gavin Howard updated <b>bc</b> and added more tests,
12310f66f451Sopenharmony_ciMarius Adaskevicius pointed out <b>mdev</b> -s should follow symlinks,
12320f66f451Sopenharmony_ciYangchun Fu reported a <b>dhcp</b> checksum bug, <b>modprobe</b> needed errno reset
12330f66f451Sopenharmony_cito avoid reporting spurious errors in verbose mode and no longer
12340f66f451Sopenharmony_ciexits with status 1 if it can't find /etc/modprobe.conf, the <b>more</b> command
12350f66f451Sopenharmony_ciwasn't always flushing stdout when it exited.</p>
12360f66f451Sopenharmony_ci
12370f66f451Sopenharmony_ci<p><u>Build</u>:
12380f66f451Sopenharmony_ci<b>chrt</b> no longer #warns about the musl sched_get_priority_min() bug, but
12390f66f451Sopenharmony_ciinstead works around it.
12400f66f451Sopenharmony_ciWe were mixing setjmp/siglongjmp (harmless in some contexts but it kind
12410f66f451Sopenharmony_ciof annoyed FreeBSD), and
12420f66f451Sopenharmony_cimake install_airlock now adds sha256sum (because the Linux 4.20 build now
12430f66f451Sopenharmony_cineeds that for the s390x target).</p>
12440f66f451Sopenharmony_ci
12450f66f451Sopenharmony_ci<p><u>Coding style</u>:
12460f66f451Sopenharmony_ciRob converted the rest of the option GLOBALS() to the new single letter
12470f66f451Sopenharmony_cicoding style, and the new FLAG(x) macro is a slightly tidier way to say
12480f66f451Sopenharmony_ci"toys.optflags&FLAG_x".
12490f66f451Sopenharmony_ciRemoved CFG_SORT_BIG (the sort command always
12500f66f451Sopenharmony_cihas the full functionality now. The general future direction or toybox
12510f66f451Sopenharmony_ciis to either have a command or not have it; multiple versions of the
12520f66f451Sopenharmony_cisame command aren't worth the complexity in testing, documentation,
12530f66f451Sopenharmony_cior system adminstration).</p>
12540f66f451Sopenharmony_ci
12550f66f451Sopenharmony_ci<p><u>Library code</u>:
12560f66f451Sopenharmony_ciThe mkflags plumbing can now support arbitrary punctuation as option
12570f66f451Sopenharmony_cinames via an escape syntax (because mkfs.vfat specifies an offset with -@),
12580f66f451Sopenharmony_ciand lib/args.c now only sets FLAGS_NODASH when the first argument
12590f66f451Sopenharmony_cididn't have a dash (allowing "ps ax" and "ps -ax" to behave differently).</p>
12600f66f451Sopenharmony_ci
12610f66f451Sopenharmony_ci<p>Added an xrename() function,
12620f66f451Sopenharmony_cixchdir() has better error reporting, xconnect()/xbind() had their
12630f66f451Sopenharmony_ciimplementations merged, xsendto() moved from ping to lib, xpoll() now
12640f66f451Sopenharmony_cimeasures elapsed time and only waits for the remaining period when restarted,
12650f66f451Sopenharmony_ciand Eduardas Meile converted several error_exit() to error_exit_raw() (because
12660f66f451Sopenharmony_ciyocto 2.6 buils with -Werror=format-security by default).</p>
12670f66f451Sopenharmony_ci
12680f66f451Sopenharmony_ci<p>There's a scripts/portability.sh now which lets the build use gsed and gmake
12690f66f451Sopenharmony_ci(when available) in more places to avoid broken host versions on MacOS and FreeBSD.
12700f66f451Sopenharmony_ciThe syntax of the "noreturn" attribute
12710f66f451Sopenharmony_cichanged slightly, some calls to strnstr() were replaced with strcasestr(),
12720f66f451Sopenharmony_ciwe work around MacOS' lack of features.h, portability.h can now do Apple's
12730f66f451Sopenharmony_ciendianness macros, and so on.</p>
12740f66f451Sopenharmony_ci
12750f66f451Sopenharmony_ci<p>Following the <a href=faq.html#support_horizon>seven year rule</a>
12760f66f451Sopenharmony_ciElliott removed support or glibc 2.10, and also
12770f66f451Sopenharmony_cireformatted a lot of --help text for consistency (removing trailing
12780f66f451Sopenharmony_ciperiods and such).</p>
12790f66f451Sopenharmony_ci
12800f66f451Sopenharmony_ci<p><u>Test suite</u>:
12810f66f451Sopenharmony_ciThe test suite now has its own version of "pending", specifically "make tests"
12820f66f451Sopenharmony_ciskips test files without the executable bit set (unless you export $TEST_ALL).
12830f66f451Sopenharmony_ciThis eliminates "expected failures" (I.E. files with unresolved todo items)
12840f66f451Sopenharmony_cifrom the global regression test. Additional tests can be added to the global
12850f66f451Sopenharmony_ciregression test with chmod +x as the todo items they document get resolved.</p>
12860f66f451Sopenharmony_ci
12870f66f451Sopenharmony_ci<p>Several places the test suite got fluffed out, including guards to skip
12880f66f451Sopenharmony_ciroot-only tests when run as a normal user. The testcmd function prints the
12890f66f451Sopenharmony_cishort name instead of the full path to the command.
12900f66f451Sopenharmony_ciThe tests for the test command
12910f66f451Sopenharmony_ci("test.test") no longer test the shell builtin but correctly test the
12920f66f451Sopenharmony_citoybox command. (Now say that ten times fast.)</p>
12930f66f451Sopenharmony_ci
12940f66f451Sopenharmony_ci<p>Bash version skew required replacing "continue" with "return" to stop
12950f66f451Sopenharmony_citests early in bash 4.4 (for VERBOSE=fail).</p>
12960f66f451Sopenharmony_ci
12970f66f451Sopenharmony_ci
12980f66f451Sopenharmony_ci<a name="31-10-2018" /><a href="#31-10-2018"><hr><h2><b>October 31, 2018</b></h2></a>
12990f66f451Sopenharmony_ci<blockquote><p>
13000f66f451Sopenharmony_ci"In the beginning the Universe was created.
13010f66f451Sopenharmony_ciThis has made a lot of people very angry and been widely regarded as a bad move."</p><p>- The Hitchhiker's Guide to the Galaxy
13020f66f451Sopenharmony_ci</p>
13030f66f451Sopenharmony_ci</blockquote>
13040f66f451Sopenharmony_ci
13050f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.7.8.tar.gz>Toybox 0.7.8</a>
13060f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.7.8>git commit</a>)
13070f66f451Sopenharmony_ciis out (a month late).</p>
13080f66f451Sopenharmony_ci
13090f66f451Sopenharmony_ci<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.
13100f66f451Sopenharmony_ciYou have to add an "llvm-cc" symlink to "clang", then use CROSS_COMPILE=llvm-
13110f66f451Sopenharmony_ciwith the appropriate $PATH (or absolute path in CROSS_COMPILE) for the
13120f66f451Sopenharmony_citarget you want to build for. (To run it on a non-android host, you probably
13130f66f451Sopenharmony_ciwant "LDFLAGS=--static" too.)</p>
13140f66f451Sopenharmony_ci
13150f66f451Sopenharmony_ci<p><u>New commands</u>: <b>i2cdetect</b>, <b>i2cdump</b>, <b>i2cget</b>, and <b>i2cset</b>
13160f66f451Sopenharmony_cicourtesy of Elliott/Android. The <b>watch</b> command got a complete (tty-aware)
13170f66f451Sopenharmony_cirewrite, and was promoted out of pending. The <b>prlimit</b> command is back
13180f66f451Sopenharmony_ci(a configuration bug was always disabling it), and <b>ascii</b> now defaults y
13190f66f451Sopenharmony_ciin defconfig (an oversight).</p>
13200f66f451Sopenharmony_ci
13210f66f451Sopenharmony_ci<p><u>New options</u>: 
13220f66f451Sopenharmony_ciThe <b>ifconfig</b> command added -S (short view) giving one line of
13230f66f451Sopenharmony_ciinformation per interface, in "name ipv4/mask macaddr [ipv6/mask@type...]"
13240f66f451Sopenharmony_ciformat. <b>grep</b> grew binary file detection, with -I and -a options to
13250f66f451Sopenharmony_ciignore them or force treating them as ascii (really utf8).
13260f66f451Sopenharmony_ciZach Van Rijn asked for <b>find -empty</b>.
13270f66f451Sopenharmony_ciIn the <b>file</b> command, Elliott improved java
13280f66f451Sopenharmony_ci.class support and added .wav, .bmp, and android .dex.
13290f66f451Sopenharmony_ciElliott also added "getconf -a" and a lot of missing getconf symbols the
13300f66f451Sopenharmony_ciAOSP build uses, including support for pathconf(3) symbols requiring two
13310f66f451Sopenharmony_ciarguments. This means getconf's arguments work more like ubuntu's
13320f66f451Sopenharmony_cinow (one or two arguments, not iterating through the supplied list and
13330f66f451Sopenharmony_ciprocessing each like last release), and -l grew section identifiers (so
13340f66f451Sopenharmony_cithe "getconf -l" output is no longer a directly consumable list of symbols
13350f66f451Sopenharmony_ciit takes).
13360f66f451Sopenharmony_ciCommand line options specifying durations (like top -d or ping -i) can
13370f66f451Sopenharmony_cinow use fractions and units, like "1.5" and ".1m". See "toybox --help" for
13380f66f451Sopenharmony_cidetails.
13390f66f451Sopenharmony_ciToybox now dereferences one layer of symlinks if it doesn't recognize the
13400f66f451Sopenharmony_ciname it's called under (so if you "ln -s $(which sleep) blah" and then
13410f66f451Sopenharmony_ci"./blah 30", it should figure out you mean sleep 30).</p>
13420f66f451Sopenharmony_ci
13430f66f451Sopenharmony_ci<p><u>Pending</u>:
13440f66f451Sopenharmony_ciGavin Howard contributed a large new <b>bc</b> implementation to pending,
13450f66f451Sopenharmony_ciwhich covers everything the kernel build needs (and more) but is going to
13460f66f451Sopenharmony_citake a while to review.
13470f66f451Sopenharmony_ciIn <b>diff</b> the android guys added --color and timestamps on the
13480f66f451Sopenharmony_ci+++/--- lines. In <b>mdev</b> Faustas Azuolas Bagdonas added support
13490f66f451Sopenharmony_cifor mdev.conf's fourth field. Reverend Homer suggested an error message
13500f66f451Sopenharmony_ciimprovement in <b>wget</b>, Kevin Spiteri did a cleanup pass on test.c,
13510f66f451Sopenharmony_ciand there was a cleanup pass on the passwd command.</p>
13520f66f451Sopenharmony_ci
13530f66f451Sopenharmony_ci<p><u>Bugfixes</u>:
13540f66f451Sopenharmony_ciElliott responded to a bug in <b>getconf</b>'s sed-based header generation by
13550f66f451Sopenharmony_cireplacing it with a more conventional array of #defined symbols, with #ifdefs
13560f66f451Sopenharmony_cifor missing symbols on the three libc implementations (glibc, bionic, musl)
13570f66f451Sopenharmony_ciwe've tested so far. (This requires portability.h work to add new supported
13580f66f451Sopenharmony_cibuild environments, but at least it works on bionic now.)
13590f66f451Sopenharmony_ciThe <b>file</b> command now fails gracefully when reading pathologically
13600f66f451Sopenharmony_cibroken ELF files (the tests for integer overflow missed one), and
13610f66f451Sopenharmony_ci<b>date</b> no longer shows a meaningless errno when it can't parse the
13620f66f451Sopenharmony_cidate format.
13630f66f451Sopenharmony_ciSeveral fixes in <b>ping</b> (-w and -W didn't work, -c kept sending packets
13640f66f451Sopenharmony_ciwhile waiting for replies, and when no reply packets were received the summary
13650f66f451Sopenharmony_cidata was printed twice).
13660f66f451Sopenharmony_ciElliott fixed <b>wc</b> column widths (traditional reality doesn't match
13670f66f451Sopenharmony_ciposix), fixed <b>modprobe</b>'s error handling (reported by Wen Xie), and
13680f66f451Sopenharmony_cialso fixed the units on blockdev --blkraget (reported by Martijn Coenen).
13690f66f451Sopenharmony_ciSeveral small fixes to the <b>stat</b> command's output (help text, quoting
13700f66f451Sopenharmony_cistyle, leading zeroes, switch -f from %t to %T), <b>oneit</b> no longer
13710f66f451Sopenharmony_cireboots the system when it's not called as PID 1.
13720f66f451Sopenharmony_ciLast release's commit letting $STRIP be redefined had a typo.
13730f66f451Sopenharmony_ciNick Kralevich added an istty() check before calling TIOCGWINSZ (which
13740f66f451Sopenharmony_citriggered Android's strict ioctl filtering on non-filesystem fifos).
13750f66f451Sopenharmony_ciAn unstripped build (where the "strip" command fails for a given
13760f66f451Sopenharmony_ciCROSS_COMPILE) will now overwrite the (read-only) output file instead of
13770f66f451Sopenharmony_cifailing a rebuild. The dirtree plumbing no longer prints a "No" on front
13780f66f451Sopenharmony_ciof the filename in error messages (such as "permission denied").</p>
13790f66f451Sopenharmony_ci
13800f66f451Sopenharmony_ci<p><u>Docmentation</u>
13810f66f451Sopenharmony_ciElliott updated the roadmap with Android AOSP status, towards turning that
13820f66f451Sopenharmony_ciinto a hermetic build (hopefully with an eventual self-hosting option, work
13830f66f451Sopenharmony_ciis <a href=b33d37d6f735>already underway</a> on the airlock step).
13840f66f451Sopenharmony_ciRob added a little more context for LSB and described the move from Aboriginal
13850f66f451Sopenharmony_ciLinux to mkroot.
13860f66f451Sopenharmony_ciThe <b>ps</b> help text changed: now "ps -o help" shows the fields and the normal
13870f66f451Sopenharmony_ci--help is much more manageable. Ifconfig's --help text also got tidied up.
13880f66f451Sopenharmony_ciOur LICENSE file has the SPDX identifier (0BSD) now, and the note about
13890f66f451Sopenharmony_cithe kconfig/ subdirectory still having (build only, non-shipping) GPL code
13900f66f451Sopenharmony_ciin it moved into the kconfig subdirectory.</p>
13910f66f451Sopenharmony_ci
13920f66f451Sopenharmony_ci<p><u>Coding style change:</u>
13930f66f451Sopenharmony_ciGLOBALS() now uses the argument letter as the variable
13940f66f451Sopenharmony_ciname for variables automatically set by command line arguments via lib/args.c,
13950f66f451Sopenharmony_ciand no longer requires they be one per line.
13960f66f451Sopenharmony_ciRemoved use of the gcc
13970f66f451Sopenharmony_ci\e extension in string constants, replacing it with \033.</p>
13980f66f451Sopenharmony_ci
13990f66f451Sopenharmony_ci<p><u>Library code:</u>
14000f66f451Sopenharmony_cilib/interestingtimes.c was renamed to lib/tty.c.
14010f66f451Sopenharmony_ciThe deflate code from toys/pending/compress.c moved to lib/deflate.c,
14020f66f451Sopenharmony_ciwhich gunzip.c now uses when it's not configured to use zlib. (This reduces
14030f66f451Sopenharmony_cithe bootstrap dependencies for the "airlock" step of a hermetic build.)
14040f66f451Sopenharmony_ciThe compression side remains a todo item.
14050f66f451Sopenharmony_ciAdded "%" to lib/args.c reading seconds (including fractions/units) into a
14060f66f451Sopenharmony_cilong milliseconds argument. Redid xparsetime() to not need floating point,
14070f66f451Sopenharmony_ciadded xparsemillitime() for milliseconds common case, and
14080f66f451Sopenharmony_ciparsetime() now treats leading garbage as an error instead of returning zero.
14090f66f451Sopenharmony_ciThe bufgetpwuid()/pufgetgrgid() functons can now handle more than 4k of group
14100f66f451Sopenharmony_cidata. The set_terminal() function can now set serial speed, and microcom.c
14110f66f451Sopenharmony_ciuses it. Added xsignal_flags(), and more consistently use xsignal() (which wraps
14120f66f451Sopenharmony_cisigaction()) instead of signal().
14130f66f451Sopenharmony_ciA new xgetrandom() function calls the new getrandom() system call, falling
14140f66f451Sopenharmony_ciback to /dev/urandom on older kernel/libc (made to actually _work_ by
14150f66f451Sopenharmony_ciPatrick Oppenlander).</p>
14160f66f451Sopenharmony_ci
14170f66f451Sopenharmony_ci<p><u>Build infrastructure:</u>
14180f66f451Sopenharmony_ciUpdated dependency detection so "make distclean defconfig toybox" now works
14190f66f451Sopenharmony_ciall on the same command line. (This is nice when $CROSS_COMPILE changes).
14200f66f451Sopenharmony_ciscripts/config2help.c no longer includes parts of lib/ and just copies what
14210f66f451Sopenharmony_ciit needs into itself, improving build portability.
14220f66f451Sopenharmony_ciThe build now checks the specified cross compiler exists, hopefully providing
14230f66f451Sopenharmony_cia more informative error message when it doesn't. Similarly, when .config is
14240f66f451Sopenharmony_cimissing the error message suggests running make defconfig.</p>
14250f66f451Sopenharmony_ci
14260f66f451Sopenharmony_ci<a name="23-06-2018" /><a href="#23-06-2018"><hr><h2><b>June 23, 2018</b></h2></a>
14270f66f451Sopenharmony_ci<blockquote>
14280f66f451Sopenharmony_ci<p>There is a theory which states that if ever anyone discovers exactly what
14290f66f451Sopenharmony_cithe Universe is for and why it is here, it will instantly disappear and be
14300f66f451Sopenharmony_cireplaced by something even more bizarre and inexplicable. There is another
14310f66f451Sopenharmony_citheory which states that this has already happened.</p>
14320f66f451Sopenharmony_ci<p> - The Hitchhiker's Guide to the Galaxy</p>
14330f66f451Sopenharmony_ci</blockquote>
14340f66f451Sopenharmony_ci
14350f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.7.7.tar.gz>Toybox 0.7.7</a>
14360f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.7.7>git commit</a>)
14370f66f451Sopenharmony_ciis out.</p>
14380f66f451Sopenharmony_ci
14390f66f451Sopenharmony_ci<p><u>New commands</u>: Rob Landley added <b>getconf</b>, Elliott Hughes added
14400f66f451Sopenharmony_ci<b>uuidgen</b>, and <b>ping</b> and <b>fmt</b> were promoted out of pending.</p>
14410f66f451Sopenharmony_ci
14420f66f451Sopenharmony_ci<p><u>New options</u>: The <b>cp</b> command added the --parents option,
14430f66f451Sopenharmony_ci<b>readlink</b> now has -m to show where a missing path would be,
14440f66f451Sopenharmony_ci<b>netstat</b> got some updates (better nommu support, it can use /etc/services
14450f66f451Sopenharmony_cinames, more command line options are bounds checked),
14460f66f451Sopenharmony_ciNg Zhi An added --getra and --setra (get/set readahead) to <b>blockdev</b>,
14470f66f451Sopenharmony_ciElliott Hughes added <b>xxd</b> -o and made <b>top</b> -d understand fractional
14480f66f451Sopenharmony_cisections (because the Linux Test Project uses that), and
14490f66f451Sopenharmony_ciMinghui Liu added <b>watch</b> -b.</p>
14500f66f451Sopenharmony_ci
14510f66f451Sopenharmony_ci<p><u>Bugfixes</u>: Several fixes to <b>vmstat</b>: Elliott Hughes made it work on a
14520f66f451Sopenharmony_ci48-core machine
14530f66f451Sopenharmony_ciand fixed a glitch with -n, Haroon Maqsood pointed out "vmstat 1 1" didn't
14540f66f451Sopenharmony_cistop and "vmstat -n" didn't print the first theader line.
14550f66f451Sopenharmony_ciMinghui Liu fixed a bug where <b>cp</b> -p didn't preserve
14560f66f451Sopenharmony_citimestamps, and pointed out the b, c, and d suffixes on numbers weren't
14570f66f451Sopenharmony_ciworking. Ryan Pritchard pointed out that <b>du</b> -d0 should act like du -s.
14580f66f451Sopenharmony_ciFilip Perich made an RFC2347 OACK compliance fix to <b>tftp</b> in pending.
14590f66f451Sopenharmony_ciZach van Rijn fixed a bug in <b>xxd</b> causing incorrect translation of
14600f66f451Sopenharmony_ciuppercase characters.
14610f66f451Sopenharmony_ciElliott fixed several things in <b>top</b> (removed spurious '\r' characters from -b
14620f66f451Sopenharmony_cioutput, removed interactive flicker, made running processes bold), and
14630f66f451Sopenharmony_cipushed Rob to make <b>file</b> work better recognizing things on stdin
14640f66f451Sopenharmony_ci("cat /bin/ls | file -" still won't work but "file - < /bin/ls" should).
14650f66f451Sopenharmony_ciRob fixed a bug in <b>netstat</b> on 64 bit big endian systems,
14660f66f451Sopenharmony_ciand fixed <b>cut</b> -DF
14670f66f451Sopenharmony_ci(a posix compliance fix broke its ability to act as a decent awk replacment
14680f66f451Sopenharmony_cibecause outputting all delimiterless lines isn't what you want there, -D
14690f66f451Sopenharmony_cinow disables that too).</p>
14700f66f451Sopenharmony_ci</u></p>
14710f66f451Sopenharmony_ci
14720f66f451Sopenharmony_ci<p><u>Documentation</u>: Rob added a buildroot section to the roadmap with the
14730f66f451Sopenharmony_ciprequisites that needs to run, and reformatted more of the ps --help text
14740f66f451Sopenharmony_cito two columns.</p>
14750f66f451Sopenharmony_ci
14760f66f451Sopenharmony_ci<p><u>Library</u>:
14770f66f451Sopenharmony_ciFLAGS_NODASH is now set in toys.optargs when an optstring starting
14780f66f451Sopenharmony_ciwith & has no dash in its first argument. (This lets "ps -ax" and "ps ax"
14790f66f451Sopenharmony_cibehave differently.) Factored out xtestfile() into lib/.
14800f66f451Sopenharmony_ciThe comma-separated-list parsing infrastructure moved to lib/commas.c.
14810f66f451Sopenharmony_ciAdded mkpath() for the common case of mkpathat() and #defined MKPATHAT_*
14820f66f451Sopenharmony_ciconstants for the uncommon cases. Elliott added better error checking
14830f66f451Sopenharmony_cito xparsetime() and fixed a bug in names_to_pid() (used in <b>pidof</b>
14840f66f451Sopenharmony_ciand <b>killall</b> and such).
14850f66f451Sopenharmony_ciRob inlined the old toys/e2fs.h into pending's mke2fs,
14860f66f451Sopenharmony_ciand removed a rogue semicolon from the WOULD_EXIT() macro that screwed
14870f66f451Sopenharmony_ciup if() statement levels. The do_lines() semantics changed adding a
14880f66f451Sopenharmony_cicallback(0,0) at the end of each file.</p>
14890f66f451Sopenharmony_ci
14900f66f451Sopenharmony_ci<p><u>Tests</u>:
14910f66f451Sopenharmony_ciThe test_* commands under toys/example were all renamed demo_* so
14920f66f451Sopenharmony_cithey don't share a namespace with running a standalone command
14930f66f451Sopenharmony_cithrough the test suite (ala "make test_sed"), then
14940f66f451Sopenharmony_cidemo_human_readable became demo_number so it can also test atolx()
14950f66f451Sopenharmony_cisuffixes. The readlink.test was getting confused by a
14960f66f451Sopenharmony_cibehavior difference between toybox and ubuntu (Ubuntu's ln -sf wouldn't
14970f66f451Sopenharmony_cireplace a symlink that pointed to itself, toybox's would), now there's
14980f66f451Sopenharmony_cian explicit rm so it works on ubuntu too. The test suite plumbing's
14990f66f451Sopenharmony_cierror message for a test with the wrong number of arguments now
15000f66f451Sopenharmony_cicorrectly identifies which test it's complaining about, and it can now
15010f66f451Sopenharmony_cirun a test on a command name beginning with "-" (none yet but it
15020f66f451Sopenharmony_cicomes up in toysh).</p>
15030f66f451Sopenharmony_ci
15040f66f451Sopenharmony_ci<p><u>Building</u>: You can now override strip with $STRIP. The set of
15050f66f451Sopenharmony_ci"make install_airlock" commands got tweaked for the 4.17 kernel (which
15060f66f451Sopenharmony_cineeds bison and flex because the new kconfig plumbing doesn't have _shipped
15070f66f451Sopenharmony_civersions of those generated files like the old kconfig did), and for
15080f66f451Sopenharmony_cithe new release (remove ping, toybox provides it now).
15090f66f451Sopenharmony_ci$LDFLAGS now applies to library probing (the android NDK provides
15100f66f451Sopenharmony_cidynamic libraries without corresponding --static versions).
15110f66f451Sopenharmony_ciElliott took a CFG_TOYBOX_DEBUG check out of an error_exit() to make
15120f66f451Sopenharmony_ciclang stop complaining about an error that should never happen.</p>
15130f66f451Sopenharmony_ci
15140f66f451Sopenharmony_ci<a name="24-02-2018" /><a href="#24-02-2018"><hr><h2><b>February 24, 2018</b></h2></a>
15150f66f451Sopenharmony_ci<blockquote><p>
15160f66f451Sopenharmony_ci"Arthur," said Ford.<br />
15170f66f451Sopenharmony_ci"Hello? Yes?" said Arthur.<br />
15180f66f451Sopenharmony_ci"Just believe everything I tell you, and it will all be very, very simple."<br />
15190f66f451Sopenharmony_ci"Ah, well, I'm not sure I believe that."<br />
15200f66f451Sopenharmony_ci</p>
15210f66f451Sopenharmony_ci<p> - The Hitchhiker's Guide to the Galaxy</p>
15220f66f451Sopenharmony_ci</blockquote>
15230f66f451Sopenharmony_ci
15240f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.7.6.tar.gz>Toybox 0.7.6</a>
15250f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.7.6>git commit</a>)
15260f66f451Sopenharmony_ciis out, a month and change late.</p>
15270f66f451Sopenharmony_ci
15280f66f451Sopenharmony_ci<p>This release adds a <b>crc32</b> command and
15290f66f451Sopenharmony_cicleans up and promotes <b>iconv</b>, <b>logger</b>, and <b>setfattr</b>.
15300f66f451Sopenharmony_ciPending added <b>stty</b> and <b>fmt</b>, the other half of <b>ping</b>,
15310f66f451Sopenharmony_ciand got a lot of cleanup on <b>gzip</b>/<b>gunzip</b>/<b>zcat</b>.</p>
15320f66f451Sopenharmony_ci
15330f66f451Sopenharmony_ci<p>The <b>cut</b> command got a complete rewrite adding support for multiple
15340f66f451Sopenharmony_ciranges, utf8/unicode characters, and new -CDFO options. Use -C to measure
15350f66f451Sopenharmony_cicolumns rather than characters (for double width chars), and "cut -DF 3-5"
15360f66f451Sopenharmony_ciselects words (like "awk '{print $3 $4 $5}'").</p>
15370f66f451Sopenharmony_ci
15380f66f451Sopenharmony_ci<p>This release adds <b>top -m</b> and <b>iotop -H</b> (and fixed top width truncating for narrow terminal windows),
15390f66f451Sopenharmony_ciadded <b>iconv -c</b>, fixed <b>ps -T 1234</b> to show threads belonging to
15400f66f451Sopenharmony_cithat PID, improved <b>file</b>'s executable identification (properly recognizing
15410f66f451Sopenharmony_ciboth endiannesses and adding sh/frv fdpic, bpf, and new microblaze
15420f66f451Sopenharmony_ciidentifiers), and <b>blkid</b> now only shows LABEL= when it isn't blank.</p>
15430f66f451Sopenharmony_ci
15440f66f451Sopenharmony_ci<p>Running ./configure now does "make defconfig", help_exit() now shows the
15450f66f451Sopenharmony_ci"See %s --help" message on the same line, and several web pages
15460f66f451Sopenharmony_ci(about, code, roadmap, cleanup) got updates.</p>
15470f66f451Sopenharmony_ci
15480f66f451Sopenharmony_ci<p>Elliott and the Android devs added <b>df -i</b>, <b>uptime -p</b>,
15490f66f451Sopenharmony_ci<b>time -v</b>, and <b>xxd -i -ri</b>,
15500f66f451Sopenharmony_cifixed <b>id -G</b> to only output the group IDs, fixed the <b>xargs -0 -n</b>
15510f66f451Sopenharmony_cicombination, made <b>find -exec +</b> obey ARG_MAX (just like xargs), made
15520f66f451Sopenharmony_ci<b>killall</b> kill scripts too, fixed an off by one error in <b>pidof</b>
15530f66f451Sopenharmony_cithat could cause false positive matches in 15 character names, added
15540f66f451Sopenharmony_cigzip/gunzip/zcat tests, and taught <b>file</b> to identify more stuff
15550f66f451Sopenharmony_ci(ogg, TrueType font, LLVM bitcode, PEM certs, and PE executables), and
15560f66f451Sopenharmony_cifor some reason needed TOYBOX_VENDOR in the version stuff.
15570f66f451Sopenharmony_ciAndroid <b>getprop</b>/<b>setprop</b> now allows ro. properties to have
15580f66f451Sopenharmony_ciarbitrary lengths, <b>losetup</b> can now find loop devices under /dev/block (where android puts
15590f66f451Sopenharmony_cithem for historical reasons), and Andreas Gampe pointed out a thinko in
15600f66f451Sopenharmony_ci<b>top</b> that triggered llvm's address sanitizer checks.</p>
15610f66f451Sopenharmony_ci
15620f66f451Sopenharmony_ci<p>Gael PORTAY asked for mdev to work when Linux has the
15630f66f451Sopenharmony_ciblock layer configured out, Patrick Oppenlander pointed out a problem
15640f66f451Sopenharmony_ciwith make bloatcheck's build dependencies, and
15650f66f451Sopenharmony_cixuphung on github fixed config2help building on MacOS X.</p>
15660f66f451Sopenharmony_ci
15670f66f451Sopenharmony_ci<p>Commands with locale support now setlocale(LC_TYPE, "C.UTF-8") for more
15680f66f451Sopenharmony_citargeted locale support (enable character parsing with
15690f66f451Sopenharmony_ciutf8 support, use "C" semantics otherwise). The toys/example/test_*.c
15700f66f451Sopenharmony_cicommands got renamed demo_*.c.</p>
15710f66f451Sopenharmony_ci
15720f66f451Sopenharmony_ci<p>In lib.c the millitime() function returns current unix time in milliseconds
15730f66f451Sopenharmony_ci(which as a 64 bit number is good for + or - 292 million years from
15740f66f451Sopenharmony_cimidnight Jan 1 1970), and the old xgetty() function became tty_fd() returning
15750f66f451Sopenharmony_ci-1 instead of erroring out.</p>
15760f66f451Sopenharmony_ci
15770f66f451Sopenharmony_ci<p>The "make help" text moved from the Makefile to scripts/help.txt,
15780f66f451Sopenharmony_cils.c now lists some of its deviations from posix, and work is underway
15790f66f451Sopenharmony_cito make ps.c more intelligible (and figure out how to break it up into
15800f66f451Sopenharmony_cimultiple files).</p>
15810f66f451Sopenharmony_ci
15820f66f451Sopenharmony_ci<a name="12-10-2017" /><a href="#12-10-2017"><hr><h2><b>October 12, 2017</b></h2></a>
15830f66f451Sopenharmony_ci<blockquote><p>Would it save you a lot of time if I just gave up and went
15840f66f451Sopenharmony_cimad now?</p>
15850f66f451Sopenharmony_ci<p> - The Hitchhiker's Guide to the Galaxy</p>
15860f66f451Sopenharmony_ci</blockquote>
15870f66f451Sopenharmony_ci
15880f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.7.5.tar.gz>Toybox 0.7.5</a>
15890f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.7.5>git commit</a>)
15900f66f451Sopenharmony_ciis out.</p>
15910f66f451Sopenharmony_ci
15920f66f451Sopenharmony_ci<p>This is another <b>mostly bugfix release</b>. I delayed it a bit trying to get some
15930f66f451Sopenharmony_ciof the many half-finished projects (dd, ping, lsof, iconv, cut, sysconf,
15940f66f451Sopenharmony_cithe cp --parents option...) finished/promoted/tested, but decided adding big
15950f66f451Sopenharmony_cithings at the end of the dev cycle would be too destabilizing.</p>
15960f66f451Sopenharmony_ci
15970f66f451Sopenharmony_ci<p>A couple <b>new features</b> slipped in anyway. Ilya Kuzmich added head -c
15980f66f451Sopenharmony_ciand strings -t (and corrected strings' output in a couple places). Elliott
15990f66f451Sopenharmony_ciHughes taught file to recognize Macintosh (Mach-O) binaries.</p>
16000f66f451Sopenharmony_ci
16010f66f451Sopenharmony_ci<p><b>NOTE</b>: the chrt command is broken when built against musl-libc
16020f66f451Sopenharmony_cibecause that project's maintainer decided he didn't like the system calls
16030f66f451Sopenharmony_ciit depends on, so he
16040f66f451Sopenharmony_ci<a href=https://git.musl-libc.org/cgit/musl/commit/?id=1e21e78bf7a5>removed
16050f66f451Sopenharmony_cithem from his libc</a>. The prebuilt binaries are built against musl,
16060f66f451Sopenharmony_ciso the chrt command there will always say -ENOSYS. (It works fine built against
16070f66f451Sopenharmony_ciglibc, and presumably bionic or uClibc.)</p>
16080f66f451Sopenharmony_ci
16090f66f451Sopenharmony_ci<p><b>Bugfixes</b>: Remounting (mount -o remount,rw) should work properly now,
16100f66f451Sopenharmony_ciand we fixed another place ps was segfaulting when /proc
16110f66f451Sopenharmony_cientries vanished out from under us (a hard to hit race condition
16120f66f451Sopenharmony_cimostly noticeable in long-running "top" exiting; error value was treated
16130f66f451Sopenharmony_cias a pointer). Elliott Hughes fixed a -Wformat warning in expr.c,
16140f66f451Sopenharmony_ciand made xargs split the command
16150f66f451Sopenharmony_ciline at ARG_MAX (which is 1/4 the stack size ulimit, which normal users
16160f66f451Sopenharmony_cican arbitrarily increase but execve() will complain if they don't).
16170f66f451Sopenharmony_ciJosh Gao made netcat -l exit after handling a request, and reported a
16180f66f451Sopenharmony_ciseq bug (seq "1000000 10000001" output 1e+06, fixed now). Zach Riggle fixed a
16190f66f451Sopenharmony_cibroken URL in the README. Rob fixed env -0 checking the flag wrong so
16200f66f451Sopenharmony_ciit didn't work in combination with other flags (typo).</p>
16210f66f451Sopenharmony_ci
16220f66f451Sopenharmony_ci<p><b>Plumbing</b>:
16230f66f451Sopenharmony_ciReplaced mbrtowc() with a new utf8towc() that doesn't have a context
16240f66f451Sopenharmony_cistruct or care about locale. A bugfix in comma_scan() (wasn't removing an entry at the end
16250f66f451Sopenharmony_ciof the list) is why remount _sometimes_ worked (depending on argument
16260f66f451Sopenharmony_ciorder), xgetaddrinfo() is now separate from xconnect(),
16270f66f451Sopenharmony_ciatolx_range() learned the w (word=2) suffix, and b is now (block=512) instead
16280f66f451Sopenharmony_ciof (byte=1).</p>
16290f66f451Sopenharmony_ci
16300f66f451Sopenharmony_ci<p><b>Build</b>: Patrick Oppenlander added a workaround for a bug in config2help.c
16310f66f451Sopenharmony_cithat resulted in segfaults on newer toolchains. (It was actually a use
16320f66f451Sopenharmony_ciafter free error; the build infrastructure isn't nearly as heavily audited as
16330f66f451Sopenharmony_cicode that gets installed on the target; oops.) A new GITHASH
16340f66f451Sopenharmony_cienvironment variable can force the build version from
16350f66f451Sopenharmony_cithe command line, and the build checks for .git in the top directory
16360f66f451Sopenharmony_cibefore asking git what our version is (so it isn't confused by ../../.git
16370f66f451Sopenharmony_ciin an enclosing directory). Added a build #warning about musl intentionally
16380f66f451Sopenharmony_cibreaking chrt (as with nommu fork() musl now provides a broken
16390f66f451Sopenharmony_cistub function so compile-time probes for its existence think it's there, and
16400f66f451Sopenharmony_ciyou can't run the result to test behavior when cross compiling).</p>
16410f66f451Sopenharmony_ci
16420f66f451Sopenharmony_ci<a name="19-06-2017" /><a href="#19-06-2017"><hr><h2><b>June 19, 2017</b></h2></a>
16430f66f451Sopenharmony_ci<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.
16440f66f451Sopenharmony_ciTo summarize the summary: anyone who is capable of getting themselves made President should on no account be allowed to do the job.</p>
16450f66f451Sopenharmony_ci<p>- The Hitchhiker's Guide to the Galaxy</p>
16460f66f451Sopenharmony_ci</blockquote>
16470f66f451Sopenharmony_ci
16480f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.7.4.tar.gz>Toybox 0.7.4</a>
16490f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.7.4>git commit</a>)
16500f66f451Sopenharmony_ciis out. No new commands this time, but
16510f66f451Sopenharmony_ci<b>chrt</b> and <b>dmesg</b> got promoted out of pending.</p>
16520f66f451Sopenharmony_ci
16530f66f451Sopenharmony_ci<p><u>New features</u>:
16540f66f451Sopenharmony_ciRob rewrote paste, which should work much better now, and added grep
16550f66f451Sopenharmony_ci-M and -S to match and skip wildcards respectively (useful with -r).
16560f66f451Sopenharmony_ciElliott's updated dmesg has -T and --color. The file
16570f66f451Sopenharmony_cicommand can recognize gzip now, uptime grew -s, date grew %N, env knows - as a first argument
16580f66f451Sopenharmony_cimeans -i (posix!) and grew -0, ls defaults to -b
16590f66f451Sopenharmony_ciinstead of -q now when there's a tty, and ls has a new -ll option (with
16600f66f451Sopenharmony_ci--full-time as a compatibility synonym) showing nanoseconds and (for some
16610f66f451Sopenharmony_cireason) timezone. (Why do individual files have timezones?) Elliott added
16620f66f451Sopenharmony_ci"uudecode -o -" support. Illya Kuzmich taught head -v and -q. The cpio
16630f66f451Sopenharmony_cicode no longer adds the "TRAILER!!!" entry by default (initramfs extractor
16640f66f451Sopenharmony_cidoesn't care) without which you can concatenate cpio archives with "cat".
16650f66f451Sopenharmony_ci(Use the new --trailer option if you want the legacy behavior.)
16660f66f451Sopenharmony_ciIn pending, fdisk compiles now and tar understands bzip2.</p>
16670f66f451Sopenharmony_ci
16680f66f451Sopenharmony_ci<p><u>Build</u>:
16690f66f451Sopenharmony_ciThe "make install_airlock" target now symlinks bc from the host because
16700f66f451Sopenharmony_cithe kernel <a href=https://landley.net/notes-2013.html#28-03-2013>inexplicably</a>
16710f66f451Sopenharmony_cineeds that to build. This was motivated by
16720f66f451Sopenharmony_ci<a href=https://github.com/landley/mkroot>mkroot</a>, which builds under
16730f66f451Sopenharmony_cia toybox airlock directory.</p>
16740f66f451Sopenharmony_ci
16750f66f451Sopenharmony_ci<p>Lots of work on the test suite, mostly from the Android guys who are now
16760f66f451Sopenharmony_cirunning it under Android. This fixed several existing tests that didn't
16770f66f451Sopenharmony_cipass, made more tests run on a toybox-only system, and so on. The test suite
16780f66f451Sopenharmony_ciinfrastructure now has a second testing function,
16790f66f451Sopenharmony_ci"testcmd", which supplies the command name being tested (bypassing
16800f66f451Sopenharmony_cishell builtins).</p>
16810f66f451Sopenharmony_ci
16820f66f451Sopenharmony_ci<p>Various android build and config fixes, getting closer to being able
16830f66f451Sopenharmony_cito let android someday use scripts/make.sh instead of generated/* snapshots.
16840f66f451Sopenharmony_ciAlso more work into building under android's NDK; not quite there yet
16850f66f451Sopenharmony_cibut much closer.
16860f66f451Sopenharmony_ciUse nproc in scripts/make.sh detect available processors (so you can control the SMP level with taskset).
16870f66f451Sopenharmony_ciRemoved the old uClibc compatibility glue, it's been 5 years since their
16880f66f451Sopenharmony_ci<a href=http://lists.busybox.net/pipermail/buildroot/2016-December/180102.html>last release</a>.</p>
16890f66f451Sopenharmony_ci
16900f66f451Sopenharmony_ci<p>The new config option TOYBOX_PEDANTIC_ARGS checks arguments when there
16910f66f451Sopenharmony_ciare no arguments, so things like "uptime" no longer silently ignore arguments
16920f66f451Sopenharmony_ciyou pass but instead refuse to run.</p>
16930f66f451Sopenharmony_ci
16940f66f451Sopenharmony_ci<p><u>Docs</u>:
16950f66f451Sopenharmony_ciThe FAQ now has more than one entry. Commands no longer output the full
16960f66f451Sopenharmony_cihelp text for argument errors but instead just say "See %s --help" with the
16970f66f451Sopenharmony_cicommand name (in addition to the actual error message).
16980f66f451Sopenharmony_ciElliott did a big period-ectomy on all the --help text, and
16990f66f451Sopenharmony_ciwe cleaned up some tab/space inconsistency. The
17000f66f451Sopenharmony_cinon-html help -a output now has separators with the command name.
17010f66f451Sopenharmony_ciThe top/iotop and pkill/pgrep help text now describe a lot more of what
17020f66f451Sopenharmony_cithe commands can do. Twitter's code of conduct page went down so we
17030f66f451Sopenharmony_cimirrored the text locally.</p>
17040f66f451Sopenharmony_ci
17050f66f451Sopenharmony_ci<p><u>Bugfixes</u>:
17060f66f451Sopenharmony_ciFixed a race condition in ps/top where a process that exited right as we
17070f66f451Sopenharmony_ciread its data returned a different error value than we were expecting (which
17080f66f451Sopenharmony_ciwas causing long-running top instances to occasionally exit),
17090f66f451Sopenharmony_cimount now gives an error if it can't autodetect the filesystem
17100f66f451Sopenharmony_citype, ps no longer queries the terminal size when output isn't to a tty
17110f66f451Sopenharmony_ci(so "ps -A | cat" doesn't vary), date's chkmktime() was replaced with
17120f66f451Sopenharmony_cisimple range checks for fields (to avoid false positives from things like
17130f66f451Sopenharmony_citimezones and daylight savings time), removed %s from date's help (we
17140f66f451Sopenharmony_cididn't implement it, we have @seconds[.nanoseconds] instead), fixed
17150f66f451Sopenharmony_cizcat's buffer flush logic (which was always failing on files larger
17160f66f451Sopenharmony_cithan 32k), and factor now detects requests for numbers >64 bits and fails
17170f66f451Sopenharmony_ciloudly instead of producing incorrect answers.
17180f66f451Sopenharmony_ciElliott fixed touch -a/-m (they were backwards), and allowed ':' in
17190f66f451Sopenharmony_cisetprop's property names. Grep now exits with 2 for errors (so -q can
17200f66f451Sopenharmony_cidistinguish "didn't find" from "didn't work"), doesn't stop on symlinks
17210f66f451Sopenharmony_cithat point nowhere (there was an error_exit() that should just be a warning),
17220f66f451Sopenharmony_ciand provides error messages for files we could open but not read.</p>
17230f66f451Sopenharmony_ci
17240f66f451Sopenharmony_ci<p><u>Library</u>:
17250f66f451Sopenharmony_ciNew library functions: strend() complements strstart(), minof()/maxof()
17260f66f451Sopenharmony_ciare min/max macros that evalute arguments once and autodetect type (why
17270f66f451Sopenharmony_ciisn't this in libc?), xmmap() checks MAP_FAILED (which is not NULL).</p>
17280f66f451Sopenharmony_ci
17290f66f451Sopenharmony_ci<a name="21-02-2017" /><a href="#21-02-2017"><hr><h2><b>February 21, 2017</b></h2></a>
17300f66f451Sopenharmony_ci<blockquote><p>Only six people in the Galaxy knew that the job of the
17310f66f451Sopenharmony_ciGalactic President was not to wield power but to attract attention
17320f66f451Sopenharmony_ciaway from it. Zaphod Beeblebrox was amazingly good at his job.</p>
17330f66f451Sopenharmony_ci<p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
17340f66f451Sopenharmony_ci
17350f66f451Sopenharmony_ci<p>Despite everything, <a href=downloads/toybox-0.7.3.tar.gz>Toybox 0.7.3</a>
17360f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.7.3>git commit</a>)
17370f66f451Sopenharmony_ciis out. The <u>new commands</u> this time are <b>ftpget</b>, <b>ftpput</b>, <b>microcom</b>, and <b>ascii</b>.<p>
17380f66f451Sopenharmony_ci
17390f66f451Sopenharmony_ci<p>We also had two command _demotions_ out of defconfig:
17400f66f451Sopenharmony_ci<b>hostid</b> got moved to toys/example and
17410f66f451Sopenharmony_ciswitched to "default n" because despite <a href=http://pubs.opengroup.org/onlinepubs/9699919799/functions/gethostid.html>still being in posix</a>
17420f66f451Sopenharmony_cithe concept of a unique 32 bit number identifying a system is something
17430f66f451Sopenharmony_ciLinux outgrew about the time Pauline Middelink wrote the first IP
17440f66f451Sopenharmony_ciMasquerading code. And Elliott did a complete rewrite of <b>dmesg</b> introducing
17450f66f451Sopenharmony_citwo codepaths that I didn't get a chance to unify and didn't want to
17460f66f451Sopenharmony_cihold up the release for, so that's back in pending.</p>
17470f66f451Sopenharmony_ci
17480f66f451Sopenharmony_ci<p><u>New features</u>: Rob added units to <b>find</b> -atime and friends
17490f66f451Sopenharmony_ci(with the legacy -amin alias). Elliott added color and -w to dmesg, fallocate
17500f66f451Sopenharmony_ci-o, and improved file's ELF parsing. Steve Muckle added -d and finit_module
17510f66f451Sopenharmony_cisupport to modprobe. Rob and Elliott tweaked the
17520f66f451Sopenharmony_cips/top display format a bit more (extending the USER field from 8 to 18 chars
17530f66f451Sopenharmony_ciand putting + at the end of string fields that got truncated).
17540f66f451Sopenharmony_cidf -a isn't entirely new, but wasn't documented and needed a bugfix.</p>
17550f66f451Sopenharmony_ci
17560f66f451Sopenharmony_ci<p><u>Bugfixes</u>:
17570f66f451Sopenharmony_ciLast release broke oneit because -c didn't get moved to xopen_stdio() (oops).
17580f66f451Sopenharmony_ciRob and Elliott simultaneously spotted ps padding each line to 99999
17590f66f451Sopenharmony_cichars when there's no tty (serial console or adb); now it pads to 80 in
17600f66f451Sopenharmony_cithat case but also switches on -w to avoid field truncation. The "tty"
17610f66f451Sopenharmony_cifield also sometimes had trailing debris (that's fixed now). And "top" was
17620f66f451Sopenharmony_ciendlessly redrawing with out tty because receipt of the ANSI size probe
17630f66f451Sopenharmony_ciresults would set SIGWINCH, and handling that sent another ansi probe. (Sigh.)
17640f66f451Sopenharmony_ciAnd while we're there, replace "ADDR" with "BIT" in ps -l so there are
17650f66f451Sopenharmony_cimore than 4 chars left for the "CMD" field on 64 bit systems.</p>
17660f66f451Sopenharmony_ci
17670f66f451Sopenharmony_ci<p>Izabera pointed out that split -b and -l can't mix, and suggested seq should
17680f66f451Sopenharmony_cimultiply to avoid accumulating rounding errors from repeated fractional
17690f66f451Sopenharmony_ciincrements. Wang Xiao Jian fixed a bug in sort -k.
17700f66f451Sopenharmony_ciElliott let getprop use the @ character in property names, and
17710f66f451Sopenharmony_ciDimitry Ivanov removed the name length limit for system properties.
17720f66f451Sopenharmony_ciElliott also improved some error reporting and improved top -H's display
17730f66f451Sopenharmony_ciof thread names.
17740f66f451Sopenharmony_ci
17750f66f451Sopenharmony_ci<p>Josh Gao pointed out that recursive operations on . and .. could be ignored
17760f66f451Sopenharmony_ciin chmod -R (and the resulting generic fix to dirtree_notdotdot() fixed
17770f66f451Sopenharmony_ciit in several other places).</p>
17780f66f451Sopenharmony_ci
17790f66f451Sopenharmony_ci<p>Justin Cormack caught tar producing a warning to stdout that screwed up
17800f66f451Sopenharmony_ci"tar c" to stdout.
17810f66f451Sopenharmony_ciRob fixed an option parsing bug (where switching off a --longopt in menuconfig
17820f66f451Sopenharmony_ciconfused the parser), and another one where an option excluding itself
17830f66f451Sopenharmony_ci(ala "abc[-ab][!abc]" with "command -a -b") would segfault.</p>
17840f66f451Sopenharmony_ci
17850f66f451Sopenharmony_ci<p>There's some sort of gcc stack over-optimization bug where musl-libc's
17860f66f451Sopenharmony_civersion of vfork() doesn't get marked with attribute(returns_twice) so
17870f66f451Sopenharmony_cistack varabiles in the same function after that get semi-randomly overwritten
17880f66f451Sopenharmony_ciwhen the optimizer decides to reclaim the space. So add the attribute
17890f66f451Sopenharmony_cito the function the XVFORK() wrapper macro calls. (It's a nommu thing.)</p>
17900f66f451Sopenharmony_ci
17910f66f451Sopenharmony_ci<p>Fixed a couple variable size mismatch bugs that were only tested on 64 bit
17920f66f451Sopenharmony_ci(printf %x 64) or only tested on 32 bit (modprobe), removed some
17930f66f451Sopenharmony_ciunnecessary casts in stat.</p>
17940f66f451Sopenharmony_ci
17950f66f451Sopenharmony_ci<p>Continuing attempts to build under Android NDK brought up that posix
17960f66f451Sopenharmony_cidefines the global 'stdout' as a macro, which older versions of bionic
17970f66f451Sopenharmony_citurned into an array member, but a function was using it as an argument
17980f66f451Sopenharmony_ciname. (This worked in the AOSP build because it only builds against current
17990f66f451Sopenharmony_cibionic, where there's a global 'stdout'.)</p>
18000f66f451Sopenharmony_ci
18010f66f451Sopenharmony_ci<p>Several commits argued with clang's warning generation, eventually
18020f66f451Sopenharmony_cisettling on a variant of __attribute__((__shut_up__)).</p>
18030f66f451Sopenharmony_ci
18040f66f451Sopenharmony_ci<p>Android should no longer give spurious error messages
18050f66f451Sopenharmony_ciwhen you "ps -A | head" about EPIPE on output. (Older versions of bionic
18060f66f451Sopenharmony_ciset an error handler on SIGPIPE, but it shouldn't do that now. More recent
18070f66f451Sopenharmony_civersions of adb set the SIGPIPE handler to SIGIGN instead of SIGDFL,
18080f66f451Sopenharmony_cileading to write returning an error message instead of silently killing
18090f66f451Sopenharmony_cithe program. So we set it back to the default.)</p>
18100f66f451Sopenharmony_ci
18110f66f451Sopenharmony_ci<p><u>Docs</u>:
18120f66f451Sopenharmony_ciRemoved website link to the gmane archive (which didn't survive gmane's
18130f66f451Sopenharmony_cichange of ownership). The FAQ now answers a _second_ question. (Woo!)
18140f66f451Sopenharmony_ciSome roadmap updates.</p>
18150f66f451Sopenharmony_ci
18160f66f451Sopenharmony_ci<p><u>Build tweaks</u>:
18170f66f451Sopenharmony_ciUpgraded "make install_airlock" target to only warn about missing
18180f66f451Sopenharmony_cicommands (unless $PEDANTIC is set) when it sets up the hermetic build
18190f66f451Sopenharmony_cipath. (The plan is still to implement everything but the toolchain
18200f66f451Sopenharmony_cibinaries in toybox, but in the meantime we're symlinking other stuff from
18210f66f451Sopenharmony_cithe $HOST that isn't ready yet. See
18220f66f451Sopenharmony_ci<a href=https://github.com/landley/mkroot>mkroot</a> for an example using
18230f66f451Sopenharmony_cithis.)</p>
18240f66f451Sopenharmony_ci
18250f66f451Sopenharmony_ci<p>Elliott and Rob continue to poke at building toybox with Android's NDK,
18260f66f451Sopenharmony_cibut it's a work in progress (<a href=http://lists.landley.net/pipermail/toybox-landley.net/2016-December/008767.html>thread</a>). Various changes
18270f66f451Sopenharmony_ciremoving libcutils dependencies and adding an selinux dependency to getprop
18280f66f451Sopenharmony_ciare fallout from this.</p>
18290f66f451Sopenharmony_ci
18300f66f451Sopenharmony_ci<p>Cross-compiling from Macs needs to use "gsed" instead of apple's
18310f66f451Sopenharmony_civersion, so teach the build to use that name if it exists in the $PATH.
18320f66f451Sopenharmony_ciIf you try to build without running config first, you should get better
18330f66f451Sopenharmony_cierror reporting now. Added a workaround for Centos' broken "which" command
18340f66f451Sopenharmony_ciproducing output when it _can't_ find a name in the $PATH.</p>
18350f66f451Sopenharmony_ci
18360f66f451Sopenharmony_ci<p><u>Library</u>:
18370f66f451Sopenharmony_ciThe new dirtree flag DIRTREE_PROC skips non-numeric entries so things
18380f66f451Sopenharmony_cilike ps and top can scan /proc more efficiently.</p>
18390f66f451Sopenharmony_ci
18400f66f451Sopenharmony_ci<a name="21-10-2016" /><a href="#21-10-2016"><hr><h2><b>October 21, 2016</b></h2></a>
18410f66f451Sopenharmony_ci<blockquote><p>Probability factor of one to one. We have normality. I repeat,
18420f66f451Sopenharmony_ciwe have normality. Anything you still can't cope with is therefore your
18430f66f451Sopenharmony_ciown problem.</p><p> - The Hitchhiker's Guide to the Galaxy</p></blockquote>
18440f66f451Sopenharmony_ci
18450f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.7.2.tar.gz>Toybox 0.7.2</a>
18460f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.7.2>git commit</a>)
18470f66f451Sopenharmony_ciis out.</p>
18480f66f451Sopenharmony_ci
18490f66f451Sopenharmony_ci<p>During this development cycle, Elliott Hughes <a href=http://androidbackstage.blogspot.com/2016/07/episode-53-adb-on-adb.html>got interviewed
18500f66f451Sopenharmony_cion the ADB podcast</a>
18510f66f451Sopenharmony_ciand 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>).
18520f66f451Sopenharmony_ciBoth talk about toybox and many other things.
18530f66f451Sopenharmony_ciThe web page also grew a new <a href=faq.html>FAQ page</a>, currently with
18540f66f451Sopenharmony_cijust the one.</p>
18550f66f451Sopenharmony_ci
18560f66f451Sopenharmony_ci<p>New comands added to defconfig are <b>tunctl</b>,
18570f66f451Sopenharmony_ci<b>log</b>, <b>start</b>, <b>stop</b>, and <b>sendevent</b>.
18580f66f451Sopenharmony_ciThe commands <b>file</b> and <b>netstat</b> got promoted out of pending.
18590f66f451Sopenharmony_ciPending added <b>chrt</b>, <b>setfattr</b>, and <b>getfattr</b>, and saw
18600f66f451Sopenharmony_cia lot of cleanups to diffstat and dd but not enough to promote them to
18610f66f451Sopenharmony_cidefconfig yet. A new toys/net directory was added, moving ifconfig, netcat,
18620f66f451Sopenharmony_cinetstat, rfkill, and tunctl there so far.</p>
18630f66f451Sopenharmony_ci
18640f66f451Sopenharmony_ci<p><b>Upgrades</b>: All commands now parse --version when they understand
18650f66f451Sopenharmony_ci--help, but "true" and "false" should now ignore their arguments entirely.
18660f66f451Sopenharmony_ciWe taught stat to handle "%12x" and "%.12x" printf-style escapes, which
18670f66f451Sopenharmony_ciapparently other versions do. The ifconfig output now shows the interface's
18680f66f451Sopenharmony_cidevice driver. Added patch -d and --dry-run, wc can now do -cm together,
18690f66f451Sopenharmony_cifind has a NOP -noleaf so scripts that use that don't break, add -c to md5sum
18700f66f451Sopenharmony_ciand sha1sum. Elliott taught ps to treat extra aguments as additional -p
18710f66f451Sopenharmony_cipids, implemented xxd -s, did a number of upgrades to file (added -HL,
18720f66f451Sopenharmony_cisupport for ar files, improved ELF support to report android API level
18730f66f451Sopenharmony_ciand stripped/not stripped and it no longer prints a guessed build ID type).
18740f66f451Sopenharmony_ciElliott also added optional build-time support for using openssl's
18750f66f451Sopenharmony_ciassembly-optimized md5sum/sha1sum implementations (leading to a new
18760f66f451Sopenharmony_ci<a href=design.html>design</a> policy on shared libraries).</p>
18770f66f451Sopenharmony_ci
18780f66f451Sopenharmony_ci<p><b>Bugfixes</b>: Too many fixes to "ps" and "touch" to list, from both
18790f66f451Sopenharmony_ciElliott and Rob. Rob taught sed to handle s/[[:space:]/]// type sequences
18800f66f451Sopenharmony_ciproperly, switched grep to a better
18810f66f451Sopenharmony_ciworkaround 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,
18820f66f451Sopenharmony_cimade du max out at 2 terabytes instead of 2 gigabytes on 32-bit systems
18830f66f451Sopenharmony_ci(it was always designed to, but was missing a typecast),
18840f66f451Sopenharmony_cifixed the option parsing infrastructure (config options that remove command
18850f66f451Sopenharmony_ciline options got the placeholders wrong), fix to printf for printing
18860f66f451Sopenharmony_cioctal digits and handling the (posix-mandated) difference between %b and
18870f66f451Sopenharmony_cinon-%b octal output, reading from "-" no longer closes stdin when done,
18880f66f451Sopenharmony_cinetcat -L works with nommu (although it may need more portability work),
18890f66f451Sopenharmony_ciand you can now "make test_scankey" if you want to. Several commands
18900f66f451Sopenharmony_ci(stat, makedeves, chgrp, cp, find) handled user name lookup failure badly
18910f66f451Sopenharmony_ci(stat was segfaulting if you interrogated a file belonging to a nonexistent
18920f66f451Sopenharmony_ciuser, "chown 12345 file" errored out if you didn't have that user
18930f66f451Sopenharmony_ciin /etc/passwd... now they should all print/accept the number when
18940f66f451Sopenharmony_ciappropriate). "LC_ALL=C ls -Cs --color" produces the same output
18950f66f451Sopenharmony_cias other versions (two spaces padding, -k hardwired on).<p>
18960f66f451Sopenharmony_ci
18970f66f451Sopenharmony_ci<p>Kyungsik Lee fixed a bug
18980f66f451Sopenharmony_ciin cp (readlink() doesn't actually null terminate the string it reads in),
18990f66f451Sopenharmony_ciElliott Hughes made pgrep/pkill return success/failure, fixed trailing
19000f66f451Sopenharmony_ciwhitespace in netstat, fixed a SMACK symbol conflict due to linux/xattr.h
19010f66f451Sopenharmony_cichanging, fixed ls -sh, and added a lot of
19020f66f451Sopenharmony_cistuff to the <a href=roadmap.html>roadmap page</a>.
19030f66f451Sopenharmony_ciIzabera pointed out cmp -l and -s can't be selected at the same time,
19040f66f451Sopenharmony_cithat timeout was never actually checking -v, that ls should default to -q
19050f66f451Sopenharmony_ciwhen output is to a tty, and that "file -" would sometimes try to open "-"
19060f66f451Sopenharmony_ciinstead of stdin.
19070f66f451Sopenharmony_ciUsischev Yury pointed out a use after free error, and that id shouldn't
19080f66f451Sopenharmony_cicall exit() directly. Matthias Urhahn pointed out that stat(2) returns
19090f66f451Sopenharmony_cihardwired 512-byte units, so stat.c was wrong. David Hedges pointed out
19100f66f451Sopenharmony_cithat route could only handle 10 character interface names when the kernel
19110f66f451Sopenharmony_cican do 15 (it's still in pending for a reason, but fixed). Evgenii
19120f66f451Sopenharmony_ciStepanov found and helped diagnose one of the more subtle ps bugs fixed
19130f66f451Sopenharmony_cithis time around.</p>
19140f66f451Sopenharmony_ci
19150f66f451Sopenharmony_ci<p>Calling "make test_blah" no longer causes make to error out if the last
19160f66f451Sopenharmony_citest fails (and thus returns a nonzero error code).
19170f66f451Sopenharmony_ciBuilding single commands and the multiplexer used to require a "make clean"
19180f66f451Sopenharmony_cibetween them (because they had different config files both of which were older
19190f66f451Sopenharmony_cithan generated/config.h so it didn't get rebuilt; now it just always
19200f66f451Sopenharmony_cirebuilds it).</p>
19210f66f451Sopenharmony_ci
19220f66f451Sopenharmony_ci<p>The defconfig build is now slightly less broken on older centos versions
19230f66f451Sopenharmony_ci(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>
19240f66f451Sopenharmony_ci
19250f66f451Sopenharmony_ci<p>Several commands were over-using xprintf(), which flushes its output
19260f66f451Sopenharmony_cito check for error (something you only need to do maybe once per line,
19270f66f451Sopenharmony_ciand even then maybe only in loops because xexit() flushes and checks
19280f66f451Sopenharmony_ciferror() for you and adjusts the exit code if we wrote stuff to stdout
19290f66f451Sopenharmony_cithat couldn't be printed). Lots of little flushes are inefficient,
19300f66f451Sopenharmony_ciso most things can use normal printf(). (Retransmission
19310f66f451Sopenharmony_ciof short writes is presumably libc's problem since it's buffering the
19320f66f451Sopenharmony_cioutput and all.)</p>
19330f66f451Sopenharmony_ci
19340f66f451Sopenharmony_ci<p><b>Library:</b>
19350f66f451Sopenharmony_ciNew library functions readlink0() and readlinkat0() which properly null
19360f66f451Sopenharmony_citerminates the symlink value (which the stock libc function inexplicably
19370f66f451Sopenharmony_cidoesn't).
19380f66f451Sopenharmony_ciThe new do_lines() function interates reading lines from a filehandle
19390f66f451Sopenharmony_ciand calling a function on each line.
19400f66f451Sopenharmony_ciNew function pollinate() factoring out netcat's poll() loop so things
19410f66f451Sopenharmony_cilike telnet can use it.
19420f66f451Sopenharmony_ciNew functions getusername() and getgroupname() return a
19430f66f451Sopenharmony_cichar * given a uid/gid (and return a string representation of the number
19440f66f451Sopenharmony_ciif the lookup fails), and xgetpwnamid/xgetgrnamid were renamed to
19450f66f451Sopenharmony_cixgetuid/xgetgid and now return an integer instead of a struct (also helping
19460f66f451Sopenharmony_cihandle lookup failures, you can still return the uid/get for "12345").</p>
19470f66f451Sopenharmony_ci
19480f66f451Sopenharmony_ci<p>Switched atolx() to use long long internally.
19490f66f451Sopenharmony_ciRenamed xopen() to xopen_stdio() and made a new xopen() that never returns
19500f66f451Sopenharmony_cistdin, stdout, or stderr (duping /dev/null into the filehandles as necessary).
19510f66f451Sopenharmony_ciNew function xopenro() opens a file read only with one less argument, and
19520f66f451Sopenharmony_ciunderstands that "-" means stdin. New flag WARN_ONLY tells these functions
19530f66f451Sopenharmony_cito just print a warning on failure, and return -1 instead of exiting.
19540f66f451Sopenharmony_ciMisc new functions like openro() which defaults to the WARN_ONLY behavior
19550f66f451Sopenharmony_ciand notstdio() which dup()s a filehandle up beyond stdin/out/err backfilling
19560f66f451Sopenharmony_ciwith /dev/null as necessary. The WARN_ONLY flag let us remove the failok
19570f66f451Sopenharmony_ciargument from loopfiles().</p>
19580f66f451Sopenharmony_ci
19590f66f451Sopenharmony_ci<p>New TOYFLAG_NOHELP disables --help processing (which "true" and "false"
19600f66f451Sopenharmony_cishould not do).</b>
19610f66f451Sopenharmony_ci
19620f66f451Sopenharmony_ci<p>The test suite now has NOSPACE=1 to ignore whitespace (using diff -b to
19630f66f451Sopenharmony_cicheck results), which helps TEST_HOST pass the same tests as toybox.
19640f66f451Sopenharmony_ciFixes to chattr and date tests. It also has a new variable $C with the
19650f66f451Sopenharmony_ciabsolute path to the command being tested (bypassing shell builtins),
19660f66f451Sopenharmony_ciand a function testcmd() which is just like testing() except it prepends
19670f66f451Sopenharmony_cithe command name ($C) to the test command line as well as the test
19680f66f451Sopenharmony_cidescription.</p>
19690f66f451Sopenharmony_ci
19700f66f451Sopenharmony_ci<a name="02-06-2016" /><a href="#02-06-2016"><hr><h2><b>June 2, 2016</b></h2></a>
19710f66f451Sopenharmony_ci<blockquote><p>When the 'Drink' button is pressed it makes an instant but
19720f66f451Sopenharmony_cihighly detailed examination of the subject's taste buds, a spectroscopic
19730f66f451Sopenharmony_cianalysis of the subject's metabolism, and then sends tiny experimental
19740f66f451Sopenharmony_cisignals down the neural pathways to the taste centres of the subject's
19750f66f451Sopenharmony_cibrain to see what is likely to be well received. However, no-one knows
19760f66f451Sopenharmony_ciquite why it does this because it then invariably delivers a cupful of
19770f66f451Sopenharmony_ciliquid that is almost, but not quite, entirely unlike tea.</p>
19780f66f451Sopenharmony_ci<p> - The Hitchhiker's Guide to the Galaxy</p></blockquote>
19790f66f451Sopenharmony_ci
19800f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.7.1.tar.gz>Toybox 0.7.1</a>
19810f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.7.1>git commit</a>)
19820f66f451Sopenharmony_ciis out. (Yes, I forgot to update the --version string, but I already
19830f66f451Sopenharmony_ciuploaded the <a href=downloads/binaries/0.7.1>binaries</a>.)</p>
19840f66f451Sopenharmony_ci
19850f66f451Sopenharmony_ci<p>The website has https support now, you can "make cat ps ls"
19860f66f451Sopenharmony_cito get standalone commands (and "make list list_pending" to see what's
19870f66f451Sopenharmony_ciavailable), and a whole lot of bugfixes and new options to existing
19880f66f451Sopenharmony_cicommands.</p>
19890f66f451Sopenharmony_ci
19900f66f451Sopenharmony_ci<h2>New Commands</h2>
19910f66f451Sopenharmony_ci<p>Rob implemented <b>ulimit</b>. In pending, Elliott Hughes implemented
19920f66f451Sopenharmony_cifile. and Lipi Lee implemented a simple wget. (Pending also had minor
19930f66f451Sopenharmony_cicleanups to more and lsof, but no promotions this time around.)</p>
19940f66f451Sopenharmony_ci
19950f66f451Sopenharmony_ci<h2>New Options</h2>
19960f66f451Sopenharmony_ci<p>Izabera implemented env -u, suggested adding seq -w, made factor
19970f66f451Sopenharmony_ciuse full unsigned 64 bit math even on 32 bit platforms, pointed out base64
19980f66f451Sopenharmony_ci-w0 should disable wrapping, and sped up wc -c.
19990f66f451Sopenharmony_ciElliott Hughes added mount -o relatime, xxd -p -r, and od -w.
20000f66f451Sopenharmony_ciSameer Pradhan (or possibly Bilal Qureshi) suggested adding stat -tL -c %m%t%T.
20010f66f451Sopenharmony_ciTom Cherry added getprop -Z. Paul Barker added hostname -b and -F.
20020f66f451Sopenharmony_ciRob added ls -b, made ls -q work with utf8,
20030f66f451Sopenharmony_cimade sed -f - read from stdin, and added top -O (like ps -O).</p>
20040f66f451Sopenharmony_ci
20050f66f451Sopenharmony_ci<p>Elliott and Rob <b>added Thread support to ps and top</b>,
20060f66f451Sopenharmony_ciwith -o TID, TNAME. We also added -o PCY (android scheduling policy),
20070f66f451Sopenharmony_ci-o BIT (process is 32 or 64 bit), and -o TNAME now shows the parent
20080f66f451Sopenharmony_cicommand name for threads.</p>
20090f66f451Sopenharmony_ci
20100f66f451Sopenharmony_ci<h2>Documentation</h2>
20110f66f451Sopenharmony_ci
20120f66f451Sopenharmony_ci<p>Rob added the sed invocations to convert tabs/spaces and back to
20130f66f451Sopenharmony_cidesign.html. Isaac Dunham updated hexedit's help text.
20140f66f451Sopenharmony_ciJakob Flierl pointed out a broken URL in the README.</p>
20150f66f451Sopenharmony_ci
20160f66f451Sopenharmony_ci<p>Rob also redid the naming scheme of sed's pattern manipulation code to
20170f66f451Sopenharmony_ciremove the gratuitous references to Roger Zelazny's "Amber" series, since it
20180f66f451Sopenharmony_ciwas confusing people.</p>
20190f66f451Sopenharmony_ci
20200f66f451Sopenharmony_ci<h2>Bugfixes</h2>
20210f66f451Sopenharmony_ci
20220f66f451Sopenharmony_ci<p>Grep -H and -n should now work properly with -ABC. Andy Chu pointed out an
20230f66f451Sopenharmony_ciout of bounds access for zero length lines in rev, fixed a buffer overflow
20240f66f451Sopenharmony_ciin diff -r, and fixed operator precedence in expr (although Rob is rewriting
20250f66f451Sopenharmony_cichunks of expr so toysh can use its plumbing for $(( )) ).
20260f66f451Sopenharmony_ciPatrick Ohly fixed the too-aggressive suid permission dropping logic.
20270f66f451Sopenharmony_ciJosh Gao fixed a segfault when find -iname got no argument, and
20280f66f451Sopenharmony_cimade tail -f work right with just one file argument.
20290f66f451Sopenharmony_ciTom Marshall cleaned up tar's long filename support and improved
20300f66f451Sopenharmony_cithe tar tests, and reported another find bug (with -iname -o -iname not
20310f66f451Sopenharmony_citracking copy lifetimes properly) that got fixed.</p>
20320f66f451Sopenharmony_ci
20330f66f451Sopenharmony_ci<p>Elliott Hughes fixed wc -c to not trust zero length files to actually be
20340f66f451Sopenharmony_cizero length (/proc does that), fixed "mount -o rw,remount /system" on
20350f66f451Sopenharmony_ciAndroid, removed trailing spaces on ps -o cmdline, fixed pkill -9 and
20360f66f451Sopenharmony_cithe corresponding tests, made "insmod -" work, fixed top -b and tail -NUM,
20370f66f451Sopenharmony_cipointed out that ps shouldn't trim numeric fields for display size limits,
20380f66f451Sopenharmony_ciand added some more
20390f66f451Sopenharmony_ciexplicit "sort" calls to make pipelines so build tempfiles are easier to cache.
20400f66f451Sopenharmony_ciRob <a href=https://github.com/landley/toybox/commit/32b3587af261>fixed an insane sed thing</a> the perl 5.22 build was doing.
20410f66f451Sopenharmony_ciFixed mount -o to properly pass in leftover string data, and
20420f66f451Sopenharmony_ci<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
20430f66f451Sopenharmony_cito fix some bitrot in the kernel NFS driver's string parsing attached
20440f66f451Sopenharmony_cito that message).</p>
20450f66f451Sopenharmony_ci
20460f66f451Sopenharmony_ci<p>George Burgess IV corrected some variable types in traceroute.
20470f66f451Sopenharmony_ciBase64 now wraps == properly. Fixed two bzcat segfaults reported by
20480f66f451Sopenharmony_ciJohn Regehr. Andy Chu found a segfault in "sed -e 'c\'" with no trailing
20490f66f451Sopenharmony_ciline, and implemented mv -n and cp -n. The cyanogenmod guys pointed out that
20500f66f451Sopenharmony_cicp -a shouldn't complain if a non-root user can't chown, and we added
20510f66f451Sopenharmony_cithe output path to cp -r error messages while we were there (before was just
20520f66f451Sopenharmony_cithe filename).</p>
20530f66f451Sopenharmony_ci
20540f66f451Sopenharmony_ci<p>Samuel Holland fixed blkid's handling of vfat labels, and
20550f66f451Sopenharmony_cifixed a segfault when basename was passed an empty string and an empty
20560f66f451Sopenharmony_cisuffix. Davis Mosenkovs fixed touch -t seconds parsing.
20570f66f451Sopenharmony_ciRob fixed a bunzip bug reported by John Regehr (the bad CRC
20580f66f451Sopenharmony_cierror message was printing a NUL argument).</p>
20590f66f451Sopenharmony_ci
20600f66f451Sopenharmony_ci<p>Not all of the commands build standalone, but more of them do now;
20610f66f451Sopenharmony_ciscripts/single.sh can now build a "mv" that isn't actually "cp".
20620f66f451Sopenharmony_ciThe dependencies are more granualr, so "make top; make ps" no longer
20630f66f451Sopenharmony_ciproduces a broken ps that ignores -A (because ps.o wasn't getting rebuilt
20640f66f451Sopenharmony_cieven though top had the FLAG macros for -A zeroed).</p>
20650f66f451Sopenharmony_ci
20660f66f451Sopenharmony_ci<h2>Build</h2>
20670f66f451Sopenharmony_ci<p>Rob added a <b>warning when building commands out of
20680f66f451Sopenharmony_cipending</b>. (The pending directory is full of code that hasn't been
20690f66f451Sopenharmony_ciproperly vetted. Use at your own risk.)</p>
20700f66f451Sopenharmony_ci
20710f66f451Sopenharmony_ci<p><b>New build targets let you build individual commands by name</b>, ala
20720f66f451Sopenharmony_ci"make ls cat ps", and you can run the test suite for each standalone
20730f66f451Sopenharmony_cicommand with "make test_ls" and such.
20740f66f451Sopenharmony_ci"make list" shows all such standalone commands in defconfig, and
20750f66f451Sopenharmony_ci"make list_pending" shows unfinished commands from toys/pending
20760f66f451Sopenharmony_ci("make list list_pending" shows both together). "make clean" now deletes
20770f66f451Sopenharmony_cithese filenames at the top level, and the corresponding unstripped files
20780f66f451Sopenharmony_cilive in the directory generated/unstripped.</p>
20790f66f451Sopenharmony_ci
20800f66f451Sopenharmony_ci<p>Nicholas Boichat suggested switching make.sh to use $! for process
20810f66f451Sopenharmony_cienumeration during parallel builds (which is both more efficient and more
20820f66f451Sopenharmony_ciportable), and suggested shell builtin replacements for wc/awk/sed so the
20830f66f451Sopenharmony_cibuild loop has fewer forks now.</p>
20840f66f451Sopenharmony_ci
20850f66f451Sopenharmony_ci<p>Lots of work on the test suite, much of it due to Andy Chu. It now
20860f66f451Sopenharmony_ciconsistently prints the name of the command being tested at the start of each
20870f66f451Sopenharmony_citest (and the common infrastructure does that, not each individual test), and
20880f66f451Sopenharmony_ci"make tests" actually runs all the available tests now.
20890f66f451Sopenharmony_ciSeperated pgrep and pkill tests, split lsattr/chattr, added fstype and base64
20900f66f451Sopenharmony_citests. The "tests/files" directory now collects files for tests to
20910f66f451Sopenharmony_ciuse, with blkid, bzcat, and utf8 subdirectories: the $FILES variable
20920f66f451Sopenharmony_cigives a path to it, so "$FILES/blkid/ext2.bz2" and so on.
20930f66f451Sopenharmony_ciThe testsuite now has test files with 3 different types of "not utf8 output"
20940f66f451Sopenharmony_cisequences that require escaping, plus some combining character torture
20950f66f451Sopenharmony_citests, direction reversals, and so on.</p>
20960f66f451Sopenharmony_ci
20970f66f451Sopenharmony_ci<p>Added dependencies on TOYBOX_FORK to various pending commands that need
20980f66f451Sopenharmony_cinommu conversion (which should fix the allyesconfig build).</p>
20990f66f451Sopenharmony_ci
21000f66f451Sopenharmony_ci<p>Static builds with selinux should work again.</p>
21010f66f451Sopenharmony_ci
21020f66f451Sopenharmony_ci<h2>Library</h2>
21030f66f451Sopenharmony_ci
21040f66f451Sopenharmony_ci<p>New bufgetgrgid() and bufgetpwuid() functions cache previous lookup info
21050f66f451Sopenharmony_cirather than repeatedly traversing /etc/passwd and /etc/group (which is slow).
21060f66f451Sopenharmony_ciAdded xpipe() to lib to catch pipe creation failure.
21070f66f451Sopenharmony_ciThe HELP_ macros generated by config2help.c now use a capital prefix
21080f66f451Sopenharmony_cito avoid collicing with help_exit() and such.</p>
21090f66f451Sopenharmony_ci
21100f66f451Sopenharmony_ci<p>The dirtree infrastructure got a cleanup pass in preparation for adding
21110f66f451Sopenharmony_ciinfinite recursion depth support (needed by rm -r), updated the
21120f66f451Sopenharmony_ci<a href=code.html#ib_dirtree>documentation</a> to describe the new
21130f66f451Sopenharmony_cisemantics (removing dirtree_start() and adding dirtree_flagread()).
21140f66f451Sopenharmony_ciNow dirtree_recurse() takes the new dirfd as an argument.</p>
21150f66f451Sopenharmony_ci
21160f66f451Sopenharmony_ci<p>Split out _xexit() from xexit() and let sigatexit() set multiple
21170f66f451Sopenharmony_cicallbacks.</p>
21180f66f451Sopenharmony_ci
21190f66f451Sopenharmony_ci<p>For years the man pages have said to #include <sys/types.h> to get
21200f66f451Sopenharmony_cimajor/minor/makedev but now that glibc
21210f66f451Sopenharmony_ci<a href=https://sourceware.org/ml/libc-alpha/2015-11/msg00253.html>has vowed
21220f66f451Sopenharmony_cito break existing programs</a> and replace it with another nonstandard header
21230f66f451Sopenharmony_cinot in posix or lsb, we added our own functions to lib/ to do the transform
21240f66f451Sopenharmony_ciourselves (based on what the kernel actually expects).</p>
21250f66f451Sopenharmony_ci
21260f66f451Sopenharmony_ci<h2>Portability</h2>
21270f66f451Sopenharmony_ci
21280f66f451Sopenharmony_ci<p>Debian unstable started needing an extra header #include for some reason, and
21290f66f451Sopenharmony_cialthough printf("%.*s", INT_MAX, s) worked fine on Ubuntu 12.04 it
21300f66f451Sopenharmony_cididn't on 14.04, so added a workaround for that. Typecast a printf because
21310f66f451Sopenharmony_ciwchar_t isn't a rigidly defined size. RLIMIT_RTTIME was
21320f66f451Sopenharmony_ciadded to the kernel in 2008 but you can't expect uClibc to have noticed yet,
21330f66f451Sopenharmony_cinor did it #define MS_RELATIME (added in 2006), or prlimit (2010)...
21340f66f451Sopenharmony_ci(Given the improvements in musl and bionic, uClibc support may be dropped
21350f66f451Sopenharmony_ciin a future release.) Given that the xattr functions were added during
21360f66f451Sopenharmony_cilinux 2.5, we can #include its header unconditionally.</p>
21370f66f451Sopenharmony_ci
21380f66f451Sopenharmony_ci<p>Renamed basename_r() to something else to avoid conflicting with freebsd's
21390f66f451Sopenharmony_cilibc, and both scripts/install.h and scripts/config2help.c no longer include
21400f66f451Sopenharmony_citoys.h (to make cross-compiling from systems we don't run on easier).</p>
21410f66f451Sopenharmony_ci
21420f66f451Sopenharmony_ci<p>Debian bug 635570 did something unspeakably nonportable, depending on
21430f66f451Sopenharmony_ci"sed -e 'a\'" (with no next line of the pattern, so an unterminated
21440f66f451Sopenharmony_cicontinuation) to add a newline to the last line of input if and only if
21450f66f451Sopenharmony_cithat last line of the input didn't have a newline, and to take no other
21460f66f451Sopenharmony_ciaction. This is well into "depending on a bug" territory, but we implemented
21470f66f451Sopenharmony_ciit because otherwise Debian's install broke. (Of course this behavior
21480f66f451Sopenharmony_ciis undocumented, non-obvious, and doesn't really make logical sense.)</p>
21490f66f451Sopenharmony_ci
21500f66f451Sopenharmony_ci<p>CONFIG_TOYBOX_NORECURSE now disables the stack measuring logic (which
21510f66f451Sopenharmony_ciwas giving some "security" code fits). Also we typecast pointers to (long)
21520f66f451Sopenharmony_cibefore comparing them to avoid spurious compiler "optimizations" that
21530f66f451Sopenharmony_cibreak the code.</p>
21540f66f451Sopenharmony_ci
21550f66f451Sopenharmony_ci<a name="02-02-2016" /><a href="#02-02-2016"><hr><h2><b>February 2, 2016</b></h2></a>
21560f66f451Sopenharmony_ci<blockquote><p>"I checked it very thoroughly," said the computer, "and that
21570f66f451Sopenharmony_ciquite definitely is the answer. I think the problem, to be quite honest with
21580f66f451Sopenharmony_ciyou, is that you've never actually known what the question is."
21590f66f451Sopenharmony_ci</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
21600f66f451Sopenharmony_ci
21610f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.7.0.tar.gz>Toybox 0.7.0</a>
21620f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.7.0>git commit</a>)
21630f66f451Sopenharmony_ciis out.</p>
21640f66f451Sopenharmony_ci
21650f66f451Sopenharmony_ci<p>The new commands in defconfig are <b>iotop</b>, <b>top</b>, <b>pgrep</b>,
21660f66f451Sopenharmony_ciand <b>pkill</b>
21670f66f451Sopenharmony_ci(most replacing corresponding versions from pending). Added grep -ABC,
21680f66f451Sopenharmony_ciswapon -d (discard), mkswap -L (label) and UUID support, and find -delete.
21690f66f451Sopenharmony_ciIzabera added free -h and unshare -f. Josh Gao implemented tail -f.
21700f66f451Sopenharmony_ciJose Bollo submitted cp --preserve=context,attr. Kylie McClain added
21710f66f451Sopenharmony_cimktemp -u.</p>
21720f66f451Sopenharmony_ci
21730f66f451Sopenharmony_ci<p>In pending there's the start of a vi command, and Sameer Pradhan contributed
21740f66f451Sopenharmony_cia new dhcp6. This cycle saw several rounds of route cleanup and a little dhcp
21750f66f451Sopenharmony_cicleanup, but neither are complete yet. Lipi Lee did some cleanup to netstat.c
21760f66f451Sopenharmony_ciand Elliott Hughes removed warnings from traceroute.</p>
21770f66f451Sopenharmony_ci
21780f66f451Sopenharmony_ci<p>Lots of updates to ps: several new -o options, -k (--sort) -O and -M,
21790f66f451Sopenharmony_ciimproved compatibility with Android's historical behavior, and
21800f66f451Sopenharmony_ciextensive internal code cleanup (including the removal of all
21810f66f451Sopenharmony_cithe magic constants).</p>
21820f66f451Sopenharmony_ci
21830f66f451Sopenharmony_ci<h3><b>Website</b></h3>
21840f66f451Sopenharmony_ci
21850f66f451Sopenharmony_ci<p>Dreamhost restored the <a href="#12-21-2015">missing 11 months</a>
21860f66f451Sopenharmony_cito the mailing list archive, in the process deleting the month after
21870f66f451Sopenharmony_cithat. Now they've asked if I have mbox files archiving the new
21880f66f451Sopenharmony_cigap (between December 20, 2015 to January 21, 2016, and presumably they
21890f66f451Sopenharmony_cicould also fill in the gap from December 14, 2014 to January 3, 2015 that's
21900f66f451Sopenharmony_cibeen there since the last time they did this),
21910f66f451Sopenharmony_cibut due to some gmail filtering I've
21920f66f451Sopenharmony_ci<a href=http://landley.net/notes-2012.html#15-10-2012>never
21930f66f451Sopenharmony_cibeen able to disable</a>, my copy of those files is spread among 3 different
21940f66f451Sopenharmony_cimbox files I'd have to sort/filter/collate. (It's on the todo list.)</p>
21950f66f451Sopenharmony_ci
21960f66f451Sopenharmony_ci<p>Added a code of conduct to the README (we're
21970f66f451Sopenharmony_ci<a href=https://engineering.twitter.com/opensource/code-of-conduct>borrowing twitter's</a>) because somebody
21980f66f451Sopenharmony_cimade it necessary.</p>
21990f66f451Sopenharmony_ci
22000f66f451Sopenharmony_ci<h3><b>Bugfixes</b></h3>
22010f66f451Sopenharmony_ci<p>Fixed another sed bug where any ] right after [ was skipped (not just the
22020f66f451Sopenharmony_cifirst one in the range, so [[] didn't terminate). Fixed sort -f and added test cases.
22030f66f451Sopenharmony_ciAssume 80 columns in "ls -m | cat", ls -L is no longer backwards,
22040f66f451Sopenharmony_ciand ls of files with no paths no longer uses an uninitialized (zero) dirfd.
22050f66f451Sopenharmony_ciSeveral bugfixes
22060f66f451Sopenharmony_cito find (Gilad Arnold fixed -perm, Daniel K. Levy fixed "find . -exec echo {}",
22070f66f451Sopenharmony_ciand while we're there I fixed find --prune, made "find . -execdir
22080f66f451Sopenharmony_ciecho {} + -execdir ls {} +" work, and ripped out the environment size
22090f66f451Sopenharmony_cimeasuring code that checked for a 128k limit removed back in linux 2.6.22).
22100f66f451Sopenharmony_ciElliott Hughes fixed the date command's parsing of 4 digit
22110f66f451Sopenharmony_ciyears and documented the %s escape, fixed hwclock -u, and pointed out
22120f66f451Sopenharmony_cithat runcon needs to exec to do its job (not recursively call another
22130f66f451Sopenharmony_cicommand_main() in the same process). Tom Marshall reported that blkid was
22140f66f451Sopenharmony_cihandling ext2 wrong. Mike Moreton corrected cpio extraction's uid and gid
22150f66f451Sopenharmony_civalues, and added a --no-preserve-owner option. Fixed the SUID permission
22160f66f451Sopenharmony_cidropping logic (which was a bit over-zealous, preventing some commands from
22170f66f451Sopenharmony_cirunning at all).</p>
22180f66f451Sopenharmony_ci
22190f66f451Sopenharmony_ci<p>I'm told that debian-testing broke its libc so the nsenter build breaks,
22200f66f451Sopenharmony_cibut my attempts to install the debian-testing network cd image under
22210f66f451Sopenharmony_ciqemu keep breaking. Maybe someday they'll fix it enough I can actually
22220f66f451Sopenharmony_cireproduce the problem. (Debootstrap under unbuntu builds an ubuntu-flavored
22230f66f451Sopenharmony_cichroot in which toybox builds fine.)</p>
22240f66f451Sopenharmony_ci
22250f66f451Sopenharmony_ci<h3><b>Documentation</b></h3>
22260f66f451Sopenharmony_ci<p>Rewrite of the about.html page, tweaks to design.html, and a re-triage of
22270f66f451Sopenharmony_cisbase in roadmap.html. Update to mkstatus.py to collate multiple span
22280f66f451Sopenharmony_citags with the same id, resulting in a larger status.html page (which
22290f66f451Sopenharmony_ciwas previously ignoring some commands in the roadmap).</p>
22300f66f451Sopenharmony_ci
22310f66f451Sopenharmony_ci<p>Expanded the defconfig/allyesconfig/allnoconfighelp text in "make help"
22320f66f451Sopenharmony_cito explain what they're for.</p>
22330f66f451Sopenharmony_ci
22340f66f451Sopenharmony_ci<h3><b>infrastructure</b></h3>
22350f66f451Sopenharmony_ci<ul>
22360f66f451Sopenharmony_ci<li><p>Expanded toys.optargs to 64 bits so a command can have more than 32 options.</p></li>
22370f66f451Sopenharmony_ci<li><p>Added NOEXIT() wrapper to turn xwrap() functions into warning versions
22380f66f451Sopenharmony_ciusing the existing longjump(toys.rebound) infrastructure.</p></li>
22390f66f451Sopenharmony_ci<li><p>Renamed dirtree->data to dirfd and stopped storing symlink length
22400f66f451Sopenharmony_ciinto it (this fixed a bug where following symlinks to directories
22410f66f451Sopenharmony_cididn't give a valid directory filehandle, noticeable with ls -Z).</p></li>
22420f66f451Sopenharmony_ci<li><p>New TAGGED_ARRAY() infrastructure generates index and bitmask macros
22430f66f451Sopenharmony_cifor arrays of structures starting with a name string.</p></li>
22440f66f451Sopenharmony_ci<li><p>New lib/linestack.c for utf8 fontmetrics (draw_str() and utf8len()
22450f66f451Sopenharmony_ciand so on), and for tracking multiple lines of text
22460f66f451Sopenharmony_ci(vi, less, shell history) that need wordwrapping and scrolling up/down.</p></li>
22470f66f451Sopenharmony_ci<li><p>Upgrades to lib/interestingtimes.c: scan_key() now has a timeout
22480f66f451Sopenharmony_ciin milliseconds and recognizes more sequences including ANSI
22490f66f451Sopenharmony_ciwindow size probes. New utf8 test files in tests/files/utf8 including
22500f66f451Sopenharmony_cisequence reversing, stacked combining chars, and all three types of
22510f66f451Sopenharmony_ciunprintable sequences (low ascii <32 ala ^X, invalid utf8 sequences ala
22520f66f451Sopenharmony_ci<AB><CD>, and invalid unicode code points ala U+1234).</p></li>
22530f66f451Sopenharmony_ci<li><p>More comma handling code in lib.c: comma_args()</p></li>
22540f66f451Sopenharmony_ci<li><p>Added error_msg_raw() to shut up fortify's endless static checking false
22550f66f451Sopenharmony_cipositives.</p></li>
22560f66f451Sopenharmony_ci<li><p>readfileat() can now realloc() in a loop to read long files
22570f66f451Sopenharmony_ci("zcat | insmod" needed it).</p></li>
22580f66f451Sopenharmony_ci</ul>
22590f66f451Sopenharmony_ci
22600f66f451Sopenharmony_ci<h3><b>Roadmap</b></h3>
22610f66f451Sopenharmony_ci<p>We're getting close to having a self-hosting development environment
22620f66f451Sopenharmony_ciusing toybox for the command line. The remaining busybox commands in
22630f66f451Sopenharmony_ci<a href=http://landley.net/aboriginal/about.html>Aboriginal Linux</a> are:</p>
22640f66f451Sopenharmony_ci
22650f66f451Sopenharmony_ci<blockquote><p><b>
22660f66f451Sopenharmony_ciawk bunzip2 bzcat bzip2 dd diff expr fdisk ftpd ftpget ftpput gunzip gzip
22670f66f451Sopenharmony_ciless ping route sh sha512sum tar test tr unxz vi wget xzcat zcat
22680f66f451Sopenharmony_ci</b></p></blockquote>
22690f66f451Sopenharmony_ci
22700f66f451Sopenharmony_ci<p>And the remaining non-busybox commands in Aboriginal Linux's build/host
22710f66f451Sopenharmony_cidirectory (from the distcc, genext2fs, e2fsprogs, zlib, and squashfs packagesi)
22720f66f451Sopenharmony_ciare:</p>
22730f66f451Sopenharmony_ci
22740f66f451Sopenharmony_ci<blockquote><p><b>
22750f66f451Sopenharmony_cimke2fs fsck.ext2 resize2fs distcc genext2fs unsquashfs distccd mksquashfs tune2fs
22760f66f451Sopenharmony_ci</b></p></blockquote>
22770f66f451Sopenharmony_ci
22780f66f451Sopenharmony_ci<p>Squashfs and distcc are probably out of scope for toybox, but mke2fs,
22790f66f451Sopenharmony_cifsck.ext2, resize2fs, genext2fs, and tune2fs should all be added to the
22800f66f451Sopenharmony_ciabove "busybox" replacement list.</p>
22810f66f451Sopenharmony_ci
22820f66f451Sopenharmony_ci<p>Remind me to include this countdown in future releases. Once they've all
22830f66f451Sopenharmony_cibeen replaced, the next goal is <a href=http://landley.net/aboriginal/about.html#selfhost>building AOSP under itself</a>.</p>
22840f66f451Sopenharmony_ci
22850f66f451Sopenharmony_ci<p>See the full <a href=roadmap.html>roadmap</a> and <a href=status.html>status</a>
22860f66f451Sopenharmony_cipages for more details.</p>
22870f66f451Sopenharmony_ci
22880f66f451Sopenharmony_ci<a name="12-21-2015" /><a href="#12-21-2015"><hr><h2><b>December 21, 2015</b></h2></a>
22890f66f451Sopenharmony_ci
22900f66f451Sopenharmony_ci<p>Yes, 11 months have gone missing from the mailing list web archive.</p>
22910f66f451Sopenharmony_ci
22920f66f451Sopenharmony_ci<p>Yesterday evening Dreamhost's mailman server went down (timing out trying
22930f66f451Sopenharmony_cito connect). I poked them about it, they
22940f66f451Sopenharmony_ci<a href=https://twitter.com/landley/status/678781271670149121>blamed
22950f66f451Sopenharmony_ciDNS</a>, I explained that the hang was _after_ the DNS lookup and
22960f66f451Sopenharmony_cientered the dig info into the trouble ticket showing the IPs the DNS
22970f66f451Sopenharmony_ciqueries were returning, they reinstalled the server at that IP from what I
22980f66f451Sopenharmony_ciassume was their most recent backup, and that's how 11 months of messages
22990f66f451Sopenharmony_civanished out of the archive.</p>
23000f66f451Sopenharmony_ci
23010f66f451Sopenharmony_ci<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
23020f66f451Sopenharmony_cican do. <a href=http://landley.net/dreamhost.txt>Last time</a>
23030f66f451Sopenharmony_cithis sort of thing <a href=http://landley.net/dreamhost2.txt>happened</a>
23040f66f451Sopenharmony_ciwe went back and forth for months, so I added a link to a backup web
23050f66f451Sopenharmony_ciarchive (in the nav bar on the left) that isn't controlled by dreamhost,
23060f66f451Sopenharmony_ciand thus doesn't gratuitously lose data on a regular basis. (I note
23070f66f451Sopenharmony_cithe earlier hole in Dreamhost's archive was never fixed either. That
23080f66f451Sopenharmony_ciwas data never getting archived, this is a year's worth of data that
23090f66f451Sopenharmony_ciwas in the archive until yesterday vanishing after the fact.)</p>
23100f66f451Sopenharmony_ci
23110f66f451Sopenharmony_ci<p>If you're wondering why the <a href=http://lists.landley.net>top level</a>
23120f66f451Sopenharmony_cilist page has been "temporarily disabled" for multiple years now... you'd have
23130f66f451Sopenharmony_cito ask Dreamhost. I know I have. More than a dozen times.</p>
23140f66f451Sopenharmony_ci
23150f66f451Sopenharmony_ci<a name="03-11-2015" /><a href="#03-11-2015"><hr><h2><b>November 3, 2015</b></h2></a>
23160f66f451Sopenharmony_ci<blockquote><p>"Alright," said Ford. "How would you react if I said that I'm
23170f66f451Sopenharmony_cinot from Guildford after all, but from a small planet somewhere in the vicinity
23180f66f451Sopenharmony_ciof Betelgeuse?" Arthur shrugged in a so-so sort of way. "I don't know," he
23190f66f451Sopenharmony_cisaid, taking a pull of beer. "Why - do you think it's the sort of thing you're
23200f66f451Sopenharmony_cilikely to say?"</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
23210f66f451Sopenharmony_ci
23220f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.6.1.tar.gz>Toybox 0.6.1</a>
23230f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.6.1>git commit</a>)
23240f66f451Sopenharmony_ciis out.</p>
23250f66f451Sopenharmony_ci
23260f66f451Sopenharmony_ci<p>We have a new <b>ps</b> command with all the -o fields posix wants (although
23270f66f451Sopenharmony_ciit doesn't accept BSD non-dash option syntax yet), and <b>bunzip2</b> (not just
23280f66f451Sopenharmony_cibzcat but the proper extract-in-place command).
23290f66f451Sopenharmony_ciSameer Pradhan added <b>hostid</b> and <b>fsync</b>.
23300f66f451Sopenharmony_ciElliott Hughes added <b>flock</b>.
23310f66f451Sopenharmony_ci
23320f66f451Sopenharmony_ci<p>The people waiting for <b>human readable number support</b> (du -hH, ls -h,
23330f66f451Sopenharmony_ciand so on) can thank Elliott Hughes for implementing it. (Our output doesn't
23340f66f451Sopenharmony_ciexactly match others' because we our "binary" mode will say 1.0G instead of
23350f66f451Sopenharmony_ci1024M, which is a bug in the other one we didn't emulate.)</p>
23360f66f451Sopenharmony_ci
23370f66f451Sopenharmony_ci<p>The other big news is <b>nommu support</b>, tested on the new
23380f66f451Sopenharmony_ci<a href=http://nommu.org/jcore>jcore</a> processor but presumaby working
23390f66f451Sopenharmony_cion any nommu system. A few commands don't support nommu yet, but those
23400f66f451Sopenharmony_ciare disabled by dependencies on TOYBOX_FORK in menuconfig when building
23410f66f451Sopenharmony_cifor nommu. The roadmap now has a large section analyzing the uClinux
23420f66f451Sopenharmony_ciproject (note that <a href=http://nommu.org>nommu.org</a> is slowly replacing
23430f66f451Sopenharmony_ci<a href=http://uclinux.org>uclinux.org</a> as the standard repository of
23440f66f451Sopenharmony_ciall knowledge and wisdom about nommu. The old site <a href=#12-02-2012>contains
23450f66f451Sopenharmony_cimuch that is apocryphal</a>, or at least wildly inaccurate, and the new one
23460f66f451Sopenharmony_ciis trying to improve on that).</p>
23470f66f451Sopenharmony_ci
23480f66f451Sopenharmony_ci<p>Both "make change" and scripts/single.sh (for building standalone commands
23490f66f451Sopenharmony_ciwithout the multiplexer logic) now use the top level .config
23500f66f451Sopenharmony_cifor toybox global settings such as Linux Security Blanket Module selection,
23510f66f451Sopenharmony_ci(so make defconfig before change now).</p>
23520f66f451Sopenharmony_ci
23530f66f451Sopenharmony_ci<p>Documentation updates to the <a href=code.html>code</a> and
23540f66f451Sopenharmony_ci<a href=roadmap.html>roadmap</a> pages.</p>
23550f66f451Sopenharmony_ci
23560f66f451Sopenharmony_ci<h3>pending</h3>
23570f66f451Sopenharmony_ci
23580f66f451Sopenharmony_ci<p>In the pending directory Sameer Pradhan added tftp,
23590f66f451Sopenharmony_ciand Elliott Hughes sent lsof. Isaac Dunham upgraded mdev,
23600f66f451Sopenharmony_cireboot, init, login, and modprobe, and fixed a distro-specific build break in
23610f66f451Sopenharmony_ciscripts/mkflags.h. Elliott Hughes and Lipi Lee made netstat -p handle
23620f66f451Sopenharmony_cicommand lines longer than 21 characters, and Elliott fixed netstat -e and
23630f66f451Sopenharmony_cisome build warnings. Yeongdeok Suh fixed a warning in dhcpd.
23640f66f451Sopenharmony_ciI started cleanup on pgrep/pkill.</p>
23650f66f451Sopenharmony_ci
23660f66f451Sopenharmony_ci<h3>Command updates, bugfixes, and infrastructure</h3>
23670f66f451Sopenharmony_ci
23680f66f451Sopenharmony_ci<p>The multiplexer's "command not found" error exit is now 127, so now you can't
23690f66f451Sopenharmony_cidistinguish between a command not being found in the multiplexer and
23700f66f451Sopenharmony_cithe multiplexer itself not being found by the shell, because people wanted
23710f66f451Sopenharmony_cithat for some reason.</p>
23720f66f451Sopenharmony_ci
23730f66f451Sopenharmony_ci<p>Elliott Hughes made date reject invalid dates rather
23740f66f451Sopenharmony_cithan set the clock to something weird (setting the clock 100 years into the
23750f66f451Sopenharmony_cifuture makes most Linux desktops surprisingly unhappy, and ntpdate won't fix it
23760f66f451Sopenharmony_cieither), fixed several ls -l display issues (user/group field ordering,
23770f66f451Sopenharmony_cimake user/group/lsmcontext left aligned), did the aforementioned
23780f66f451Sopenharmony_ciextensive work on human readable number output, fixed ionice's default
23790f66f451Sopenharmony_ciclass, fixed a mv overwrite bug, made df's columns auto-size, added
23800f66f451Sopenharmony_ci--ppid and -Z to ps, and teamed up with Daniel K. Levy to fix
23810f66f451Sopenharmony_cia segfault in find's handling of -newer -group or -user.</p>
23820f66f451Sopenharmony_ci
23830f66f451Sopenharmony_ci<p>Hyejin Kim added stat -c %T support. Colin Cross worked
23840f66f451Sopenharmony_cion vmstat fixing
23850f66f451Sopenharmony_cia header printing bug and calculating the bi and bo columns in the right
23860f66f451Sopenharmony_ciunits. Isabella Parakiss reported that sed -e "/x/c\" -e "y" added an extra
23870f66f451Sopenharmony_cinewline and that grep -w '\(x\)\1' didn't work, both now fixed.
23880f66f451Sopenharmony_ciAlistair Strachan fixed several problems with switch_root. Kylie McClain
23890f66f451Sopenharmony_cipointed out env should be able to clear variables via NAME= syntax.
23900f66f451Sopenharmony_ciDima Krasner added support for running blkid without a partition (so it shows
23910f66f451Sopenharmony_ciall partitions). Hyejin Kim sent in a bunch of static analysis bug reports.</p>
23920f66f451Sopenharmony_ci
23930f66f451Sopenharmony_ci<p>Isabella Parakiss reported that sed -e "/x/c\" -e "y" added an extra
23940f66f451Sopenharmony_cinewline and that grep -w '\(x\)\1' didn't work, both now fixed.
23950f66f451Sopenharmony_ciAlistair Strachan fixed several problems with switch_root. Kylie McClain
23960f66f451Sopenharmony_cipointed out env should be able to clear variables via NAME= syntax.
23970f66f451Sopenharmony_ciDima Krasner added support for running blkid without a partition (so it shows
23980f66f451Sopenharmony_ciall partitions). Hyejin Kim sent in a bunch of static analysis bug reports.</p>
23990f66f451Sopenharmony_ci
24000f66f451Sopenharmony_ci<p>Two large thinko fixes in oneit: -3 was always enabled (which would
24010f66f451Sopenharmony_cieventually block if the child never read the exiting PID numbers from its file
24020f66f451Sopenharmony_cidescriptor #3 until the pipe filled up), and the signal handlers weren't
24030f66f451Sopenharmony_ciset up right (for requesting semi-graceful halt/poweroff/reboot).
24040f66f451Sopenharmony_ciCalling install without a mode is now 0755, and install -g 0 no longer clashes
24050f66f451Sopenharmony_ciwith cp --preserve. Better error message for ls -r on unreadable
24060f66f451Sopenharmony_cidirectories, and ls -Z now uses O_PATH (with the /proc/self/fd/%d
24070f66f451Sopenharmony_ciworkaround for kernel stupidity as necessary).</p>
24080f66f451Sopenharmony_ci
24090f66f451Sopenharmony_ci<p>Date now understands @unixtime[.fraction] and uses -D for
24100f66f451Sopenharmony_cithe set-side format (matching busybox's extension for this). The seq -f
24110f66f451Sopenharmony_cistring now checks that it's got exactly one %f escape with the correct
24120f66f451Sopenharmony_ciattributes (and a whole bunch of test cases for it). Fixed a bug
24130f66f451Sopenharmony_ciin od that screwed up the position indicator on arm and mips.
24140f66f451Sopenharmony_ciIn stat the d/h units moved from %d %D to the default string.
24150f66f451Sopenharmony_ciAnd patch can now correctly apply hunks with trailing context to the start of
24160f66f451Sopenharmony_cithe file.</p>
24170f66f451Sopenharmony_ci
24180f66f451Sopenharmony_ci<p>The prompt argument moved out of yesno() (the caller can print the prompt
24190f66f451Sopenharmony_cithemselves). Replaced toys.exithelp with help_exit(). Added new
24200f66f451Sopenharmony_ciXVFORK() macro, and xpopen_both() calls /proc/self/exe when passed
24210f66f451Sopenharmony_cia NULL argv (see cpio -p for example usage). Replaced toys.recurse
24220f66f451Sopenharmony_ciwith toys.stacktop so the recurse or re-exec decision is now based
24230f66f451Sopenharmony_cion bytes of stack space used. Marked a bunch of command-local functions
24240f66f451Sopenharmony_cistatic.</p>
24250f66f451Sopenharmony_ci
24260f66f451Sopenharmony_ci<p>New additions to lib/ include strlower(), xconnect(), and the
24270f66f451Sopenharmony_ciaforementioned help_exit().
24280f66f451Sopenharmony_ciThe testsuite now has some infrastructure tests based on "example"
24290f66f451Sopenharmony_cicommands such as toys/examples/test_human_readable.c.
24300f66f451Sopenharmony_ciThe login command finally got a long-overdue cleanup (it's one of the
24310f66f451Sopenharmony_cicommands that predate the "pending" directory but were part of the reason
24320f66f451Sopenharmony_cifor it). Hexedit had an
24330f66f451Sopenharmony_ciuninitialized variable (of course gcc didn't spot it, it was too busy
24340f66f451Sopenharmony_ciwarning about "may be used uninitialized but never actually is" variables).</p>
24350f66f451Sopenharmony_ci
24360f66f451Sopenharmony_ci<p>Tweaked makefile so
24370f66f451Sopenharmony_ci"make CROSS_COMPILE=prefix-" (as well as "CROSS_COMPILE=prefix- make",
24380f66f451Sopenharmony_ciwhich still works). Toybox is now installed chmod -w so broken installers
24390f66f451Sopenharmony_ci(like the bunzip2 package's) that try to overwrite existing binaries won't
24400f66f451Sopenharmony_ciknock out the whole of toybox.
24410f66f451Sopenharmony_ciGCC 5.2.0 stopped being able to compile Linux 2.6.12's kconfig, but
24420f66f451Sopenharmony_ciwe added a workaround. You can now build uptime without utmpx.h.
24430f66f451Sopenharmony_ciAlejandro Joya pointed out that enabling smack required smack on the host
24440f66f451Sopenharmony_cias well as target when cross compiling, which is now fixed.</p>
24450f66f451Sopenharmony_ci
24460f66f451Sopenharmony_ci<p>Note: toybox can autodetect nommu support when building with a uClibc
24470f66f451Sopenharmony_citoolchain 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>,
24480f66f451Sopenharmony_cibut <a href=http://github.com/richfelker/musl-cross-make>with musl-libc</a>
24490f66f451Sopenharmony_ciyou'll have to enable CONFIG_TOYBOX_MUSL_NOMMU_IS_BROKEN to work around the
24500f66f451Sopenharmony_cifact they provide a non-functional fork() implementation that always returns
24510f66f451Sopenharmony_ci-ENOSYS, to prevent you from compile-time probing for nommu support when
24520f66f451Sopenharmony_cicross-compiling. Unfortunately "preventing you from probing" seems to be
24530f66f451Sopenharmony_cian explicit policy with musl, they also don't provide an "#ifdef __MUSL__"
24540f66f451Sopenharmony_cibecause their library is perfect and you're only ever allowed to work around
24550f66f451Sopenharmony_ciother people's bugs, not theirs. So we have to use menuconfig to manually
24560f66f451Sopenharmony_cienable musl-specific bug workarounds.</p>
24570f66f451Sopenharmony_ci
24580f66f451Sopenharmony_ci<a name="23-07-2015" /><a href="#23-07-2015"><hr><h2><b>July 23, 2015</b></h2></a>
24590f66f451Sopenharmony_ci<p>I recreated the <a href=downloads/toybox-0.6.0.tar.gz>0.6.0 source tarball</a>
24600f66f451Sopenharmony_ci(new sha1sum 08fb1c23f520c25a15f262a8a95ea5b676a98d54)
24610f66f451Sopenharmony_cibecause I forgot to add --prefix to the git archive command when I updated
24620f66f451Sopenharmony_cimy release script from mercurial, so the files weren't in an enclosing
24630f66f451Sopenharmony_cidirectory. (Ooops.)</p>
24640f66f451Sopenharmony_ci
24650f66f451Sopenharmony_ci<a name="19-07-2015" /><a href="#19-07-2015"><hr><h2><b>July 19, 2015</b></h2></a>
24660f66f451Sopenharmony_ci<blockquote><p>
24670f66f451Sopenharmony_ciThe reason why it was published in the form of a micro sub meson electronic
24680f66f451Sopenharmony_cicomponent is that if it were printed in normal book form, an interstellar
24690f66f451Sopenharmony_cihitchhiker would require several inconveniently large buildings to carry it
24700f66f451Sopenharmony_ciaround in.</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
24710f66f451Sopenharmony_ci
24720f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.6.0.tar.gz>Toybox 0.6.0</a>
24730f66f451Sopenharmony_ci(<a href=https://github.com/landley/toybox/releases/tag/0.6.0>git commit</a>)
24740f66f451Sopenharmony_ciis out. (Yes, git. See the <a href=#05-04-2015>previous news entry</a>.)</p>
24750f66f451Sopenharmony_ci
24760f66f451Sopenharmony_ci<p>Sorry for the unusually long gap between releases. Since last release Ye
24770f66f451Sopenharmony_ciOlde Project Maintainer traveled to japan twice and had two more "once
24780f66f451Sopenharmony_cia century" floods at home. (Probably a coincidence.) Still catching up.</p>
24790f66f451Sopenharmony_ci
24800f66f451Sopenharmony_ci<h3><b>CELF/ELC talk and Wikipedia[citation needed] article</b></h3>
24810f66f451Sopenharmony_ci
24820f66f451Sopenharmony_ci<p>I gave another State Of The Toybox talk
24830f66f451Sopenharmony_ci(<a href=https://www.youtube.com/watch?v=04XwAbtPmAg>video</a>
24840f66f451Sopenharmony_ci<a href=http://landley.net/talks/celf-2015.txt>outline</a>), in which I
24850f66f451Sopenharmony_cirepeat my <a href=http://landley.net/notes-2013.html#07-11-2013>perennial</a>
24860f66f451Sopenharmony_ci<a href=https://twitter.com/landley/status/557309224535851009>complaint</a>
24870f66f451Sopenharmony_cithat Wikipedia[citation needed]
24880f66f451Sopenharmony_ci<a href=http://en.wikipedia.org/wiki/Toybox>still</a>
24890f66f451Sopenharmony_ci<a href=https://en.wikipedia.org/wiki/BusyBox#Controversy_over_Toybox>says</a>
24900f66f451Sopenharmony_citoybox was relicensed before its hiatus, when relicensing was why
24910f66f451Sopenharmony_cithe hiatus ended.</p>
24920f66f451Sopenharmony_ci
24930f66f451Sopenharmony_ci<p>Since Wikipedia[citation needed] seems unable to do the
24940f66f451Sopenharmony_ci<a href=#15-11-2011>most</a>
24950f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/log/tip/LICENSE>basic</a>
24960f66f451Sopenharmony_ci<a href=http://landley.net/notes-2011.html#13-11-2011>research</a> on
24970f66f451Sopenharmony_cithis point, and has stuck to an incorrect sequence of events for years,
24980f66f451Sopenharmony_ciI've been gradually escalating my attempts to correct them. Toybox
24990f66f451Sopenharmony_cicame out of mothballs in November 2011 <b>because</b> it could be
25000f66f451Sopenharmony_cirelicensed. That's what opened up a new niche busybox wasn't already
25010f66f451Sopenharmony_cifilling with a 10 year headstart.</p>
25020f66f451Sopenharmony_ci
25030f66f451Sopenharmony_ci<a name="asterisk_back" />
25040f66f451Sopenharmony_ci<p>The article has plenty of smaller issues<a href=#asterisk>*</a>, but
25050f66f451Sopenharmony_cigiven that I gave an entire talk at Ohio LinuxFest in 2013
25060f66f451Sopenharmony_ci(<a href=http://landley.net/talks/ohio-2013.txt>outline</a>,
25070f66f451Sopenharmony_ci<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
25080f66f451Sopenharmony_cimy projects, that one bugs me.</p>
25090f66f451Sopenharmony_ci
25100f66f451Sopenharmony_ci<h3><b>New stuff this release</b></h3>
25110f66f451Sopenharmony_ci
25120f66f451Sopenharmony_ci<p>There's a new android menu in menuconfig, and rather a lot of Linux
25130f66f451Sopenharmony_ciSecurity Module support (Smack for Tizen from Xavier Roche and José Bollo,
25140f66f451Sopenharmony_ciand SELinux for Android from Elliott Hughes; see
25150f66f451Sopenharmony_cithe Security Blanket menu under global settings in menuconfig) has
25160f66f451Sopenharmony_citrickled in, although there's still more to come.</p>
25170f66f451Sopenharmony_ci
25180f66f451Sopenharmony_ci<p><b>New commands:</b> Added reset, nproc, ionice, and iorenice.
25190f66f451Sopenharmony_ciElliott Hughes contributed xxd, runcon,
25200f66f451Sopenharmony_cirestorecon, load_policy, getenforce, setenforce, getprop, and setprop.
25210f66f451Sopenharmony_ciPromoted shred, nsenter, and hwclock.</p>
25220f66f451Sopenharmony_ci
25230f66f451Sopenharmony_ci<p>You can once again build catv now the flag infrastructure's been updated to
25240f66f451Sopenharmony_cilet it coexist with cat -v.
25250f66f451Sopenharmony_ciAnd on a long plane flight I wrote
25260f66f451Sopenharmony_cihexedit, an interactive hex editor that implements the start of
25270f66f451Sopenharmony_cicursor control infrastructure (for eventual use by less and vi and shell
25280f66f451Sopenharmony_cicommand history and so on).</p>
25290f66f451Sopenharmony_ci
25300f66f451Sopenharmony_ci<p><b>New options:</b> Added sed -E as a BSD-compatible synonym for -r.
25310f66f451Sopenharmony_ciUpgraded oneit with -r (restart), -3 (send exiting PID values to child),
25320f66f451Sopenharmony_ciand signal handling. Added -v option to timeout, -m to mknod, -u to shred,
25330f66f451Sopenharmony_ci-t to dmesg, and -123 to head and tail. Added implicit "." to grep -r without
25340f66f451Sopenharmony_ciany files to work on. Hyejin Kim requested prefix support for truncate -s.
25350f66f451Sopenharmony_ciGreg Hackman added -inum to find.
25360f66f451Sopenharmony_ciJan Cybulski added the smack side of ls -Z support. Various patches also
25370f66f451Sopenharmony_ciadded -Z to mkdir, mknod, and mkfifo.
25380f66f451Sopenharmony_ciBasic cp --preserve support went in, but not yet the xattr/LSM parts.</p>
25390f66f451Sopenharmony_ci
25400f66f451Sopenharmony_ci<p>The toybox command now has a --version option,
25410f66f451Sopenharmony_ciwhich uses "git describe" if available.</p>
25420f66f451Sopenharmony_ci
25430f66f451Sopenharmony_ci<p><b>Build infrastructure:</b>
25440f66f451Sopenharmony_ciThe "make change" target now saves the output of each failed standalone
25450f66f451Sopenharmony_cicommand build in a .bad file, and "make defconfig" is quieter now.</p>
25460f66f451Sopenharmony_ci
25470f66f451Sopenharmony_ci<p>Paul Barker submitted a large patch changing command install paths so
25480f66f451Sopenharmony_ci"toybox can be installed alongside busybox without confusing
25490f66f451Sopenharmony_ciupdate-alternatives". (There's some argument over
25500f66f451Sopenharmony_ciwhat the right paths should be, and I'm waiting for
25510f66f451Sopenharmony_cipeople to tell me what else needs fixing because I have no idea. I've
25520f66f451Sopenharmony_cibeen symlinking /bin to /usr/bin since 2002
25530f66f451Sopenharmony_ci<a href=http://landley.net/writing/hackermonthly-issue022-pg33.pdf>for
25540f66f451Sopenharmony_cihistorical reasons</a>.)</p>
25550f66f451Sopenharmony_ci
25560f66f451Sopenharmony_ci<p><b>Docs:</b> The repository link now goes to github, with another link
25570f66f451Sopenharmony_cito the commit rss feed.</p>
25580f66f451Sopenharmony_ci
25590f66f451Sopenharmony_ci<p>Elliott Hughes updated the Android section of the roadmap
25600f66f451Sopenharmony_ci(and he would know). Redid bits of scripts/mkstatus.py to make updating
25610f66f451Sopenharmony_cistatus.html easier, and the README is larger.</p>
25620f66f451Sopenharmony_ci
25630f66f451Sopenharmony_ci<p>More description of option parsing in code.html, which now describes the
25640f66f451Sopenharmony_ciFLAG_x macros, switching flag macro sets with FOR_newcommand, how
25650f66f451Sopenharmony_ciconfiguration zeroes flag macros and using FORCE_FLAGS to suppress the
25660f66f451Sopenharmony_cizeroing of options shared between commands. Also added description of ";"
25670f66f451Sopenharmony_cito make --longopts take an optional =value part, and more about TOYBOX_DEBUG
25680f66f451Sopenharmony_cito check NEWTOY() option strings (otherwise a bad option string makes
25690f66f451Sopenharmony_cilib/args.c obviously segfault, but doesn't explain why).</p>
25700f66f451Sopenharmony_ci
25710f66f451Sopenharmony_ci<p>Added a "Why 0BSD?" section to license.html when submitting zero clause bsd
25720f66f451Sopenharmony_cito SPDX (according to the pending license spreadsheet, it's been approved for
25730f66f451Sopenharmony_ciSPDX 2.2).</p>
25740f66f451Sopenharmony_ci
25750f66f451Sopenharmony_ci<p>The old list of commands needing cleanup but not in pending was
25760f66f451Sopenharmony_ciremoved from toys/pending/README and instead the issues were added
25770f66f451Sopenharmony_cias TODO comments in the individual commands.</p>
25780f66f451Sopenharmony_ci
25790f66f451Sopenharmony_ci<p><b>Bugfixes:</b>
25800f66f451Sopenharmony_ciFixed mount -a segfaulting without -O (reported by Janus Troelsen),
25810f66f451Sopenharmony_ciand made it try a "become rw" ioctl() on the block device before falling
25820f66f451Sopenharmony_ciback to mounting read only (because Android expects that).
25830f66f451Sopenharmony_ciFixed printf -- and printf ---. Lots of tweaks to ls -l spacing with
25840f66f451Sopenharmony_cidifferent options. Make touch -d and -t actually set time when you don't
25850f66f451Sopenharmony_cispecify nanoseconds.
25860f66f451Sopenharmony_ciFixed a subtle bug where recursive calls (toybox commands that run other
25870f66f451Sopenharmony_citoybox commands) weren't resetting all their state. (This manifested as
25880f66f451Sopenharmony_cia "no }" error from "find | xargs sed", but could cause other problems.)
25890f66f451Sopenharmony_ciAnd David Halls reported another sed bug trying to compile libiconv (which
25900f66f451Sopenharmony_cileft extra \ at the start of lines in a generated shell script, breaking
25910f66f451Sopenharmony_cithe build). Output an error message for "cat /mnt".</p>
25920f66f451Sopenharmony_ci
25930f66f451Sopenharmony_ci<p>Kylie McClain reported that mktemp broke when $TMPDIR was set to an empty
25940f66f451Sopenharmony_cistring (which is not the same as unset), that install/find didn't support
25950f66f451Sopenharmony_cinumeric uid/gids, and that sort -z affects both input and output.
25960f66f451Sopenharmony_ciIsabella Parakiss fixed a printf.c bug.
25970f66f451Sopenharmony_ciDavid Halls fixed bugs in install -D and find -exec. Samuel Holland
25980f66f451Sopenharmony_cifixed unshare -r. Hyejin Kim fixed makedevs with a count of 1, fold -w
25990f66f451Sopenharmony_cirange checking, an error path in scripts/mkflags.c, added -i to dhcpd,
26000f66f451Sopenharmony_ciand stopped su from prompting the root user for the new user's password.
26010f66f451Sopenharmony_ciJan Cybulski spotted wrong indentation when combining ls -s and -i with -C and
26020f66f451Sopenharmony_ci-x. José Bollo fixed stat %G. Sameer Pradhan fixed a bug in mkfifo -Z.</p>
26030f66f451Sopenharmony_ci
26040f66f451Sopenharmony_ci<p>Elliott Hughes asked for a default SIGPIPE handler to disable
26050f66f451Sopenharmony_cithe signal handler bionic's dynamic loader installs (yes really). Still not
26060f66f451Sopenharmony_ci100% sure what the correct behavior is there. (Posix is
26070f66f451Sopenharmony_ci(<a href=http://permalink.gmane.org/gmane.comp.standards.posix.austin.general/10915>actively unhelpful</a>, but at least they're taking
26080f66f451Sopenharmony_ci<a href=http://austingroupbugs.net/view.php?id=789#c1976>years to
26090f66f451Sopenharmony_cimake up their mind</a>. Elliott also sent patches to fix a typo in
26100f66f451Sopenharmony_ciuseradd.test, add missing arguments to error_exit() calls and clean up
26110f66f451Sopenharmony_ciprintf() format strings, fix an off by one error in human_readable(),
26120f66f451Sopenharmony_cifix dmesg -c error reporting, fix a segfault in comma_scan where the option
26130f66f451Sopenharmony_ciwas the last item in optlist (triggered by mount -o ro,remount), fix
26140f66f451Sopenharmony_cihwclock -w, made ifconfig print lowercase MAC addresses (it was bothering
26150f66f451Sopenharmony_cihim), and make terminal_size() read the right environment variable
26160f66f451Sopenharmony_ci(LINES, not ROWS). And he suggested the test suite notice high command exit
26170f66f451Sopenharmony_civalues (corresponding to segfault or other signals).</p>
26180f66f451Sopenharmony_ci
26190f66f451Sopenharmony_ci<p>People are apparently using toys/pending commands, despite the police tape
26200f66f451Sopenharmony_ciand flashing lights, so added louder warnings to toys/pending/README.
26210f66f451Sopenharmony_ciElliott Hughes fixed various problems with tar, dd, more, and top.
26220f66f451Sopenharmony_ciHyejin Kim cleaned up syslogd and dumpleases. Isaac Dunham added hotplug
26230f66f451Sopenharmony_cisupport to mdev. Yeongdeok Suh added RFC-3315 ipv6 support to dhcpd.</p>
26240f66f451Sopenharmony_ci
26250f66f451Sopenharmony_ci<p>I rewrote ps.c from scratch (in pending), but it's not ready for real use
26260f66f451Sopenharmony_ciyet.</p>
26270f66f451Sopenharmony_ci
26280f66f451Sopenharmony_ci<p><b>Portability:</b>
26290f66f451Sopenharmony_ciOn the portability front Bernhard Rosenkranzer fixed a problem where the
26300f66f451Sopenharmony_cimenuconfig code wouldn't compile in C99 mode. (This led to me documenting
26310f66f451Sopenharmony_cithe craptacular nature of kconfig in a README, and the plan to replace it
26320f66f451Sopenharmony_cisometime before 1.0.) Some extra flags to shut up overzealous llvm warnings
26330f66f451Sopenharmony_ciwere added (and have to be probed for because gcc complains about
26340f66f451Sopenharmony_ciarguments it doesn't recognize even when they switch stuff _off_ using
26350f66f451Sopenharmony_cia standard syntax). Don't depend on malloc(0) to return non-null in ls.
26360f66f451Sopenharmony_ciDavid Halls fixed some mac/ios portability issues,
26370f66f451Sopenharmony_ciimplying somebody's built at least part of toybox on a mac.</p>
26380f66f451Sopenharmony_ci
26390f66f451Sopenharmony_ci<p>Added basename_r() to lib/lib.c because the posix semantics for basename()
26400f66f451Sopenharmony_ciare stupid but what the gnu guys did to it was appalling.
26410f66f451Sopenharmony_ciTurns out bionic already had a basename_r(), but posix still doesn't.
26420f66f451Sopenharmony_ciFixed it up in portability.h, but this
26430f66f451Sopenharmony_cicould break more stuff in future. (Correct fix is to lobby posix to add it,
26440f66f451Sopenharmony_ciwhich would probably take about 15 years...)</p>
26450f66f451Sopenharmony_ci
26460f66f451Sopenharmony_ci<p><b>Infrastructure:</b>
26470f66f451Sopenharmony_ciThe build now checks $LDFLAGS for linker-only flags, and allows the strip
26480f66f451Sopenharmony_cicommand to fail (binflt toolchains provide a strip that doesn't work).
26490f66f451Sopenharmony_ciSince time.c uses floating point, added TOYBOX_FLOAT dependency in config.</p>
26500f66f451Sopenharmony_ci
26510f66f451Sopenharmony_ci<p>There's a lib/lsm.h defining varous inline functions for linux
26520f66f451Sopenharmony_cisecurity modules stuff, if (lsm_enabled()) should turn into a compile-time
26530f66f451Sopenharmony_ciconstant 0 and let code drop out when TOYBOX_LSM_NONE selected, but
26540f66f451Sopenharmony_citesting against CFG_TOYBOX_LSM_NONE or derived symbols is still useful
26550f66f451Sopenharmony_cibecuase when it _is_ enabled the probe turns into a system call you
26560f66f451Sopenharmony_cidon't want to repeat too much.</p>
26570f66f451Sopenharmony_ci
26580f66f451Sopenharmony_ci<p>Switched a bunch of commands from signal() to xsignal(). Factored out
26590f66f451Sopenharmony_cixgetgrnamid() and xgetpwnamid() into xwrap.c. Make time.c depend on
26600f66f451Sopenharmony_ciTOYBOX_FLOAT (since it always uses float so shouldn't be available on
26610f66f451Sopenharmony_cibuild targets without even software float). Added readfileat() to lib/lib.c.</p>
26620f66f451Sopenharmony_ci
26630f66f451Sopenharmony_ci<p>The dirtree infrastructure now passes in full flags for the old symlink
26640f66f451Sopenharmony_cifield, and the new DIRTREE_SHUTUP flag disables warnings if a file vanishes
26650f66f451Sopenharmony_ciout from under you during traverse. New dirtree_start() wrapper to
26660f66f451Sopenharmony_cicreate dirtree root with only two arguments.</p>
26670f66f451Sopenharmony_ci
26680f66f451Sopenharmony_ci<p>The not-curses infrastructure introduced by hexedit mostly moved to
26690f66f451Sopenharmony_cilib/interestingtimes.c.</p>
26700f66f451Sopenharmony_ci
26710f66f451Sopenharmony_ci<a name="asterisk" />
26720f66f451Sopenharmony_ci<a href="#asterisk_back" />Asterisk:</a> such when
26730f66f451Sopenharmony_ciTim contacted me (my blog says a couple days before nov 13, 2011, I.E.
26740f66f451Sopenharmony_ci11/11/11 not some specific day 2 months later) to ask if I wanted to work
26750f66f451Sopenharmony_cion a new project he was proposing called
26760f66f451Sopenharmony_ci<a href=http://www.elinux.org/Busybox_replacement_project>BentoBox</a>
26770f66f451Sopenharmony_ci(because I used to do busybox, he'd forgotten toybox existed
26780f66f451Sopenharmony_ciuntil I brought it up). And don't ask me what "focuses not on compatibility
26790f66f451Sopenharmony_ciwith its GNU counterparts" means when CP_MORE adds 7 non-posix options
26800f66f451Sopenharmony_ciand toys/other has 84 commands in neither posix nor LSB. I think they're
26810f66f451Sopenharmony_cistruggling to explain the difference having dismissed "licensing" as being
26820f66f451Sopenharmony_cithe reason it started up again after a long hiatus? The reason I don't think
26830f66f451Sopenharmony_ciGNU is special is there are a half-dozen other independent
26840f66f451Sopenharmony_ciimplementations of the same unix command tools out there (AT&amp;T,
26850f66f451Sopenharmony_ciBSD, Coherent, Minix, plan 9, busybox, toybox, and several more analyzed in
26860f66f451Sopenharmony_cithe <a href=roadmap.html>roadmap</a>, and that's ignoring the implementations
26870f66f451Sopenharmony_ciwritten for DOS or in assembly over the years). But I do care what
26880f66f451Sopenharmony_ciLinux From Scratch expects, and if it's
26890f66f451Sopenharmony_ci<a href=http://archive.linuxfromscratch.org/lfs-museum/7.6/LFS-BOOK-7.6-NOCHUNKS.html#ch-tools-gcc-pass1>calling mv -v</a>
26900f66f451Sopenharmony_cithen I impelement mv -v
26910f66f451Sopenharmony_cieven if <a href=http://landley.net/toybox/roadmap.html>posix hasn't got
26920f66f451Sopenharmony_ciit</a>. And I don't know why "gnu counterparts" would describe this when
26930f66f451Sopenharmony_ciutil-linux isn't a gnu package, nor are info-zip, e2fsprogs, kmod, less,
26940f66f451Sopenharmony_ciprocps, shadow, sysklogd, vim, zlib, sudo, dhcpcd...</p>
26950f66f451Sopenharmony_ci
26960f66f451Sopenharmony_ci<a name="05-04-2015" /><a href="#05-04-2015"><hr><h2><b>April 5, 2015</b></h2></a>
26970f66f451Sopenharmony_ci<p>Since <a href=https://android.googlesource.com/platform/external/toybox/>android</a> and
26980f66f451Sopenharmony_ci<a href=https://git.tizen.org/cgit/platform/upstream/toybox.git>tizen</a>
26990f66f451Sopenharmony_ciand <a href=https://github.com/kraj/meta-musl/tree/master/recipes-core/toybox>openembedded</a>
27000f66f451Sopenharmony_ciand <a href=https://packages.gentoo.org/package/sys-apps/toybox>gentoo</a>
27010f66f451Sopenharmony_ciand so on have all been using Georgi Chorbadzhiyski's git mirror rather
27020f66f451Sopenharmony_cithan the mercurial repository, I bit the bullet and switched the project's repo
27030f66f451Sopenharmony_ci<a href=https://github.com/landley/toybox>to git</a>. Georgi's
27040f66f451Sopenharmony_ci<a href=https://github.com/gfto/toybox>mirror</a> is now pulling from that.</p>
27050f66f451Sopenharmony_ci
27060f66f451Sopenharmony_ci<a name="25-02-2015" /><a href="#25-02-2015"><hr><h2><b>February 25, 2015</b></h2></a>
27070f66f451Sopenharmony_ci<blockquote><p>"A common mistake that people make when trying to design
27080f66f451Sopenharmony_cisomething completely foolproof is to underestimate the ingenuity of
27090f66f451Sopenharmony_cicomplete fools."</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
27100f66f451Sopenharmony_ci
27110f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.5.2.tar.gz>Toybox 0.5.2</a>
27120f66f451Sopenharmony_ci(<a href=/hg/toybox/shortlog/1702>commit 1702</a>) is out.</p>
27130f66f451Sopenharmony_ci
27140f66f451Sopenharmony_ci<p>New promoted commands: sed (finally fixed enough it builds Linux From
27150f66f451Sopenharmony_ciScratch), printf (cleaned up and promoted), shred and
27160f66f451Sopenharmony_cibase64 (the Tizen guys wanted them), getenforce, setenforce, and chcon (android),
27170f66f451Sopenharmony_cimix (promoted with fixes from Isaac Dunham), nsenter (from
27180f66f451Sopenharmony_ciAndy Lutomirski, merged into unshare).</p>
27190f66f451Sopenharmony_ci
27200f66f451Sopenharmony_ci<p>Elliott Hughes submited a bunch of patches to support Android (to
27210f66f451Sopenharmony_ciboth toybox and Bionic libc, which he maintains). On toybox's end this
27220f66f451Sopenharmony_ciinvolved a lot of fixups to portability.[ch] and fixes to over a dozen
27230f66f451Sopenharmony_cicommands, plus several new ones. Other portability fixes included working
27240f66f451Sopenharmony_ciwith buildroot's uclibc fork and building for nommu targets.</p>
27250f66f451Sopenharmony_ci
27260f66f451Sopenharmony_ci<p>The new "make change" target builds each toybox command as a standalone
27270f66f451Sopenharmony_cibinary. Rather a lot of commands that didn't build by themselves (mv depending
27280f66f451Sopenharmony_cion cp and so on) were hit with a large rock until they built standalone.
27290f66f451Sopenharmony_ciThis involved rewriting bits of option parsing, more elaborate dependency
27300f66f451Sopenharmony_cigeneration, making each command have its own config
27310f66f451Sopenharmony_cisymbol and main() function (even when it's just a wrapper calling another
27320f66f451Sopenharmony_cicommand's main()), and so on. Also, some commands can't be built standalone
27330f66f451Sopenharmony_ciat a conceptual level: "help" describes other enabled commands and "sh"
27340f66f451Sopenharmony_cihas a number of bulitin commands (cd, exit, set) that require the
27350f66f451Sopenharmony_cimultiplexer infrastructure, so "make change" filters them out.</p>
27360f66f451Sopenharmony_ci
27370f66f451Sopenharmony_ci<p>The mailing list's web archive is still screwed up. Dreamhost has
27380f66f451Sopenharmony_cibeen trying to fix it since approximately September. There are
27390f66f451Sopenharmony_ci<a href=http://www.mail-archive.com/toybox@lists.landley.net/>two</a>
27400f66f451Sopenharmony_ci<a href=http://news.gmane.org/gmane.linux.toybox>other</a> less broken
27410f66f451Sopenharmony_ciarchives, but neither has quite the same UI as mailman.</p>
27420f66f451Sopenharmony_ci
27430f66f451Sopenharmony_ci<h3>Bugfixes and tweaks</h3>
27440f66f451Sopenharmony_ci
27450f66f451Sopenharmony_ci<p>Cynt Rynt sent in tests for ifconfig,
27460f66f451Sopenharmony_ciRobert Thompson taught factor to accept whitespace separated arguments,
27470f66f451Sopenharmony_ciHyejin Kim pointed out that some of mktemp's longopts were attached to
27480f66f451Sopenharmony_cithe wrong short options,
27490f66f451Sopenharmony_ciLuis Felipe Strano Moraes fixed a wrong free() call in bootchartd in pending.
27500f66f451Sopenharmony_ciPatches from Ashwini Sharma to make "df /dev/node" work, prevent du from
27510f66f451Sopenharmony_cilooping endlessly following symlinks, and to make expr.c
27520f66f451Sopenharmony_ci(in pending) understand == and regex matches. (Speaking of expr, it gets
27530f66f451Sopenharmony_cipriority groupings wrong but the bug was actually in the posix spec's
27540f66f451Sopenharmony_ciHTML conversion. They fixed the posix spec upstream for us. Still need
27550f66f451Sopenharmony_cito fix the expr code, but it's in pending for a reason...)</p>
27560f66f451Sopenharmony_ci
27570f66f451Sopenharmony_ci<p>Some commands grew new option flags, such as cp --remove-destination
27580f66f451Sopenharmony_ciand touch -h.</p>
27590f66f451Sopenharmony_ci
27600f66f451Sopenharmony_ci<p>The parallel build has better error reporting now. When toybox needs to
27610f66f451Sopenharmony_cire-exec itself to regain suid root permissions and hasn't got the suid bit,
27620f66f451Sopenharmony_ciit now gives the right error message ("not root" instead of "no such command").
27630f66f451Sopenharmony_ci
27640f66f451Sopenharmony_ci<p>Added a test to "mount" to not mount the same device/directory combination
27650f66f451Sopenharmony_ciover itself (the OS catches this for block devices, but not for tmpfs).
27660f66f451Sopenharmony_ciMake blkid distinguish ext3 from ext4. Added catv back into cat (because
27670f66f451Sopenharmony_cithe Android guys wanted it, and they have historical usage on their side,
27680f66f451Sopenharmony_ciso...). Handle nanoseconds in touch.</p>
27690f66f451Sopenharmony_ci
27700f66f451Sopenharmony_ci<p>Fixed a segfault when CP_MORE was disabled (the resulting option flag list
27710f66f451Sopenharmony_cino longer defined -d but still had it in option groups at the end).
27720f66f451Sopenharmony_ciWorkaround for glibc redefining dirname() and basename() to random non-posix
27730f66f451Sopenharmony_cisemantics because gnu. (They could have created dirname_r() but didn't want
27740f66f451Sopenharmony_cito.)</p>
27750f66f451Sopenharmony_ci
27760f66f451Sopenharmony_ci<p>Fix an ifconfig test that was preventing assigning an ipv4 address to
27770f66f451Sopenharmony_ciinterface aliases. Several cleanup passes on hwclock but not quite
27780f66f451Sopenharmony_cipromoted out of pending yet.<p>
27790f66f451Sopenharmony_ci
27800f66f451Sopenharmony_ci<p>Fixed a wrong error message in rm (if you had a chmod 000 directory and
27810f66f451Sopenharmony_cidid rm -r on it without -f, after the prompt it would complain it was a
27820f66f451Sopenharmony_cidirectory, which was not the problem).</p>
27830f66f451Sopenharmony_ci
27840f66f451Sopenharmony_ci<p>The gzip compression code now does "store only" output to stdout, for
27850f66f451Sopenharmony_ciwhat that's worth.</p>
27860f66f451Sopenharmony_ci
27870f66f451Sopenharmony_ci<p>Cleanup mountpoint and expand, and remove them from toys/pending/README
27880f66f451Sopenharmony_ci(a list of commands that predate the toys/pending directory but needed
27890f66f451Sopenharmony_cianother pass).</p>
27900f66f451Sopenharmony_ci
27910f66f451Sopenharmony_ci<h3>Library and infrastructure:</h3>
27920f66f451Sopenharmony_ci
27930f66f451Sopenharmony_ci<p>Reworked the option parsing infrastructure so more commands build
27940f66f451Sopenharmony_cistandalone (via scripts/single.sh or "make change"). The option flag bit
27950f66f451Sopenharmony_civalues are no longer packed, it leaves spaces where currently disabled
27960f66f451Sopenharmony_ciflags go, and you can #define FORCE_FLAGS so disabled flags aren't zeroed.
27970f66f451Sopenharmony_ciThis allows multiple commands to more easily share infrastructure, even if
27980f66f451Sopenharmony_ciyour current flag context is for a disabled command (switched off in config),
27990f66f451Sopenharmony_ciyou can force them to stay on and as long as the flags read the same right
28000f66f451Sopenharmony_cito left they'll have the same values.</p>
28010f66f451Sopenharmony_ci
28020f66f451Sopenharmony_ci<p>We've started removing use of strncpy() because it's a hugely broken
28030f66f451Sopenharmony_cistandard C function: the length is the maximum length to _append_, not
28040f66f451Sopenharmony_cithe size of the destination buffer. It memsets the remaining space it didn't
28050f66f451Sopenharmony_cicopy ala "memset(dest+strlen(dest), 0, len);" so
28060f66f451Sopenharmony_ciif you think len is the size of dest you're guaranteed to stomp memory off the
28070f66f451Sopenharmony_ciend). And if it runs out of space it won't null terminate because reasons.
28080f66f451Sopenharmony_ci(Meanwhile sprintf("%*s", len, str) is counting wide characters in your current
28090f66f451Sopenharmony_cilocale, so if you set a locale other than "C" it will also go past your
28100f66f451Sopenharmony_ciallocated buffer size. Whoever is maintining the C library standards is really
28110f66f451Sopenharmony_cibad at strings.)
28120f66f451Sopenharmony_ciInstead we have xstrncat() which will error_exit() if src+dest+1 doesn't
28130f66f451Sopenharmony_cifit in the buffer. (Because randomly truncating input data isn't necessarily
28140f66f451Sopenharmony_cian improvement.) And there's always xmprintf().</p>
28150f66f451Sopenharmony_ci
28160f66f451Sopenharmony_ci<p>Similarly, strtol() doesn't return an error indicator on overflow,
28170f66f451Sopenharmony_ciyou have to clear and then check errno. So new xstrtol() that cares
28180f66f451Sopenharmony_ciabout overflow.</p>
28190f66f451Sopenharmony_ci
28200f66f451Sopenharmony_ci<p>The bionic and musl guys agree faccessat(AT_SYMLINK_NOFOLLOW) is not
28210f66f451Sopenharmony_cisupported, so stop using it.</p>
28220f66f451Sopenharmony_ci
28230f66f451Sopenharmony_ci<p>Fixed toy_exec() to detect when argc is in optargs, so we don't
28240f66f451Sopenharmony_cineed a separate xexec_optargs().</p>
28250f66f451Sopenharmony_ci
28260f66f451Sopenharmony_ci<a name="18-02-2015" /><a href="#18-02-2015"><hr><h2><b>February 18, 2015</b></h2></a>
28270f66f451Sopenharmony_ci<p>Dreamhost continues to be unable to make mailing list archives work, so
28280f66f451Sopenharmony_cihere's <a href=http://www.mail-archive.com/toybox@lists.landley.net/>another
28290f66f451Sopenharmony_cilist archive</a> with a less awkward interface than gmane.</p>
28300f66f451Sopenharmony_ci
28310f66f451Sopenharmony_ci<p>(Neither gives you the convenient historical monthly views of mailman,
28320f66f451Sopenharmony_cibut I still have hopes dreamhost will someday figure out what they're doing
28330f66f451Sopenharmony_ciwrong. They've only been trying since October. Last month they did a
28340f66f451Sopenharmony_ci<a href=http://www.dreamhoststatus.com/2015/01/14/discussion-list-hardware-maintenance/>hardware upgrade to fix a software problem</a>, and the stale
28350f66f451Sopenharmony_cidata loads much faster now, so that's something.)</p>
28360f66f451Sopenharmony_ci
28370f66f451Sopenharmony_ci<p>Update (Feb 19): the archive started updating again, by discarding
28380f66f451Sopenharmony_ciall the pending data. So there are now _two_ giant holes in Dreamhost's
28390f66f451Sopenharmony_ciweb archive, from Dec 15-Jan 3, and then another hole from Jan 16-Feb 18.
28400f66f451Sopenharmony_ciThe relevant messages are in both of the other archives. Here's hoping
28410f66f451Sopenharmony_cithe chronic archive constipation problem won't happen a sixth time.</p>
28420f66f451Sopenharmony_ci
28430f66f451Sopenharmony_ci<a name="30-12-2014" /><a href="#30-12-2014"><hr><h2><b>December 30, 2014</b></h2></a>
28440f66f451Sopenharmony_ci<p>Due to Dreamhost's <a href=http://landley.net/dreamhost.txt>ongoing</a>
28450f66f451Sopenharmony_ci<a href=http://landley.net/dreamhost2.txt>inability</a> to make mailman
28460f66f451Sopenharmony_ciwork reliably, I've added a link to a backup web archive at
28470f66f451Sopenharmony_ci<a href=http://news.gmane.org/gmane.linux.toybox>gmane</a> to the nav bar
28480f66f451Sopenharmony_cion the left.</p>
28490f66f451Sopenharmony_ci
28500f66f451Sopenharmony_ci<p>You still subscribe to the list through
28510f66f451Sopenharmony_ci<a href=http://lists.landley.net/listinfo.cgi/toybox-landley.net>the first link</a>.</p>
28520f66f451Sopenharmony_ci
28530f66f451Sopenharmony_ci<p>Update (January 27, 2015): they're <a href=https://twitter.com/landley/status/558428839462703104>still working on it</a>.</p>
28540f66f451Sopenharmony_ci
28550f66f451Sopenharmony_ci<a name="19-11-2014" /><a href="#19-11-2014"><hr><h2><b>November 19, 2014</b></h2></a>
28560f66f451Sopenharmony_ci
28570f66f451Sopenharmony_ci<blockquote><p>"This time it was right, it would work, and no one would have to get nailed to anything."</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
28580f66f451Sopenharmony_ci
28590f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.5.1.tar.bz2>Toybox 0.5.1</a>
28600f66f451Sopenharmony_ci(<a href=/hg/toybox/shortlog/1566>commit 1566</a>) is out.</p>
28610f66f451Sopenharmony_ci
28620f66f451Sopenharmony_ci<p>It's an interim release, mostly bugfixes. There are several new commands,
28630f66f451Sopenharmony_cibut they're all in pending.</p>
28640f66f451Sopenharmony_ci
28650f66f451Sopenharmony_ci<h3>Development</h3>
28660f66f451Sopenharmony_ci
28670f66f451Sopenharmony_ci<p>Finally implemented sed, which is still in pending because although
28680f66f451Sopenharmony_ciit's feature complete according to posix, and even passes the parts of
28690f66f451Sopenharmony_ciBusybox's sed test suite that aren't explicitly testing for gnu bugs we
28700f66f451Sopenharmony_cidon't want to copy, it's not yet good enough to build Linux From Scratch.
28710f66f451Sopenharmony_ci(The ./configure stages use very long sed scripts. 20 commits worth of
28720f66f451Sopenharmony_ciimplementation and debugging, just under 1000 lines of code, and there's
28730f66f451Sopenharmony_cistill more to do. We're definitely up to some of the "fiddly" commands now.
28740f66f451Sopenharmony_ciDid you know "echo hello | sed p - -" segfaults gnu sed in Ubuntu 12.04?
28750f66f451Sopenharmony_ciYeah...)</p>
28760f66f451Sopenharmony_ci
28770f66f451Sopenharmony_ci<p>Talked with the Tizen developers to follow up on their desire to
28780f66f451Sopenharmony_cimake toybox a part of the base Tizen system, and got a list of commands
28790f66f451Sopenharmony_cito add to the roadmap. The tizen todo list is:</p>
28800f66f451Sopenharmony_ci
28810f66f451Sopenharmony_ci<blockquote><p>
28820f66f451Sopenharmony_ciwget, sha256*, gzip, gunzip, bunzip2, rsync, zdiff*,
28830f66f451Sopenharmony_ciless, ar, arch, base64, csplit, dir, fmt, join, 
28840f66f451Sopenharmony_cinproc, shred, shuf, stdbuf, stty, test, tr, unexpand,
28850f66f451Sopenharmony_ciusers, vdir, diff3, sdiff, dosfsck (fsck.vfat), awk, fdisk
28860f66f451Sopenharmony_ci</p></blockquote>
28870f66f451Sopenharmony_ci
28880f66f451Sopenharmony_ci<p>(Most of which was already on the todo list, but it helps prioritize.)</p>
28890f66f451Sopenharmony_ci
28900f66f451Sopenharmony_ci<p>Fixed md5sum and sha1sum on big endian systems (reported by James McMechan).
28910f66f451Sopenharmony_ciAndy Lutomirski fixed unshare's help text and option parsing,
28920f66f451Sopenharmony_ciand submitted nsenter (a tool to use setns(2)) to pending.
28930f66f451Sopenharmony_ciIsaac Dunham implemented acpi -ctV options, and spotted the bug that ls -d
28940f66f451Sopenharmony_ciwas inappropraitely following command line symlinks without -H or -L (it
28950f66f451Sopenharmony_cishould act like ls -l does), and ls -F handles symlinks wrong too.
28960f66f451Sopenharmony_ciLukasz Szpakowski sent in two bugfixes to tail.c. Cynt Rynt spotted an
28970f66f451Sopenharmony_ciunnecessary assignment in lib/password.c.</p>
28980f66f451Sopenharmony_ci
28990f66f451Sopenharmony_ci<p>Ashwini Sharma's team was as busy as usual, submitting tr, crontab, and
29000f66f451Sopenharmony_ciipcrm, and hwclock to pending, more features to the pending ip.c, and a
29010f66f451Sopenharmony_cipile of bugfixes (to chgrp, killall, ifconfig, insmod,
29020f66f451Sopenharmony_cilosetup, comm, cp, id, xwrap, netcat, modprobe, nohup...) mostly found by
29030f66f451Sopenharmony_cistatic analysis. (These fixes are mostly to seldom-used codepaths like the
29040f66f451Sopenharmony_ciTOYBOX_FREE config option, but test coverage is always appreciated.) Ashwini
29050f66f451Sopenharmony_cialso suggested upgrading ln -f to leave the original target alone if link
29060f66f451Sopenharmony_cicreation fails, and reported that mv -f and -i weren't implemented (now fixed).</p>
29070f66f451Sopenharmony_ci
29080f66f451Sopenharmony_ci<p>New config option: TOYBOX_NORECURSE prevents xexec() from making internal
29090f66f451Sopenharmony_cifunction calls (for nommu systems with a finite stack).</p>
29100f66f451Sopenharmony_ci
29110f66f451Sopenharmony_ci<p>The "toybox" multiplexer command no longer adds a trailing space to each
29120f66f451Sopenharmony_ciline of command names, so things like "./toybox | tr ' \n' '|'" to create
29130f66f451Sopenharmony_cia grep pattern snippet are easier to do. (Why you'd want to is your business,
29140f66f451Sopenharmony_cibut the output is tidier now.)</p>
29150f66f451Sopenharmony_ci
29160f66f451Sopenharmony_ci<h3>Infrastructure</h3>
29170f66f451Sopenharmony_ci
29180f66f451Sopenharmony_ci<p>Isaac Dunham added Android support to portability.h, including compile
29190f66f451Sopenharmony_ciprobes for functions missing from bionic-libc, and annotated the commands that
29200f66f451Sopenharmony_ciuse those functions. We haven't really tested building against bionic,
29210f66f451Sopenharmony_cibut in theory it's possible now.</p>
29220f66f451Sopenharmony_ci
29230f66f451Sopenharmony_ci<p>Running the test suite now color codes the PASS/SKIP/FAIL notifications
29240f66f451Sopenharmony_ciif output is to a tty. (And in case you missed it last time, VERBOSE=fail
29250f66f451Sopenharmony_cito stop at the first failure is really useful.)</p>
29260f66f451Sopenharmony_ci
29270f66f451Sopenharmony_ci<p>In loopfiles_rw() use O_CLOEXEC instead of O_RDONLY to request the loop
29280f66f451Sopenharmony_cifunction close filehandles for us. (Otherwise the callback function must
29290f66f451Sopenharmony_ciclose each supplied filehandle itself.)</p>
29300f66f451Sopenharmony_ci
29310f66f451Sopenharmony_ci<p>The printf-style escape parsing ("\n" and friends) got factored out into
29320f66f451Sopenharmony_cia new unescape() function.</p>
29330f66f451Sopenharmony_ci
29340f66f451Sopenharmony_ci<a name="02-10-2014" /><a href="#02-10-2014"><hr><h2><b>October 2, 2014</b></h2></a>
29350f66f451Sopenharmony_ci<blockquote><p>"There is an art, it says, or rather, a knack to flying.
29360f66f451Sopenharmony_ciThe knack lies in learning how to throw yourself at the ground and miss...
29370f66f451Sopenharmony_ciClearly, it is this second part, the missing, which presents the
29380f66f451Sopenharmony_cidifficulties."</p><p>- The Hitchhiker's Guide to the Galaxy<p></blockquote>
29390f66f451Sopenharmony_ci
29400f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.5.0.tar.bz2>Toybox 0.5.0</a>
29410f66f451Sopenharmony_ci(<a href=/hg/toybox/shortlog/1512>commit 1512</a>) is out.</p>
29420f66f451Sopenharmony_ci
29430f66f451Sopenharmony_ci<h3>New commands</h3>
29440f66f451Sopenharmony_ci
29450f66f451Sopenharmony_ci<p>The new commands are find, install, factor, and mount. Promoted commands
29460f66f451Sopenharmony_ci(cleaned up and moved out of "pending") are lspci, inotifyd, and blockdev.</p>
29470f66f451Sopenharmony_ci
29480f66f451Sopenharmony_ci<p>cp now implements -HL and -F to force delete of pending files, cpio now
29490f66f451Sopenharmony_ciignores -m and implements -p, ls -C now has utf8 support (using wcwidth
29500f66f451Sopenharmony_ciinstead of strlen), and umount got a number of upgrades involving
29510f66f451Sopenharmony_cilooking things up in /proc/mounts. Other minor cleanups happend to
29520f66f451Sopenharmony_cicut, touch, free, and id.</p>
29530f66f451Sopenharmony_ci
29540f66f451Sopenharmony_ci<p>In pending: Bradley Controy submitted mix (adjusts OSS sound volume). Ashwini
29550f66f451Sopenharmony_ciSharma submitted diff, userdel, blockdev, ipcs, and crond, upgraded
29560f66f451Sopenharmony_cifdisk, fsck, and ftpget, and ran a static analyzer on a lot of other code.
29570f66f451Sopenharmony_ciPartial cleanup was done to useradd, userdel, groupadd, and groupdel.</p>
29580f66f451Sopenharmony_ci
29590f66f451Sopenharmony_ci<h3>Build infrastructure</h3>
29600f66f451Sopenharmony_ci
29610f66f451Sopenharmony_ci<p><b>Parallel builds</b></p>
29620f66f451Sopenharmony_ci
29630f66f451Sopenharmony_ci<p>The build now takes advantage of SMP, autodetecting the number of
29640f66f451Sopenharmony_ciprocessors. (Export the environment variable CPUS to pick a specific number.)
29650f66f451Sopenharmony_ciOther build changes: split out $LDOPTIMIZE because old compilers complain
29660f66f451Sopenharmony_ciabout linker options passed with -c, and the entire "generated" directory now
29670f66f451Sopenharmony_cigets deleted by clean (the README that was in there got merged into code.html).</p>
29680f66f451Sopenharmony_ci
29690f66f451Sopenharmony_ci<p><b>Standalone builds</b></p>
29700f66f451Sopenharmony_ci
29710f66f451Sopenharmony_ci<p>The standalone build infrastructure (scripts/single.sh) got upgraded to
29720f66f451Sopenharmony_cibuild more commands as standalone executables. In make.sh the source file
29730f66f451Sopenharmony_ciselection uses a regex to find the source files with the NEWTOY/OLDTOY macro
29740f66f451Sopenharmony_cifor the command. It enables each command's
29750f66f451Sopenharmony_cisub-options (so CP has CP_MORE), enables I18N and FLOAT support to build
29760f66f451Sopenharmony_cifull-featured commands, and includes --help text (at least when
29770f66f451Sopenharmony_cithe command doesn't use another command's help). The OLDTOY() macro
29780f66f451Sopenharmony_cinow produces (redundant) function prototypes so you can build an OLDTOY
29790f66f451Sopenharmony_ciwithout the NEWTOY</p>
29800f66f451Sopenharmony_ci
29810f66f451Sopenharmony_ci<p>It doesn't quite have complete coverage yet, the defconfig entries that
29820f66f451Sopenharmony_ciaren't building standalone yet are:</p>
29830f66f451Sopenharmony_ci
29840f66f451Sopenharmony_ci<blockquote><p>chown, egrep, fgrep, fstype, halt, mv, nc, poweroff, unix2dos,
29850f66f451Sopenharmony_ciwhoami</p></blockquote>
29860f66f451Sopenharmony_ci
29870f66f451Sopenharmony_ci<p>The main reason for standalone build failures is NEWTOY() or OLDTOY()
29880f66f451Sopenharmony_cientries that don't have their own config symbol. Another problem is entries
29890f66f451Sopenharmony_cithat depend on another entry in kconfig, usually because common infrastructure
29900f66f451Sopenharmony_ciis using one command's flags (which the other commands copy): if that command
29910f66f451Sopenharmony_ciis disabled, the FLAG macros become 0 so dead code elimination can remove the
29920f66f451Sopenharmony_cicode. It's <a href=http://landley.net/hg/toybox/rev/1503>possible
29930f66f451Sopenharmony_cito untangle</a> this, but a bit awkward. (It boils down to conflicting
29940f66f451Sopenharmony_cidesign goals in the two contexts.)</p>
29950f66f451Sopenharmony_ci
29960f66f451Sopenharmony_ci<p>Standalone builds are used by the test suite when testing individual
29970f66f451Sopenharmony_cicommands.
29980f66f451Sopenharmony_ci
29990f66f451Sopenharmony_ci<p><b>Snapshot builds</b></p>
30000f66f451Sopenharmony_ci
30010f66f451Sopenharmony_ci<p>A new addition to the "generated" directory is generated/build.sh
30020f66f451Sopenharmony_cicontaining a single compiler command line to build toybox in its current
30030f66f451Sopenharmony_ciconfiguration. Combined with the generated/*.{h,sh} files from an
30040f66f451Sopenharmony_ciexisiting build, this may let you build on a new system that hasn't quite
30050f66f451Sopenharmony_cigot enough OS bits working to run a full configureand make.</p>
30060f66f451Sopenharmony_ci
30070f66f451Sopenharmony_ci<h3>Internals</h3>
30080f66f451Sopenharmony_ci
30090f66f451Sopenharmony_ci<p>Library code: xcreate/xopen now O_CLOEXEC by default to avoid leaking
30100f66f451Sopenharmony_cifilehandles to child processes. DIRTREE_COMEAGAIN's second callback is now
30110f66f451Sopenharmony_cidone with the directory filehandle still open (new dir->again variable added
30120f66f451Sopenharmony_cito distinguish first from second callback, and requesting DIRTREE_RECURSE now
30130f66f451Sopenharmony_cirequires passing in the specific macro value, not just a true/false).
30140f66f451Sopenharmony_ciUse daemon() out of libc instead of hand-rolled daemonize() in various
30150f66f451Sopenharmony_cipending commands. string_to_mode() now passes through type bits so you can
30160f66f451Sopenharmony_ciuse it to more easily modify a file's existing mode.
30170f66f451Sopenharmony_ciSplit xpopen() into xpopen_both(), xopen(), and xrun() depending on whether
30180f66f451Sopenharmony_ciwe want to redirect both, one, or neither of stdin/stdout.</p>
30190f66f451Sopenharmony_ci
30200f66f451Sopenharmony_ci<p>Bugfixes: Better error message when TOYBOX_SUID option can't drop priviliges
30210f66f451Sopenharmony_ci(which happens when you suid something _other_ than root).
30220f66f451Sopenharmony_ciThe old pending version of nbd_client.c wasn't deleted when the
30230f66f451Sopenharmony_cicommand was promoted (and the build would break if both were enabled),
30240f66f451Sopenharmony_citoy_exec() sometimes needs to re-exec from $PATH rather than recurse
30250f66f451Sopenharmony_ciinternally (to gain dropped root permissions or limit stack depth),
30260f66f451Sopenharmony_cialways call setlocale() when I18N is enabled to switch it back _off_ when
30270f66f451Sopenharmony_ciwe run commands that expect sscanf("%n") to return bytes,
30280f66f451Sopenharmony_cidirtree() had a memory leak in an error path, patch.c had some bugs in
30290f66f451Sopenharmony_cierror paths (didn't report problem clearly). Ashwini Sharma spotted an
30300f66f451Sopenharmony_cioption parsing bug where [-abc] would forget _all_ command line arguments
30310f66f451Sopenharmony_cisaved in the GLOBALS() block (not just the ones for options being switched
30320f66f451Sopenharmony_cioff), plus various minor fixes to nbd_client and cpio.
30330f66f451Sopenharmony_ciLukasz Szpakowski fixed rm -f on a broken symlink (failed), and killall
30340f66f451Sopenharmony_ciwith no arguments (segfaulted).</p>
30350f66f451Sopenharmony_ci
30360f66f451Sopenharmony_ci<p><b>Portability</b></p>
30370f66f451Sopenharmony_ci
30380f66f451Sopenharmony_ci<p>A somewhat fiddly fix to rm -rf (which needs to chmod directories to u+rwx
30390f66f451Sopenharmony_cito descend into them) which hit a musl bug in faccessat() which the musl
30400f66f451Sopenharmony_cimaintainer refuses to fix. (He literally wants the man page changed
30410f66f451Sopenharmony_ciinstead, despite other libcs working.) Added an #ifdef __MUSL__ section
30420f66f451Sopenharmony_cito portability.h with a workaround, you may need CFLAGS=-D__MUSL__ in your
30430f66f451Sopenharmony_cibuild if your musl build's features.h doesn't #define that. (I may do
30440f66f451Sopenharmony_cia different workaround in future, but sometimes you've just got to make
30450f66f451Sopenharmony_ciit work so you can ship. Also, toybox grep with multiple patterns
30460f66f451Sopenharmony_cirequires <a href=http://landley.net/hg/aboriginal/rev/1692>a patch
30470f66f451Sopenharmony_cito musl's regex engine</a>, which applies to 1.1.4 but not to the current
30480f66f451Sopenharmony_cimusl source control.)</p>
30490f66f451Sopenharmony_ci
30500f66f451Sopenharmony_ci<p>More portability.h fixes for uClibc too. (I don't expect that to ever have
30510f66f451Sopenharmony_cianother release, so locally patching around posix-2008 violations is silly).</p>
30520f66f451Sopenharmony_ci
30530f66f451Sopenharmony_ci<p><b>Change to username filtering</b></p>
30540f66f451Sopenharmony_ci
30550f66f451Sopenharmony_ci<p>Posix recommends the username creation logic filter usernames to a small
30560f66f451Sopenharmony_ciallowed set of characters (which even Red Hat breaks by explicitly allowing
30570f66f451Sopenharmony_ci"$" at the end), but this prevents UTF-8 usernames. Posix' stated logic
30580f66f451Sopenharmony_ciis to allow filesystems to create the user's home directory, but Linux
30590f66f451Sopenharmony_cifilesystems can accept any character but NUL and "/". The only characters
30600f66f451Sopenharmony_ciwe actually _need_ to filter out are ":" (field separator in passwd),
30610f66f451Sopenharmony_cinewline (line separator in passwd), and "/" (directory separator in
30620f66f451Sopenharmony_cifilesystem).</p>
30630f66f451Sopenharmony_ci
30640f66f451Sopenharmony_ci<h3>Documentation</h3>
30650f66f451Sopenharmony_ci
30660f66f451Sopenharmony_ci<p>Web pages updated: cleanup.html documents more cleanup, code.html
30670f66f451Sopenharmony_cidocuments more code, and about.html now capitalizes "toybox" consistently
30680f66f451Sopenharmony_ci(it's just a word, capitalize at start of sentence).</p>
30690f66f451Sopenharmony_ci
30700f66f451Sopenharmony_ci<p>The pending/README file now lists commands that needed review/cleanup
30710f66f451Sopenharmony_cibefore the pending directory was added.</p>
30720f66f451Sopenharmony_ci
30730f66f451Sopenharmony_ci<h3>Test Suite</h3>
30740f66f451Sopenharmony_ci
30750f66f451Sopenharmony_ci<p>Moved out of scripts/test into top level "tests" directory, and the
30760f66f451Sopenharmony_citesting.sh script is now in scripts rather than mixed into the *.test files.</p>
30770f66f451Sopenharmony_ci
30780f66f451Sopenharmony_ci<p>Johan Bergström requested VERBOSE=fail to make tests (telling it to
30790f66f451Sopenharmony_cistop at the first failure), and spotted a build bug where using gnu
30800f66f451Sopenharmony_cisort on the host broke in non-C locales.</p>
30810f66f451Sopenharmony_ci
30820f66f451Sopenharmony_ci<p>Divya Kothari submitted tests for chmod, link, tar, bzcat, xzcat, zcat,
30830f66f451Sopenharmony_ciand hostname. (And more, but that's all that's merged so far.)</p>
30840f66f451Sopenharmony_ci
30850f66f451Sopenharmony_ci<a name="07-07-2014" /><a href="#07-07-2014"><hr><h2><b>July 7, 2014</b></h2></a>
30860f66f451Sopenharmony_ci<blockquote><p>"This planet has - or rather had - a problem, which was this:
30870f66f451Sopenharmony_cimost of the people living on it were unhappy for pretty much of the time. Many
30880f66f451Sopenharmony_cisolutions were suggested for this problem, but most of these were largely
30890f66f451Sopenharmony_ciconcerned with the movement of small green pieces of paper, which was odd
30900f66f451Sopenharmony_cibecause on the whole it wasn't the small green pieces of paper that were
30910f66f451Sopenharmony_ciunhappy."</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
30920f66f451Sopenharmony_ci
30930f66f451Sopenharmony_ci<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>
30940f66f451Sopenharmony_ci
30950f66f451Sopenharmony_ci<p><b>New commands</b> added to pending include:
30960f66f451Sopenharmony_cilsattr, chattr, inotifyd, rfkill, sulogin, strings, makedevs,
30970f66f451Sopenharmony_cikillall5, and tar from Ashwini Sharma, arp from Kyungwan Han,
30980f66f451Sopenharmony_cisysctl by Bilal Qureshi, partprobe from Bertold Van den Bergh,
30990f66f451Sopenharmony_cihost from Rich felker, and I did nbd-client and the first 2/3 of mount.</p>
31000f66f451Sopenharmony_ci
31010f66f451Sopenharmony_ci<p>Finished cleanups (commands promoted out of pending):
31020f66f451Sopenharmony_cisysctl, rfkill, strings, mkpasswd, makedevs, partprobe, killall5,
31030f66f451Sopenharmony_cifallocate, and nbd-client.</p>
31040f66f451Sopenharmony_ci
31050f66f451Sopenharmony_ci<p>(Along the way partial cleanups got made to: last, fold, lspci, ps,
31060f66f451Sopenharmony_cibootchartd, init, fsck, telnetd, telnet, vconfig, toysh, iconv, useradd,
31070f66f451Sopenharmony_cilogin, host, openvt, deallocvt, getty, tftpd, and modprobe. But there's
31080f66f451Sopenharmony_cistill more to do on all of those.)</p>
31090f66f451Sopenharmony_ci
31100f66f451Sopenharmony_ci<p>This time around the <a href=bin>static binaries</a> are linked against
31110f66f451Sopenharmony_cimusl instead of uClibc. (That's why there's no sparc version, musl doesn't
31120f66f451Sopenharmony_cisupport that target yet.)</p>
31130f66f451Sopenharmony_ci
31140f66f451Sopenharmony_ci<p><b>Documentation:</b></p>
31150f66f451Sopenharmony_ci
31160f66f451Sopenharmony_ci<p>The help text parser expects lower case "usage:" lines with
31170f66f451Sopenharmony_cia blank line after them, so go through and regularize those. Expand the
31180f66f451Sopenharmony_ci"coding style" section in the docs and move it to design.html. (Not a show
31190f66f451Sopenharmony_cistopper for incoming
31200f66f451Sopenharmony_cicontributions, just an explanation of some of the things I'll do to them
31210f66f451Sopenharmony_ciduring cleanup.) The help text for the "toybox" command now includes
31220f66f451Sopenharmony_cithe shell script snippet to install symlinks to the toybox binary.</p>
31230f66f451Sopenharmony_ci
31240f66f451Sopenharmony_ci<p>The <a href=cleanup.html>cleanup page</a> now has descriptions for the
31250f66f451Sopenharmony_cifull ifconfig cleanup series, among others.</p>
31260f66f451Sopenharmony_ci
31270f66f451Sopenharmony_ci<p>The new toys/examples directory contains hello.c and skeleton.c. The first is
31280f66f451Sopenharmony_cia simple hello world program in toybox style, the second is a much more
31290f66f451Sopenharmony_cielaborate example program using showing how to use the command line option
31300f66f451Sopenharmony_ciparsing and how to provide multiple commands in the same C file.</p>
31310f66f451Sopenharmony_ci
31320f66f451Sopenharmony_ci<p><b>Fixes</b>:</p>
31330f66f451Sopenharmony_ci
31340f66f451Sopenharmony_ci<p>Fix od bug reported by Samuel Holland ("od -v -b" was appending the default
31350f66f451Sopenharmony_cioutput type even though an output type was specified). Ashwini Sharma reported
31360f66f451Sopenharmony_cibugs where readfile() was incorrectly freeing its buffer, and where toy_init()
31370f66f451Sopenharmony_ciwas zeroing the wrong data because the field it was using to measure (rebound)
31380f66f451Sopenharmony_cihad moved (when I moved it back I added a comment why the field needs to be
31390f66f451Sopenharmony_cithere), fixed a segfault in the dhcp client, and made a 0 length read at
31400f66f451Sopenharmony_cithe start of password entry count as EOF. Make the "we are not root" test
31410f66f451Sopenharmony_ciin the init code show the help text. Posix implies that fflush() can return
31420f66f451Sopenharmony_cisuccess even when the stream's error bit is set, so call both fflush() and
31430f66f451Sopenharmony_ciferror() from xprintf().</p>
31440f66f451Sopenharmony_ci
31450f66f451Sopenharmony_ci<p>Isaac Dunham pointed out that bloatcheck couldn't deal with diff
31460f66f451Sopenharmony_ciimplementations that only implement "unified diff" format, and that some
31470f66f451Sopenharmony_cidiff implementations can't handle nonseekable input (I.E. reading from
31480f66f451Sopenharmony_cia pipe). Bugfix so "help -a" works again. Option parsing on nohup now stops
31490f66f451Sopenharmony_ciat first nonoption argument. Fix segfault in "which" if PATH wasn't set,
31500f66f451Sopenharmony_ciwhich was actually a bug in lib function find_in_path(). Made rm -rf of
31510f66f451Sopenharmony_cichmod 000 directories actually remove them.</p>
31520f66f451Sopenharmony_ci
31530f66f451Sopenharmony_ci<p>The build now passes the same $CFLAGS to the library probe as the final
31540f66f451Sopenharmony_cibuild, because arch linux is so broken it provides different sets of
31550f66f451Sopenharmony_cilibraries for static and dynamic linking.</p>
31560f66f451Sopenharmony_ci
31570f66f451Sopenharmony_ci<p>It turns out sprintf("%.123s", str) is counting characters, not bytes,
31580f66f451Sopenharmony_ciso globally enabling locale support opens stack smashing vulnerabilities.
31590f66f451Sopenharmony_ciSo there's a new TOYFLAGS_LOCALE you set in toyflags when you want the
31600f66f451Sopenharmony_cisetup code to setlocale().</p>
31610f66f451Sopenharmony_ci
31620f66f451Sopenharmony_ci<p><b>Upgrades:</b></p>
31630f66f451Sopenharmony_ci
31640f66f451Sopenharmony_ci<p>Isaac Dunham extended cpio to archive unreadable empty files, and I taught it
31650f66f451Sopenharmony_cito set uid/gid and timestamp when extracting archives. Isaac also
31660f66f451Sopenharmony_ciadded tests for cpio, link, and du, added lspci -i, made the pci database
31670f66f451Sopenharmony_ciparsing skip # comment lines, merged logname and whoami into id.</p>
31680f66f451Sopenharmony_ci
31690f66f451Sopenharmony_ci<p>Daniel Verkamp sped up md5sum about 30% with some loop unrolling, making
31700f66f451Sopenharmony_ciit actually smaller in the process. I added -b flags to md5sum and sha1sum
31710f66f451Sopenharmony_cifor "brief" output that's just the hash with no filename. (I'm aware other
31720f66f451Sopenharmony_ciimplementations use that for MSDOS "binary" mode, and don't care.)</p>
31730f66f451Sopenharmony_ci
31740f66f451Sopenharmony_ci<p>When building standalone commands (scripts/singleconfig.sh commandname),
31750f66f451Sopenharmony_cithe build now switches on all the sub-options of the command so we get
31760f66f451Sopenharmony_cia standalone version with all the bells and whistles enabled.</p>
31770f66f451Sopenharmony_ci
31780f66f451Sopenharmony_ci<p>Add -ds flags to date and document +FORMAT escapes. Add the shell NOP
31790f66f451Sopenharmony_cicommand ":" as an alias for true (for toysh).</p>
31800f66f451Sopenharmony_ci
31810f66f451Sopenharmony_ci<p>Add uClibc probe for iconv() and fallocate. (The fact it didn't always
31820f66f451Sopenharmony_cibuild against uClibc is why fallocate wasn't enabled in defconfig before.)</p>
31830f66f451Sopenharmony_ci
31840f66f451Sopenharmony_ci<p>The umount command now does an losetup -d on the device by default, so
31850f66f451Sopenharmony_ciwe don't leak loopback devices. Bugfix to losetup so "losetup /dev/loop0
31860f66f451Sopenharmony_cifilename" actually works again.</p>
31870f66f451Sopenharmony_ci
31880f66f451Sopenharmony_ci<p>Divya Kothari sent in test suite entries for ls, ln, rm, mv, printf, dd,
31890f66f451Sopenharmony_ciand renice. Then a second round for lsattr/chattr, mount, chmod, pgrep/pkill,
31900f66f451Sopenharmony_cigroupadd, groupdel, and useradd. Several of these uncovered bugs, still
31910f66f451Sopenharmony_ciworking to fix them.</p>
31920f66f451Sopenharmony_ci
31930f66f451Sopenharmony_ci<p>There are now free() functions for the predefined llist types and a
31940f66f451Sopenharmony_cidlist_terminate() function to break doubly linked lists. The new
31950f66f451Sopenharmony_cigeneric_signal() handler either sets "toys.signal" or writes a byte
31960f66f451Sopenharmony_cito toys.signalfd with the signal number if signalfd isn't -1 (which it's
31970f66f451Sopenharmony_ciinitialized to in toy_init).</p>
31980f66f451Sopenharmony_ci
31990f66f451Sopenharmony_ci<p>The option parsing logic can now detect when a double fits in a long and
32000f66f451Sopenharmony_ciuse the more precise type for floating point arguments (the FLOAT macro
32010f66f451Sopenharmony_cicontains the type used). The human_readable() function now just outputs
32020f66f451Sopenharmony_cidecimal kilo/mega/gigabytes (so when du -u says 5.0G it means 5.0 billion
32030f66f451Sopenharmony_cibytes). The build infrastructure now notices duplicate commands (so if you
32040f66f451Sopenharmony_cicp toys/pending/command.c toys/other/command.c and forget to delete the
32050f66f451Sopenharmony_cifirst one, the build break is now more informative).</p>
32060f66f451Sopenharmony_ci
32070f66f451Sopenharmony_ci<a name="20-04-2014" /><a href="#20-04-2014"><hr><h2><b>April 20, 2014</b></h2></a>
32080f66f451Sopenharmony_ci<blockquote><p>And to this end they built themselves a stupendous supercomputer
32090f66f451Sopenharmony_ciwhich was so amazingly intelligent that even before the data banks
32100f66f451Sopenharmony_cihad been connected up it had started from "I think therefore I am" and got as
32110f66f451Sopenharmony_cifar as the existence of rice pudding and income tax before anyone managed to
32120f66f451Sopenharmony_citurn it off.</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
32130f66f451Sopenharmony_ci
32140f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.4.8.tar.bz2>Toybox 0.4.8</a> is based on
32150f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/shortlog/1262>commit 1262</a>. And
32160f66f451Sopenharmony_ciabout time too.</p>
32170f66f451Sopenharmony_ci
32180f66f451Sopenharmony_ci<p>The big news is that the build no longer needs python to generate help.h,
32190f66f451Sopenharmony_cithat's now done in C. The help text generation is also collating help text
32200f66f451Sopenharmony_cifrom multiple options, merging command line option blocks and usage: lines.
32210f66f451Sopenharmony_ciThere's even a new <a href=help.html>help web page</a>.</p>
32220f66f451Sopenharmony_ci
32230f66f451Sopenharmony_ci<p><b>New commands:</b> Ifconfig, cpio, and su were cleaned up the rest of the
32240f66f451Sopenharmony_ciway and promoted out of pending. That saga is mostly explained on the
32250f66f451Sopenharmony_ci<a href=cleanup.html>cleanup page</a>. Vivek Bhagat's freeramdisk,
32260f66f451Sopenharmony_ciIsaac Dunham's fsfreeze, and Felix Janda's iconv are also new.</p>
32270f66f451Sopenharmony_ci
32280f66f451Sopenharmony_ci<p><b>In pending:</b>
32290f66f451Sopenharmony_ciAshwini Sharma's team submitted tcpsvd, udpsvd, telnet, telnetd, last, more,
32300f66f451Sopenharmony_cigroupdel/delgroup, arping, brctl, ftpget, ftpput, printf, reset, and added
32310f66f451Sopenharmony_ciipv6 support to traceroute. Kyungwan Han's team submitted modprobe and getty.
32320f66f451Sopenharmony_ciVivek Bhagat submitted openvt and deacllocvt. Samuel Holland submitted fold.
32330f66f451Sopenharmony_ciI wrote a new inflate (zip/zlib/gzip decompression) implementation in
32340f66f451Sopenharmony_cicompress.c, and still  need to do a corresponding deflate (compression-side)
32350f66f451Sopenharmony_ciand plug them into gzip and zip and so on. (Right now it does zcat.)</p>
32360f66f451Sopenharmony_ci
32370f66f451Sopenharmony_ci<p>Several commands (vmstat, login, du, vconfig, mountpoint, free, chroot,
32380f66f451Sopenharmony_cicut, touch, modinfo, expand) predate the "pending" directory, and are thus
32390f66f451Sopenharmony_ciin other directories but still need cleanup. Of these, vmstat got some
32400f66f451Sopenharmony_ciwork this time (which would be much easier other vmstat implementations
32410f66f451Sopenharmony_cidocumented what their output actually meant).</p>
32420f66f451Sopenharmony_ci
32430f66f451Sopenharmony_ci<p><b>Upgrades:</b> Ifconfig grew /prefix netmask support (ala 1.2.3.4/24). Grep now has -zZ to
32440f66f451Sopenharmony_cihandle null terminated data, cksum grew -H for hex output. Upgraded od so the
32450f66f451Sopenharmony_cifields align better when producing multiple output types. Help has -a and -h
32460f66f451Sopenharmony_cioptions (all commands, html output).
32470f66f451Sopenharmony_ciBugfix to blkid building for a 32 bit target. The date command can actually
32480f66f451Sopenharmony_ciset dates now. The O_NOFOLLOW compile time probe didn't work with cross
32490f66f451Sopenharmony_cicompiling, so it's back to an #ifdef test in portability.h. Nathan McSween
32500f66f451Sopenharmony_cisent in a bugfix to od and a portability fix in the common library code.
32510f66f451Sopenharmony_ciAshwini Sharma spotted a bug in pidof -o, and added verbose (-v) options
32520f66f451Sopenharmony_cito mkdir and ln, and suggested killall should have an -s option and
32530f66f451Sopenharmony_ciallow -l to take zero arguments. Ashwini Sharma and Felix Janda upgraded
32540f66f451Sopenharmony_citftpd.  Fixed dumpleases still using toynet.h after
32550f66f451Sopenharmony_cithat was removed. Corrected killall return code and error reporting.
32560f66f451Sopenharmony_ciIsacc Dunham fixed bugs all over the tree, did cleanup on a bunch of
32570f66f451Sopenharmony_cipending commands (getty, ftpget, init, openvt, modprobe...), and clarified
32580f66f451Sopenharmony_cifind's help text. Tom Sparrow ran three different static analyzers on
32590f66f451Sopenharmony_cithe code, which resulted in a few cleanups. The peek()/poke() functions
32600f66f451Sopenharmony_cinow use "volatile" to prevent broken compiler "optimizations" to do with
32610f66f451Sopenharmony_cialiasing.</p>
32620f66f451Sopenharmony_ci
32630f66f451Sopenharmony_ci<p><b>Build stuff:</b> Each FOR_xxxx macro now has a complementary CLEANUP_xxxx macro, so you
32640f66f451Sopenharmony_cican put multiple commands with different command line options in the same
32650f66f451Sopenharmony_ci.c file, so they can share infrastructure outside of lib. (This let the
32660f66f451Sopenharmony_cibunzip logic move out of lib into bzcat.c.) See XXX for example.
32670f66f451Sopenharmony_cii
32680f66f451Sopenharmony_ci<p>The headers #included in toys.h are now grouped by standard, and headers
32690f66f451Sopenharmony_cinot listed in Posix or LSB were moved to portability.h. The old xregcomp.h
32700f66f451Sopenharmony_ciwas folded into lib.h because it's posix (and supporting oddball uClibc
32710f66f451Sopenharmony_ciconfigurations isn't as important as it once was).</p>
32720f66f451Sopenharmony_ci
32730f66f451Sopenharmony_ci<p>Regression tested against Ubuntu 8.04 to fix up bit-rot in defconfig
32740f66f451Sopenharmony_cibuild on older systems. (We depend on Posix-2008, but not necessarily
32750f66f451Sopenharmony_cithe absolute latest build environment.)</p>
32760f66f451Sopenharmony_ci
32770f66f451Sopenharmony_ci<p><b>In lib</b>: lib/xwrap.c added xgetpwnam(), xchroot(), and lib/lib.c now has names_to_pid().
32780f66f451Sopenharmony_cixsetuid() was replaced with xsetuser() which takes a struct passwd
32790f66f451Sopenharmony_ciand sets both gid and uid, mkpathat() got factored out into a library command,
32800f66f451Sopenharmony_ciget_int_value() became atolx_range(), and
32810f66f451Sopenharmony_cixmsprintf() is now just xmprintf(). The bunzip2 logic moved from lib into
32820f66f451Sopenharmony_cibzcat.c.</p>
32830f66f451Sopenharmony_ci
32840f66f451Sopenharmony_ci<p><b>Documentation</b>: new <a href=help.html>help page</a> with the
32850f66f451Sopenharmony_cihelp text for all the defconfig commands, using the new help -ah output.
32860f66f451Sopenharmony_ciThe <a href=code.html>source code walkthrough</a> now says more about
32870f66f451Sopenharmony_ci#including header files, and how the generated/* directory works. The
32880f66f451Sopenharmony_ci<a href=design.html>design page</a> has some new paragraphs about trading
32890f66f451Sopenharmony_ciof different kinds of simplicity, and why comments aren't a substitute for
32900f66f451Sopenharmony_cigood code. The README no longer trails off into obvious unfinished confusion
32910f66f451Sopenharmony_ciat the end. Each page on the website should now have its own title.</p>
32920f66f451Sopenharmony_ci
32930f66f451Sopenharmony_ci<a name="18-11-2013" /><a href="#18-11-2013"><hr><h2><b>November 18, 2013</b></h2></a>
32940f66f451Sopenharmony_ci<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."</p><p>-
32950f66f451Sopenharmony_ciThe Hitchhiker's Guide to the Galaxy</p></blockquote>
32960f66f451Sopenharmony_ci
32970f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.4.7.tar.bz2>Toybox 0.4.7</a> is based on
32980f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/shortlog/1122>commit 1122</a>.</p>
32990f66f451Sopenharmony_ci
33000f66f451Sopenharmony_ci<p>New commands: Brad Conroy submitted blkid. Elie De Brauwer submitted
33010f66f451Sopenharmony_cireboot, halt, and poweroff. Strake's nl got cleaned up and promoted from
33020f66f451Sopenharmony_cipending to posix. In addition, the existing chvt and vconfig got some
33030f66f451Sopenharmony_cicleanup.</p>
33040f66f451Sopenharmony_ci
33050f66f451Sopenharmony_ci<p>That said, I haven't nearly kept up with the flood of new commands going
33060f66f451Sopenharmony_ciinto pending: Ashwini Sharma's team submitted
33070f66f451Sopenharmony_cidd, dumpleases, traceroute, top, useradd, groupadd, mkpasswd, tftpd, and
33080f66f451Sopenharmony_cian fsck wrapper (with no filesystem drivers yet). Isaac Dunham sent in cpio.</p>
33090f66f451Sopenharmony_ci
33100f66f451Sopenharmony_ci<p>Bugfixes: Jeroen van Rijn added a user count to uptime. Elie De Brauwer
33110f66f451Sopenharmony_ciadded -e to watch, removed a memory leak, and fixed a terminal size problem.
33120f66f451Sopenharmony_ciWilliam Haddon made xargs call its command line once even with blank input
33130f66f451Sopenharmony_ci(the standard is vague, but builds expect it), and fixed an off by one bug
33140f66f451Sopenharmony_ciwhere grep didn't malloc enough space with -E (leading to a segfault).
33150f66f451Sopenharmony_ciI fixed a glitch in bunzip2 (same one as went into busybox since they're using
33160f66f451Sopenharmony_cithe code I wrote), in od to fix -t co, -J, and -c options. Add uname -o as a
33170f66f451Sopenharmony_cisynonym for -s. Build fix to never use $CC without prefixing it with
33180f66f451Sopenharmony_ci$CROSS_COMPILE (since $HOSTCC could be different). Anca Emanuel spotted
33190f66f451Sopenharmony_cia typo in the web page.</p>
33200f66f451Sopenharmony_ci
33210f66f451Sopenharmony_ci<p>The compile-time command line option parsing got rewritten (ported from
33220f66f451Sopenharmony_cibash to C), which should speed up builds a bit and allow code controlled by
33230f66f451Sopenharmony_ci--longopts to drop out properly when disabled in the configuration. Terminal
33240f66f451Sopenharmony_ciquerying got refactored. Patch's -x option is now more informative (a
33250f66f451Sopenharmony_cidebug thing if you're trying to figure out why a patch didn't apply).
33260f66f451Sopenharmony_ciThe "toynet.h" file got folded into toys.h since musl supports it and
33270f66f451Sopenharmony_cimicromanging uClibc options isn't very interesting anymore. The test suite
33280f66f451Sopenharmony_cinow uses scripts/single.sh when testing a single command.</p>
33290f66f451Sopenharmony_ci
33300f66f451Sopenharmony_ci<a name="17-09-2013" /><a href="#17-09-2013"><hr><h2><b>September 17, 2013</b></h2></a>
33310f66f451Sopenharmony_ci<blockquote><p>"Think of a number," said the computer, "any number."
33320f66f451Sopenharmony_ciArthur told the computer the telephone number of King's Cross railway
33330f66f451Sopenharmony_cistation passenger inquiries, on the grounds that it must have some function,
33340f66f451Sopenharmony_ciand this might turn out to be it.</p><p>- The Hitchhiker's Guide to the Galaxy</p>
33350f66f451Sopenharmony_ci</blockquote>
33360f66f451Sopenharmony_ci
33370f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.4.6.tar.bz2>Toybox 0.4.6</a> is based on
33380f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/shortlog/1068>commit 1068</a>.</p>
33390f66f451Sopenharmony_ci
33400f66f451Sopenharmony_ci<p>This release adds
33410f66f451Sopenharmony_ciseveral new commands: Felix Janda wrote paste and fallocate, Kyungwan Han
33420f66f451Sopenharmony_cisubmitted eject, Strake contributed grep, Ashwini Sharma added pmap (and
33430f66f451Sopenharmony_cia testsuite entry for grep), Lukasz Skalski sent pwdx, Isaac Dunham posted
33440f66f451Sopenharmony_ciacpi, and I did timeout and umount.</p>
33450f66f451Sopenharmony_ci
33460f66f451Sopenharmony_ci<p>The ls command now has a --color=auto option (suggested by Rich Felker).
33470f66f451Sopenharmony_ciThe multiplexer now has a --help option so you can say "./toybox --help blah"
33480f66f451Sopenharmony_ciinstead of using the built-in "help" command. (Which is a shell built-in.
33490f66f451Sopenharmony_ciTry it on your command line, it's like man for shell builtins. But a certain
33500f66f451Sopenharmony_ciother project has conditioned people to expect --help, so...) I forget who
33510f66f451Sopenharmony_ciheehooman at gmail is but they pointed out unshare needed PID and UID
33520f66f451Sopenharmony_cinamespace support.</p>
33530f66f451Sopenharmony_ci
33540f66f451Sopenharmony_ci<h3>Pending</h3>
33550f66f451Sopenharmony_ci
33560f66f451Sopenharmony_ci<p>A lot of new commands in toys/pending, to the point the next release should
33570f66f451Sopenharmony_ciprobably just focus on cleanup and review of this backlog. We've got klogd,
33580f66f451Sopenharmony_cidhcp, dhcpd, watch, route, and ps from
33590f66f451Sopenharmony_ciAshwini Sharma (and an fsck wrapper but no fsck.fstype engines yet),
33600f66f451Sopenharmony_cisyslogd, pgrep, and pkill from Madhur Verma, netstat by Ranjan Kumar,
33610f66f451Sopenharmony_citest by Felix Janda, lspci by Isaac Dunham, nl, su, and renice by strake (I.E.
33620f66f451Sopenharmony_ciM. Farkas-Dyck), and sysvinit by Kyungwan Han.</p>
33630f66f451Sopenharmony_ci
33640f66f451Sopenharmony_ci<p>Some cleanup work on existing pending commands that aren't
33650f66f451Sopenharmony_ciready to promote yet: I did a few more rounds on ifconfig
33660f66f451Sopenharmony_ciand Isaac Dunham's did several cleanups to xzcat, Felix Janda cleaned up
33670f66f451Sopenharmony_cilogger and syslogd...</p>
33680f66f451Sopenharmony_ci
33690f66f451Sopenharmony_ci<p>Also some cleanup work on commands that predate the pending directory,
33700f66f451Sopenharmony_cibut weren't quite polished when they went in, most prominently du,
33710f66f451Sopenharmony_ciexpand, and touch.</p> 
33720f66f451Sopenharmony_ci
33730f66f451Sopenharmony_ci<h3>Infrastructure</h3>
33740f66f451Sopenharmony_ci
33750f66f451Sopenharmony_ci<p>The new scripts/single.sh builds a standalone command without the
33760f66f451Sopenharmony_cimultiplexer, although not all commands can be built that way yet (NEWTOY yes,
33770f66f451Sopenharmony_ciOLDTOY no) and the space savings aren't anything to write home about. (If a
33780f66f451Sopenharmony_cicommand needs the option parsing logic at all, it needs all of it.) If
33790f66f451Sopenharmony_ciyou're curious, you can do:</p>
33800f66f451Sopenharmony_ci
33810f66f451Sopenharmony_ci<blockquote><pre>
33820f66f451Sopenharmony_cimake defconfig
33830f66f451Sopenharmony_cimake
33840f66f451Sopenharmony_cimkdir singles
33850f66f451Sopenharmony_cifor i in $(./toybox)
33860f66f451Sopenharmony_cido
33870f66f451Sopenharmony_ci  echo $i
33880f66f451Sopenharmony_ci  PREFIX=singles/ scripts/single.sh $i || break
33890f66f451Sopenharmony_cidone
33900f66f451Sopenharmony_ci</pre>
33910f66f451Sopenharmony_ci<p>(And then wait a long time and watch almost half the builds fail.)</p>
33920f66f451Sopenharmony_ci</blockquote>
33930f66f451Sopenharmony_ci
33940f66f451Sopenharmony_ci<p>There is now libbuf analogous to toybuf, another global 4k buffer this
33950f66f451Sopenharmony_citime for use by lib/ code instead of command code.</p>
33960f66f451Sopenharmony_ci
33970f66f451Sopenharmony_ci<p>The lib directory got split up a bit, lib/pending.c contains functions
33980f66f451Sopenharmony_cinot yet used by anything outside of toys/pending/*, and lib/xwrap.c contains
33990f66f451Sopenharmony_cifunctions that wrap other functions and handle failures (via error_exit).
34000f66f451Sopenharmony_ciThis leaves lib/lib.c containing actual new functions.</p>
34010f66f451Sopenharmony_ci
34020f66f451Sopenharmony_ci<p>General improvements and bug fixes to argument parsing. The [-abc] exclude
34030f66f451Sopenharmony_cilogic should now clear arguments slots when disabling options. Bare --longopts
34040f66f451Sopenharmony_cishould work now and be able to report errors using their name, the new ;
34050f66f451Sopenharmony_cioption allows optional arguments to longopts only suppliable with = (I.E.
34060f66f451Sopenharmony_ci--color and --color=auto but not --color auto).</p>
34070f66f451Sopenharmony_ci
34080f66f451Sopenharmony_ci<p>I'm gradually weaning the code off of itoa()/utoa() because sprintf
34090f66f451Sopenharmony_cidoes this already. In this case "simple" probably means "let libc do it
34100f66f451Sopenharmony_cifor us".</p>
34110f66f451Sopenharmony_ci
34120f66f451Sopenharmony_ci<p>Rewrote for_each_pid_with_name_in() and renamed it to just names_to_pid().
34130f66f451Sopenharmony_ciIt shouldn't get confused trying to compare absolute and relative paths quite
34140f66f451Sopenharmony_ciso much anymore.</p>
34150f66f451Sopenharmony_ci
34160f66f451Sopenharmony_ci<p>lib/llist.c grew a new dlist_pop() function for removing a doubly
34170f66f451Sopenharmony_cilinked list entry while maintaining a circular list; tail and patch are
34180f66f451Sopenharmony_ciusing it now.</p>
34190f66f451Sopenharmony_ci
34200f66f451Sopenharmony_ci<p>The musl guys suggested a new optimization flag
34210f66f451Sopenharmony_ci(-fno-asynchronous-unwind-tables)
34220f66f451Sopenharmony_cithat shaves about 10% off the binary size by removing a C++ism that crept
34230f66f451Sopenharmony_ciinto gcc's idea of C. While I don't normally try to micromanage the compiler,
34240f66f451Sopenharmony_ci"-fstop-being-stupid" is a thing you have to hit gcc with from time to time.</p>
34250f66f451Sopenharmony_ci
34260f66f451Sopenharmony_ci<h3>Bugfixes</h3>
34270f66f451Sopenharmony_ci
34280f66f451Sopenharmony_ci<p>Felix Janda and I did a largeish rewrite of tail to
34290f66f451Sopenharmony_cifinally make it work right (we think). Still need to implement tail -f
34300f66f451Sopenharmony_cisomeday (the tricky bit is making -f follow multiple files at once).
34310f66f451Sopenharmony_ciFelix also reported a bug in xpidfile.</p>
34320f66f451Sopenharmony_ci
34330f66f451Sopenharmony_ci<p>Juhani Haverinen pointed out that
34340f66f451Sopenharmony_cipython 3 doesn't work with config2help.py, so the detection logic looks
34350f66f451Sopenharmony_cifor python2 (until I get around to rewriting that in C). Elie De Brauwer
34360f66f451Sopenharmony_cithen fixed our first attempt at this, and also fixed uname's help string.</p>
34370f66f451Sopenharmony_ci
34380f66f451Sopenharmony_ci<p>Ashwini Sharma
34390f66f451Sopenharmony_cipointed out the build was making a FLAG_ macro for " " which broke some
34400f66f451Sopenharmony_ciconfigurations. (That's a control character, not a command line option.)</p>
34410f66f451Sopenharmony_ci
34420f66f451Sopenharmony_ci<p>Jacek Bukarewicz pointed out a bug in chdir permission handling, and
34430f66f451Sopenharmony_cia way to make env segfault. Both should be fixed now.</p> 
34440f66f451Sopenharmony_ci
34450f66f451Sopenharmony_ci<p>The new function xexec_optargs()
34460f66f451Sopenharmony_cireplaces calls to xexec(toys.optargs) to avoid freeing and reusing optargs
34470f66f451Sopenharmony_ciduring option parsing screwing stuff up (such as netcat's exec mode).</p>
34480f66f451Sopenharmony_ci
34490f66f451Sopenharmony_ci<p>The stat command's %a output was padded with leading zeroes, which
34500f66f451Sopenharmony_cididn't match anybody else's behavior and thus made the test suite hiccup
34510f66f451Sopenharmony_cibetween TEST_HOST and testing toybox. (If you go "TEST_HOST=1 scripts/test.sh
34520f66f451Sopenharmony_cicommand" it sanity checks the tests against the host implementation.)</p>
34530f66f451Sopenharmony_ci
34540f66f451Sopenharmony_ci<p>Last release, "mkdir sub/sub && chmod 007 sub/sub && rm -rf sub" didn't
34550f66f451Sopenharmony_cidelete sub and didn't exit with an error either. Neither was correct, rm
34560f66f451Sopenharmony_cishould now be fixed.</p>
34570f66f451Sopenharmony_ci
34580f66f451Sopenharmony_ci<p>
34590f66f451Sopenharmony_ci<a name="26-07-2013" /><a href="#26-07-2013"><hr><h2><b>July 26, 2013</b></h2></a>
34600f66f451Sopenharmony_ci<p>Georgi Chorbadzhiyski maintains a <a href=https://github.com/gfto/toybox>git
34610f66f451Sopenharmony_cimirror</a> of the repository on github, automatically updated from the
34620f66f451Sopenharmony_cimercurial every 6 hours. The mirror is read only, but you can generate patches
34630f66f451Sopenharmony_ciagainst it and post them to the list.</p>
34640f66f451Sopenharmony_ci
34650f66f451Sopenharmony_ci<a name="02-07-2013" /><a href="#02-07-2013"><hr><h2><b>July 2, 2013</b></h2></a>
34660f66f451Sopenharmony_ci<blockquote><p>"Time is an illusion. Lunchtime doubly so." "Very deep. You
34670f66f451Sopenharmony_cishould send that in to the Reader's Digest. They've got a page for people
34680f66f451Sopenharmony_cilike you."</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
34690f66f451Sopenharmony_ci
34700f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.4.5.tar.bz2>Toybox 0.4.5</a> is based on
34710f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/shortlog/941>commit 941</a>. It adds
34720f66f451Sopenharmony_ciuuencode and uudecode from Erich Plondke, and enables Luis Morales' "who" by
34730f66f451Sopenharmony_cidefault. Felix Janda and I cleaned up last year's "stat" submission and
34740f66f451Sopenharmony_cienabled it. Ivo van Poorten added "groups".
34750f66f451Sopenharmony_ciAndre Renaud added "lsusb". I implemented "split", "pivot_root", and "mv".
34760f66f451Sopenharmony_ci</p>
34770f66f451Sopenharmony_ci
34780f66f451Sopenharmony_ci<p>The "help" command is implemented differently now (lib/help.c) and
34790f66f451Sopenharmony_cieach command can now understand --help (including both "toybox --help"
34800f66f451Sopenharmony_ciand "toybox --help command" in the multiplexer).</p>
34810f66f451Sopenharmony_ci
34820f66f451Sopenharmony_ci<p>The "pending" directory has several commands (find, xzcat, nbd-client,
34830f66f451Sopenharmony_cilogger, expr) which work but are not enabled by default pending further cleanup.
34840f66f451Sopenharmony_ciIfconfig is enabled, but still in pending because it's only 2/3 cleaned up.
34850f66f451Sopenharmony_ci(It's an awkward halfway state but I'm not holding up the release for it.)</p>
34860f66f451Sopenharmony_ci
34870f66f451Sopenharmony_ci<p>I'm <a href=cleanup.html>documenting the cleanups</a> to teach
34880f66f451Sopenharmony_cimore people to do it, but the writeups aren't caught up yet. The
34890f66f451Sopenharmony_ci<a href=roadmap.html>roadmap</a> also got updated a bit with further analysis
34900f66f451Sopenharmony_ciof other projects, and the README and about pages got updated.</p>
34910f66f451Sopenharmony_ci
34920f66f451Sopenharmony_ci<p>Fixed _another_ "ls -C" segfault when terminal size can't be detected,
34930f66f451Sopenharmony_cicondensed the ls help text to fit on one page, implented --color, and taught
34940f66f451Sopenharmony_ci-l to print the major, minor numbers when showing block/char devices.
34950f66f451Sopenharmony_ciArgument parsing now handles "--" properly (to end option checking),
34960f66f451Sopenharmony_ciand the infrastructure can now handle bare --longopts that have no
34970f66f451Sopenharmony_cicorresponding short option (both were implemented before but didn't work).
34980f66f451Sopenharmony_ciFixed an old bug in "patch", chmod grew -f, who grew -a. Isaac Dunham
34990f66f451Sopenharmony_cifixed "-" vs "_" handling in modinfo, added a "firmware" output
35000f66f451Sopenharmony_cifield, added -b and -k support, and taught it that the ".ko" extension means
35010f66f451Sopenharmony_cito look for the file at the specified path instead of under /lib. Felix Janda
35020f66f451Sopenharmony_cimoved file permission display code to lib so ls and
35030f66f451Sopenharmony_cistat could share it. Ashwini Sharma spotted a bug in xabspath when the
35040f66f451Sopenharmony_cilast path component exists but we haven't got permissions to open it
35050f66f451Sopenharmony_ci(ala readlink -f /dev/sda as a normal user).
35060f66f451Sopenharmony_ci</p>
35070f66f451Sopenharmony_ci
35080f66f451Sopenharmony_ci<p>In the build infrastructure, scripts/findglobals.sh finds leaked global
35090f66f451Sopenharmony_civariables. (Leaked means they aren't part of the global union: Other than glibc
35100f66f451Sopenharmony_cidebris, toybox should define "this", "toy_list", "toybuf", and "toys", and
35110f66f451Sopenharmony_cithat's it; the rest add memory footprint to every command for the benefit of
35120f66f451Sopenharmony_cijust one command; use GLOBALS() to stick 'em in the union.) Static linking
35130f66f451Sopenharmony_ciagainst libraries other than the host's libc now applies to feature probes
35140f66f451Sopenharmony_cifor unshare and such. Neuter stupid internationalization support that makes
35150f66f451Sopenharmony_civarious host "sort" commands put things in an order other than alphabetical
35160f66f451Sopenharmony_ci(breaking the multiplexer's binary search on command names).
35170f66f451Sopenharmony_ci
35180f66f451Sopenharmony_ci<p>You should now be able to build from a source control snapshot on a build
35190f66f451Sopenharmony_cisystem that hasn't got python: if you disable CONFIG_TOYBOX_HELP. (The
35200f66f451Sopenharmony_cirelease tarballs ship generated/help.h, but it's not in source control.
35210f66f451Sopenharmony_ciEventually I should rewrite that python script in C.)</p>
35220f66f451Sopenharmony_ci</p>
35230f66f451Sopenharmony_ci
35240f66f451Sopenharmony_ci<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
35250f66f451Sopenharmony_ciBSD" <a href=license.html>license</a> got slightly simplified so the first
35260f66f451Sopenharmony_ciparagraph now says:</p>
35270f66f451Sopenharmony_ci
35280f66f451Sopenharmony_ci<blockquote><p>Permission to use, copy, modify, and/or distribute this
35290f66f451Sopenharmony_cisoftware for any purpose with or without fee is hereby granted.</p></blockquote>
35300f66f451Sopenharmony_ci
35310f66f451Sopenharmony_ci<p>It used to continue "provided that the above copyright notice and this
35320f66f451Sopenharmony_cipermission notice appear in all copies", but A) what's the point? B) does "all
35330f66f451Sopenharmony_cicopies" mean binaries, or just source code, or what? C) lots of projects
35340f66f451Sopenharmony_cithat 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
35350f66f451Sopenharmony_ciboth 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
35360f66f451Sopenharmony_ciless obvious) because "all copies must include this function" would violate
35370f66f451Sopenharmony_cithe GPL but "all copies must include this magic text blob" somehow don't?</p>
35380f66f451Sopenharmony_ci
35390f66f451Sopenharmony_ci<p>I don't want to have to care about this anymore. The tweaked version is more
35400f66f451Sopenharmony_cior less public domain with a liability disclaimer, but we're still calling it
35410f66f451Sopenharmony_ciBSD (sometimes "0 clause BSD") to avoid explaining.</p>
35420f66f451Sopenharmony_ci
35430f66f451Sopenharmony_ci<a name="21-03-2013" /><a href="#21-03-2013"><hr><h2><b>March 21, 2013</b></h2></a>
35440f66f451Sopenharmony_ci<p>Video of my ELC talk
35450f66f451Sopenharmony_ci"<a href=http://youtu.be/SGmtP5Lg_t0>Why is Toybox?</a>"
35460f66f451Sopenharmony_ciis up on youtube. Related materials include the
35470f66f451Sopenharmony_ci<a href=http://landley.net/talks/celf-2013.txt>talk outline</a> and an
35480f66f451Sopenharmony_ci<a href=/aboriginal/about.html#selfhost>android self-hosting writeup</a>.</p>
35490f66f451Sopenharmony_ci
35500f66f451Sopenharmony_ci<p>[Updated June 4] The following links jump to specific topics in the video. (Sorry about
35510f66f451Sopenharmony_cithe ads, it's The Linux Foundation.)</p>
35520f66f451Sopenharmony_ci
35530f66f451Sopenharmony_ci<ul>
35540f66f451Sopenharmony_ci<li>0m29s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=0m29s>The smartphone is replacing the PC</a></li>
35550f66f451Sopenharmony_ci  <ul>
35560f66f451Sopenharmony_ci  <li>4m22s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=4m22s>Software needed to become self-hosting</a></li>
35570f66f451Sopenharmony_ci  <li>6m20s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=6m20s>Do we care if android or iphone wins?</a></li>
35580f66f451Sopenharmony_ci  </ul>
35590f66f451Sopenharmony_ci<li>9m45s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=9m45s>Android not vanilla: oppose or accept?</a></li>
35600f66f451Sopenharmony_ci  <ul>
35610f66f451Sopenharmony_ci  <li>11m30s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=11m30s>Open source can't do User Interfaces</a></li>
35620f66f451Sopenharmony_ci  </ul>
35630f66f451Sopenharmony_ci<li>15m09s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=15m09s>Android is not copyleft: oppose or accept?</a></li>
35640f66f451Sopenharmony_ci<li>18m23s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=18m23s>Security issues</a></li>
35650f66f451Sopenharmony_ci<li>21m15s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=21m15s>Solutions to the software problems</a></li>
35660f66f451Sopenharmony_ci  <ul>
35670f66f451Sopenharmony_ci  <li>22m55s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=22m55s>What toybox needs to be/do</a></li>
35680f66f451Sopenharmony_ci  <li>28m17s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=28m17s>What is toybox?</a></li>
35690f66f451Sopenharmony_ci    <ul>
35700f66f451Sopenharmony_ci    <li>28m58s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=28m58s>Why toybox started...</a></li>
35710f66f451Sopenharmony_ci    <li>37m50s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=37m50s>What does toybox actually implement?</a></li>
35720f66f451Sopenharmony_ci    </ul>
35730f66f451Sopenharmony_ci  </ul>
35740f66f451Sopenharmony_ci</ul>
35750f66f451Sopenharmony_ci</span>
35760f66f451Sopenharmony_ci
35770f66f451Sopenharmony_ci
35780f66f451Sopenharmony_ci<a name="14-03-2013" /><a href="#14-03-2013"><hr><h2><b>March 14, 2013</b></h2></a>
35790f66f451Sopenharmony_ci<blockquote><p>"Ford, you're turning into a penguin. Stop it." -
35800f66f451Sopenharmony_ci</p><p>The Hitchhiker's Guide to the Galaxy</p></blockquote>
35810f66f451Sopenharmony_ci
35820f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.4.4.tar.bz2>Toybox 0.4.4</a> is based on
35830f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/shortlog/813>commit 813</a>, adding
35840f66f451Sopenharmony_cithe "time" and "readahead" commands, plus some bugfixes.</p>
35850f66f451Sopenharmony_ci
35860f66f451Sopenharmony_ci<p>The "cp" command now implements the -s symlink option, plus bugfixes
35870f66f451Sopenharmony_cigetting various corner cases right as used in actual package builds.
35880f66f451Sopenharmony_ci"id -Gn root" should now print root's groups
35890f66f451Sopenharmony_ciinstead of the current user's. Several build fixes so toybox builds under
35900f66f451Sopenharmony_ciUbuntu 8.04 again (which is about as old a build environment as you
35910f66f451Sopenharmony_cican expect to find posix-2008 features in).</p>
35920f66f451Sopenharmony_ci
35930f66f451Sopenharmony_ci<p>Unfinished commands have generally been moved to "toys/pending".
35940f66f451Sopenharmony_ciEverything else should "default y" to participate in make defconfig.
35950f66f451Sopenharmony_ciSeveral of those pending commands got some basic cleanup so allyesconfig
35960f66f451Sopenharmony_cishould at least compile (although defconfig is still what's useful).</p>
35970f66f451Sopenharmony_ci
35980f66f451Sopenharmony_ci<p>Significant roadmap updates, checking several other multicall binaries
35990f66f451Sopenharmony_ci(klibc, sash, sbase, s6...) to see what commands they include.</p>
36000f66f451Sopenharmony_ci
36010f66f451Sopenharmony_ci<a name="18-01-2013" /><a href="#18-01-2013"><hr><h2><b>January 18, 2013</b></h2></a>
36020f66f451Sopenharmony_ci<blockquote><p>This must be Thursday. I never could get the hang of Thursdays.</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
36030f66f451Sopenharmony_ci
36040f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.4.3.tar.bz2>Toybox 0.4.3</a> is based on
36050f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/shortlog/793>commit 793</a>. There
36060f66f451Sopenharmony_ciare now exactly 100 commands in defconfig (of a little over 220 on the
36070f66f451Sopenharmony_ci<a href=roadmap.html>todo list</a>).</p>
36080f66f451Sopenharmony_ci
36090f66f451Sopenharmony_ci<p>Elie De Brauwer added the rev command, cleaned up tac, implemented the -s
36100f66f451Sopenharmony_ciand -f flags for seq, added -v and -i to killall (and fixed killall not to
36110f66f451Sopenharmony_cikill itself before finishing its pid list), and added to the test suite.
36120f66f451Sopenharmony_ciFelix Janda added -m to mkdir, pwd -L and -P, and more test suite entries.</p>
36130f66f451Sopenharmony_ci
36140f66f451Sopenharmony_ci<p>Rob Landley added the losetup command, and fixed the existing ls, cp, and
36150f66f451Sopenharmony_cireadlink commands. The segfault in ls
36160f66f451Sopenharmony_cihappened when it couldn't determine the screen size (last release changed the
36170f66f451Sopenharmony_cidefault to -C and a screen size of 0 made column view unhappy), and cp got an
36180f66f451Sopenharmony_ciextensive rewrite bringing it up to date with the dirtree changes and fixing
36190f66f451Sopenharmony_cia number of things it never did right in the first place. The xabspath()
36200f66f451Sopenharmony_cicode in the library now handles a symlink after ".." properly (and the test
36210f66f451Sopenharmony_cisuite checks for it).</p>
36220f66f451Sopenharmony_ci
36230f66f451Sopenharmony_ci<p>Infrastructure-wise the code is better about automatically setting the
36240f66f451Sopenharmony_cierror return code properly. Now error_msg() sets the exit code to 1 if it's
36250f66f451Sopenharmony_cistill defaulting to 0, and the global exit path does a fflush(NULL) with error
36260f66f451Sopenharmony_cibit check rather than trying to be quite so granular about flushing. (That
36270f66f451Sopenharmony_cimeans if we use printf() instead of xprintf() it still exits with the right
36280f66f451Sopenharmony_cierror code, it just doesn't end the program early on an output error.)
36290f66f451Sopenharmony_ciMinor bugfix so TOYBOX_DEBUG
36300f66f451Sopenharmony_cidoesn't always warn about the lack of suid bit when toybox is built with
36310f66f451Sopenharmony_ciat least one STAYROOT command. Bugfix for the option [grouping] logic
36320f66f451Sopenharmony_ci(and then further fixes to the error reporting pointed out by Ashwini Sharma).
36330f66f451Sopenharmony_cidirtree_handle_callback() now has a prefix like the rest of the dirtree
36340f66f451Sopenharmony_cifunctions. A lot of stuff doing manual path handling was switched to using
36350f66f451Sopenharmony_cilibc basename() (including, embarassingly, the basename command), which means
36360f66f451Sopenharmony_ciit now correctly detects "/trailing/slash/" which the previous code didn't.</p>
36370f66f451Sopenharmony_ci
36380f66f451Sopenharmony_ci<p>Also, last release included some accidentally checked in debug code that
36390f66f451Sopenharmony_cidisabled compiler optimization, so the binary size bloated a bit. It's back
36400f66f451Sopenharmony_cito -Os by default now.</p>
36410f66f451Sopenharmony_ci
36420f66f451Sopenharmony_ci<a name="15-12-2012" /><a href="#15-12-2012"><hr><h2><b>December 15, 2012</b></h2></a>
36430f66f451Sopenharmony_ci<blockquote><p>"The major difference between a thing that might go wrong and a
36440f66f451Sopenharmony_cithing that cannot possibly go wrong is that when a thing that cannot possibly
36450f66f451Sopenharmony_cigo wrong goes wrong it usually turns out to be impossible to get at or repair."
36460f66f451Sopenharmony_ci</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
36470f66f451Sopenharmony_ci
36480f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.4.2.tar.bz2>Toybox 0.4.2</a> is based on
36490f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/shortlog/749>commit 749</a> and is
36500f66f451Sopenharmony_cijust a resync. Linux 3.7 came out, meaning it's time to do an Aboriginal
36510f66f451Sopenharmony_ciLinux release, and that should use a stable version of toybox. So here's
36520f66f451Sopenharmony_cia new stable version.</p>
36530f66f451Sopenharmony_ci
36540f66f451Sopenharmony_ci<p>The new commands are cut (from Jason Kyungwan Han), touch
36550f66f451Sopenharmony_ci(from Choubey Ji), expand (from Jonathan Clairembault, and he fixed a
36560f66f451Sopenharmony_cibug in login), and rm (from Rob Landley). Felix Janda added UTF-8
36570f66f451Sopenharmony_cisupport infrastructure (for non-ascii character sets) with a config option.
36580f66f451Sopenharmony_ciElie De Brauwer added tests for cat and sha1sum, and -so options to pidof.
36590f66f451Sopenharmony_ciThe "ls" command defaults to -C (column view) now, and "readlink" now supports
36600f66f451Sopenharmony_ci-fenq.</p>
36610f66f451Sopenharmony_ci
36620f66f451Sopenharmony_ci<p>Portability work: toybox should now build against the musl C library,
36630f66f451Sopenharmony_ciand against older glibc versions (circa 2008, much before that and kernel
36640f66f451Sopenharmony_cifeatures we depend on start to drop out).</p>
36650f66f451Sopenharmony_ci
36660f66f451Sopenharmony_ci<p>The whole codebase got reindented from "one tab" to "two spaces" per
36670f66f451Sopenharmony_cilevel. The option parsing logic now understands [groups] of commands (when more
36680f66f451Sopenharmony_cithan one in a group is selected it can switch the others off, or error out,
36690f66f451Sopenharmony_cior other things). The error_exit() infrastructure can now longjmp back to an
36700f66f451Sopenharmony_ciearlier point instead of exiting. Each toys/* directory now has a README,
36710f66f451Sopenharmony_cithe first line of which is the fancy name menuconfig uses for the directory
36720f66f451Sopenharmony_ci(so no more hardwired directory list in scripts/genconfig.sh).</p>
36730f66f451Sopenharmony_ci
36740f66f451Sopenharmony_ci<p>Fixed a filehandle leak in getmountlist().
36750f66f451Sopenharmony_ciPass parent pointer to dirtree_add_node() so it can give error messages with
36760f66f451Sopenharmony_cifull path. The yesno() function now always reads from stdin and writes to
36770f66f451Sopenharmony_cistderr (we can retry tty checking complexity once we've got commands needing
36780f66f451Sopenharmony_ciit).</p>
36790f66f451Sopenharmony_ci
36800f66f451Sopenharmony_ci<p>The open group broke their website so the
36810f66f451Sopenharmony_ci<a href=http://opengroup.org/onlinepubs/9699919799>old links</a> to POSIX 2008
36820f66f451Sopenharmony_cinow <a href=http://pubs.opengroup.org/onlinepubs/9699919799>need to start with
36830f66f451Sopenharmony_cipubs</a>. Some of the links in the tree have been updated, others haven't while
36840f66f451Sopenharmony_ciI wait to see if their webmaster notices and fixes it.</p>
36850f66f451Sopenharmony_ci
36860f66f451Sopenharmony_ci<p>(I note that the current rm implementation is not technically posix compliant
36870f66f451Sopenharmony_cibecause the standard requires infinite recursion depth and the current
36880f66f451Sopenharmony_ciimplementation uses one filehandle per level. I can add a config option
36890f66f451Sopenharmony_cito do it Posix's way, which is more brittle and needs extra security checks,
36900f66f451Sopenharmony_cibut am waiting for somebody to complain first. The default "ulimit -n" is 1024
36910f66f451Sopenharmony_cifilehandles, so drilling down over 1000 nested subdirectories).</p>
36920f66f451Sopenharmony_ci
36930f66f451Sopenharmony_ci<a name="13-11-2012" /><a href="#13-11-2012"><hr><h2><b>November 13, 2012</b></h2></a>
36940f66f451Sopenharmony_ci<blockquote><p>"Rule Six: The winning team shall be the first team that wins."
36950f66f451Sopenharmony_ci</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
36960f66f451Sopenharmony_ci
36970f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.4.1.tar.bz2>Toybox 0.4.1</a> is based on
36980f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/shortlog/691>commit 691</a>.</p>
36990f66f451Sopenharmony_ci
37000f66f451Sopenharmony_ci<p>Elie De Brauwer contributed usleep, Ashwini Kumar contributed du, and
37010f66f451Sopenharmony_ciKyungwan Han contributed vconfig. Other new commands include switch_root and
37020f66f451Sopenharmony_cimd5sum, and the remaining shell wrappers are now proper commands (dos2unix,
37030f66f451Sopenharmony_ciunix2dos).</p>
37040f66f451Sopenharmony_ci
37050f66f451Sopenharmony_ci<p>The patch command now supports -l, and gethostname is now enabled by
37060f66f451Sopenharmony_cidefault. The df command follows symlinks to get the actual device name.
37070f66f451Sopenharmony_ciFelix Janda added -m support to wc (for utf8).</p>
37080f66f451Sopenharmony_ci
37090f66f451Sopenharmony_ci<p>On the infrastructure side, the commands have now been grouped into
37100f66f451Sopenharmony_ci"posix", "lsb", and "other" subdirectories (for things required by Posix-2008,
37110f66f451Sopenharmony_cithe Linux Standard Base 4.1, and commands in neither). This affects menuconfig
37120f66f451Sopenharmony_ciand the actual source layout (toys/cp.c is now toys/posix/cp.c, and so on).
37130f66f451Sopenharmony_ciAn android directory is planned (see the updated
37140f66f451Sopenharmony_ci<a href=roadmap.html#android>android roadmap analysis</a>).</p>
37150f66f451Sopenharmony_ci
37160f66f451Sopenharmony_ci<p>The FLAG_ macros for command option parsing and TT alias for the command's
37170f66f451Sopenharmony_ciglobal block are now automatically generated, commands should
37180f66f451Sopenharmony_ci#define FOR_commandname before #including <toys.h> to get the macros for that
37190f66f451Sopenharmony_cicommand.</p>
37200f66f451Sopenharmony_ci
37210f66f451Sopenharmony_ci<p>An upgrade to the build infrastructure now allows commands with _ and -
37220f66f451Sopenharmony_ciin them, such as switch_root.</p>
37230f66f451Sopenharmony_ci
37240f66f451Sopenharmony_ci<p>Bugfixes: Avery Pennarun spotted a case where ls showed uid twice instead of
37250f66f451Sopenharmony_ciuid and gid, and that nice was using the wrong range of numbers.
37260f66f451Sopenharmony_ciThe ls command also recursed inappropriately last time (not quite
37270f66f451Sopenharmony_ciproperly converted for the dirtree changes last release), and now it's
37280f66f451Sopenharmony_cifixed. Roy Tam pointed out a glitch in sh, and fixed df's percentage
37290f66f451Sopenharmony_cicalculation to match the POSIX spec. The kernel build didn't like our mktemp
37300f66f451Sopenharmony_ciand it does now. The wc command wasn't quite posix compliant (trailing spaces
37310f66f451Sopenharmony_cibreak stuff). The ls command recursed inappropriately last time (not quite
37320f66f451Sopenharmony_ciproperly converted for the dirtree changes last release), and now it's
37330f66f451Sopenharmony_cifixed. The catv command wasn't displaying byte 255 correctly. Some lib
37340f66f451Sopenharmony_cifixes (thinko in xpidfile). Fixed uname -m when running a 32 bit x86 binary
37350f66f451Sopenharmony_cion an x86-64 host (it lies and says the system is i686, i586, or i486 depending
37360f66f451Sopenharmony_cion what the toolchain that built the binary supported. This makes builds in
37370f66f451Sopenharmony_cia 32 bit chroot on a 64 bit kernel break less.) The df command was checking
37380f66f451Sopenharmony_cipartitions in the wrong order (displaying undermounts instead of overmounts:
37390f66f451Sopenharmony_cithis used to work but some library code changed out from under it and it
37400f66f451Sopenharmony_ciwasn't updated to match until now). Felix Janda filled out the test suite
37410f66f451Sopenharmony_cisome more. The patch file creation logic got tweaked several times to
37420f66f451Sopenharmony_cisuccessfully apply more patches. Support for older (pre 2.10) glibc
37430f66f451Sopenharmony_civersions was added to portability.h.</p>
37440f66f451Sopenharmony_ci
37450f66f451Sopenharmony_ci<p>Miscelaneous cleanups all around (mknod, sha1sum, logname), including a
37460f66f451Sopenharmony_cirewrite of taskset to be less dependent on libc getting the headers right. All
37470f66f451Sopenharmony_cithe command headers should now point to the current relevant standards
37480f66f451Sopenharmony_cidocument, where applicable.</p>
37490f66f451Sopenharmony_ci
37500f66f451Sopenharmony_ci<p>This news page had old news entries from before the relaunch moved into
37510f66f451Sopenharmony_cia separate <a href=oldnews.html>oldnews</a> page.</p>
37520f66f451Sopenharmony_ci
37530f66f451Sopenharmony_ci<p>I forgot to create <a href=bin>static binaries</a> last time, but they're
37540f66f451Sopenharmony_ciback now.</p>
37550f66f451Sopenharmony_ci</span>
37560f66f451Sopenharmony_ci
37570f66f451Sopenharmony_ci<a name="23-07-2012" /><a href="#23-07-2012"><hr><h2><b>July 23, 2012</b></h2></a>
37580f66f451Sopenharmony_ci<blockquote><p>"Ford", Arthur said. "There's an infinite number of monkeys
37590f66f451Sopenharmony_ciout here who want to talk to us about this script for Hamlet they've worked
37600f66f451Sopenharmony_ciout."</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
37610f66f451Sopenharmony_ci
37620f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.4.0.tar.bz2>Toybox 0.4.0</a> is based on
37630f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/shortlog/640>commit 640</a>.</p>
37640f66f451Sopenharmony_ci
37650f66f451Sopenharmony_ci<p>The new <a href=status.html>status page</a> is calculated from
37660f66f451Sopenharmony_cithe roadmap info, and should be easier to keep up to date in future.</p>
37670f66f451Sopenharmony_ci
37680f66f451Sopenharmony_ci<p>Andre Renaud contributed od and modinfo. Elie De Brauwer contributed
37690f66f451Sopenharmony_citaskset, bugfixes to cmp and tail, and tests for sort and tail. Kyungwan Han
37700f66f451Sopenharmony_cicontributed passwd. Gaurang Shastri contributed w. Ashwini Sharma spotted a
37710f66f451Sopenharmony_cicase where dirtree was adding extra slashes to a path.</p>
37720f66f451Sopenharmony_ci
37730f66f451Sopenharmony_ci<p>I rewrote od, cleaned up comm, documented the
37740f66f451Sopenharmony_ci<a href=code.html#lib_llist>llist</a> and
37750f66f451Sopenharmony_ci<a href=code.html#lib_dirtree>dirtree</a> infrastructure, added an -r option
37760f66f451Sopenharmony_cito date (and fixed a bug where -u wouldn't override /etc/localtime),
37770f66f451Sopenharmony_cifixed bugs in chmod +stw, fixed ls to show suid bits properly when the
37780f66f451Sopenharmony_cicorresponding executable bit wasn't set, and worked around a longstanding
37790f66f451Sopenharmony_ciglibc bug where static linking prevents stdout from automatically flushing
37800f66f451Sopenharmony_cipending output on exit.</p>
37810f66f451Sopenharmony_ci
37820f66f451Sopenharmony_ci<a name="25-06-2012" /><a href="#25-06-2012"><hr><h2><b>June 25, 2012</b></h2></a>
37830f66f451Sopenharmony_ci<blockquote><p>"For a moment, nothing happened. Then, after a second or so, nothing continued to happen."</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
37840f66f451Sopenharmony_ci
37850f66f451Sopenharmony_ci<p><a href=downloads/toybox-0.3.1.tar.bz2>Toybox 0.3.1</a> is based on commit
37860f66f451Sopenharmony_ci<a href=http://landley.net/hg/toybox/shortlog/607>commit 607</a>. It's
37870f66f451Sopenharmony_cimostly a bugfix release for ls -l (which was unhappy on targets other than
37880f66f451Sopenharmony_cix86-64), plus a new "date" from Andre Renaud and rewritten chgrp/chown which
37890f66f451Sopenharmony_cinow support the full set of posix flags, plus a little work on the test
37900f66f451Sopenharmony_cisuite and some more header tweaks towards eventual compatability with the
37910f66f451Sopenharmony_cimusl libc.</p>
37920f66f451Sopenharmony_ci
37930f66f451Sopenharmony_ci<p>The todo list runneth over, but "release early, release often", so here
37940f66f451Sopenharmony_ciit is. The roadmap and documentation are a bit behind, and I've got ~40
37950f66f451Sopenharmony_cipending submissions to review. I need to catch up...</p>
37960f66f451Sopenharmony_ci</span>
37970f66f451Sopenharmony_ci
37980f66f451Sopenharmony_ci<a name="12-06-2012" /><a href="#12-06-2012"><hr><h2><b>June 12, 2012</b></h2></a>
37990f66f451Sopenharmony_ci<blockquote><p>"For instance, on the planet Earth, man had always assumed that
38000f66f451Sopenharmony_cihe was more intelligent than dolphins because he had achieved so much - the
38010f66f451Sopenharmony_ciwheel, New York, wars and so on - whilst all the dolphins had ever done was
38020f66f451Sopenharmony_cimuck about in the water having a good time. But conversely, the dolphins had
38030f66f451Sopenharmony_cialways believed that they were far more intelligent than man - for precisely
38040f66f451Sopenharmony_cithe same reasons."</p><p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
38050f66f451Sopenharmony_ci
38060f66f451Sopenharmony_ci<p>It's well past time for <a href=downloads/toybox-0.3.0.tar.bz2>toybox 0.3.0</a>,
38070f66f451Sopenharmony_ciso here it is, based
38080f66f451Sopenharmony_cion <a href=http://landley.net/hg/toybox/shortlog/595>commit 595</a>, and the
38090f66f451Sopenharmony_cistatically linked <a href=downloads/binaries>prebuilt binaries</a> should
38100f66f451Sopenharmony_ciactually be statically linked this time (thanks Ashwini Sharma for spotting
38110f66f451Sopenharmony_cithat).</p>
38120f66f451Sopenharmony_ci
38130f66f451Sopenharmony_ci<p>It's hard to figure out where to cut a release, because development
38140f66f451Sopenharmony_cidoesn't stop. "Long before now" is the obviuos answer, of course.
38150f66f451Sopenharmony_ciThe project's maintainer also moved house during this development cycle, which
38160f66f451Sopenharmony_cithrew things off for a bit (so many boxes). Releases should hopefully be a bit
38170f66f451Sopenharmony_cimore frequent from here on.</p>
38180f66f451Sopenharmony_ci
38190f66f451Sopenharmony_ci<p>The big things Rob worked on this time were the new dirtree (directory
38200f66f451Sopenharmony_citree traversal) infrastructure, and a complete rewrite of ls using that
38210f66f451Sopenharmony_ciwhich should now implement all 26 posix options.</p>
38220f66f451Sopenharmony_ci
38230f66f451Sopenharmony_ci<p>Georgi Chorbadzhiyski added printenv, whoami, mkdir, mkfifo, chmod, chown,
38240f66f451Sopenharmony_cichgrp, and uniq. He also added fraction and extension support to sleep (so if
38250f66f451Sopenharmony_ciyou need a quarter-second sleep, it can do that now), and fixed a build bug
38260f66f451Sopenharmony_cion slackware.</p>
38270f66f451Sopenharmony_ci
38280f66f451Sopenharmony_ci<p>Daniel Walter contributed a string to mode_t parser (in use by chmod and
38290f66f451Sopenharmony_cimkdir -m).  Ilya Kuzmich contributed comm. Elie De Brauwer added mountpoint,
38300f66f451Sopenharmony_civmstat, logname, login, and mktemp. Kevin Chase did some portability cleanups.
38310f66f451Sopenharmony_ciPere Orga fixed some documentation.</p>
38320f66f451Sopenharmony_ci
38330f66f451Sopenharmony_ci<p>The "tac" and "clear" commands are now normal commands instead of shell
38340f66f451Sopenharmony_ciwrappers, and the header #includes have been cleaned up a bit to remove
38350f66f451Sopenharmony_cideprecated functions and attempt to increase compatability with the bionic and
38360f66f451Sopenharmony_cimusl C libraries, "tail" should now use lseek() for large files, and "id" got
38370f66f451Sopenharmony_cisome cleanups and bugfixes.</p>
38380f66f451Sopenharmony_ci
38390f66f451Sopenharmony_ci<p>The new TOYBOX_FLOAT configuration option selects whether or not
38400f66f451Sopenharmony_cito include floating point support (for embedded targets where that's
38410f66f451Sopenharmony_ciproblematic).</p>
38420f66f451Sopenharmony_ci
38430f66f451Sopenharmony_ci<p>Several random bugfixes: unshare() might actually build portably now,
38440f66f451Sopenharmony_ciyes 'n' | cp -i should no longer bypass stdin and prompt via the tty, the
38450f66f451Sopenharmony_ciSUID support no longer drops permissions going through the toybox
38460f66f451Sopenharmony_cimultiplexer command, and a bugfix to xargs -0 means it should no longer
38470f66f451Sopenharmony_cisegfault. (I have a pending bug report about xargs not doing the full
38480f66f451Sopenharmony_ciposix whitespace handling that -0 obsoleted, but I'll deal with that next
38490f66f451Sopenharmony_cirelease.)</p>
38500f66f451Sopenharmony_ci
38510f66f451Sopenharmony_ci<p>The build infrastructure is now automatically generating FLAG_ macros
38520f66f451Sopenharmony_cifor the options, but currently with the wrong names. Some more macro glue
38530f66f451Sopenharmony_ciis necessary, which I haven't quite figured out how to do yet.</p>
38540f66f451Sopenharmony_ci
38550f66f451Sopenharmony_ci<p>A defconfig toybox at the start of the $PATH has successfully built
38560f66f451Sopenharmony_ciLinux From Scratch (in my Aboriginal Linux project). The commands that
38570f66f451Sopenharmony_ci'default n' in the config are often still broken, cleanup is ongoing.
38580f66f451Sopenharmony_ci(The new dirtree stuff broke several of them that haven't been converted
38590f66f451Sopenharmony_ciyet, but if I wait until everything works we won't have a release before
38600f66f451Sopenharmony_ci1.0, so here's a checkpoint.)</p>
38610f66f451Sopenharmony_ci
38620f66f451Sopenharmony_ci
38630f66f451Sopenharmony_ci<a name="03-03-2012" /><a href="#03-03-2012"><hr><h2><b>March 3, 2012</b></h2></a>
38640f66f451Sopenharmony_ci
38650f66f451Sopenharmony_ci<blockquote><p>"They went unnoticed at Goonhilly, passed over Cape Canaveral
38660f66f451Sopenharmony_ciwithout a blip, and Woomera and Jodrell Bank looked straight through them.
38670f66f451Sopenharmony_ciWhich was a pity, because it was exactly the sort of thing they'd been looking
38680f66f451Sopenharmony_cifor all these years."</p><p>- The Hitchhiker's Guide to the Galaxy</p>
38690f66f451Sopenharmony_ci</p></blockquote>
38700f66f451Sopenharmony_ci
38710f66f451Sopenharmony_ci<p>Here's <a href=downloads/toybox-0.2.1.tar.bz2>toybox 0.2.1</a> based
38720f66f451Sopenharmony_cion <a href=http://landley.net/hg/toybox/shortlog/512>commit 512</a>.  This
38730f66f451Sopenharmony_citime around, there are statically linked <a href=downloads/binaries>prebuilt
38740f66f451Sopenharmony_cibinaries</a> for various embedded targets.</p>
38750f66f451Sopenharmony_ci
38760f66f451Sopenharmony_ci<p>It's been a busy few weeks, almost entirely due to new contributors. (I
38770f66f451Sopenharmony_cihave not quite been keeping up.)</p>
38780f66f451Sopenharmony_ci
38790f66f451Sopenharmony_ci<p>Elie De Brauwer contributed free, uptime, swapon, swapoff, lsmod, mknod,
38800f66f451Sopenharmony_ciinsmod, rmmod, and fixed a bug in basename.  Andre Renaud contributed ls, ln,
38810f66f451Sopenharmony_cirealpath, and hostname. Andres Heck contributed pidof and killall.  Daniel
38820f66f451Sopenharmony_ciWalter wrote kill and extended id. Timothy Elliott contributed tail and tests
38830f66f451Sopenharmony_cifor cmp. Frank Bergmann sent a warning fix. Bryce Fricke added -i to cp.
38840f66f451Sopenharmony_ciNathan McSween pointed out an optimization. Georgi Chorbadzhiyski fixed
38850f66f451Sopenharmony_cicross compiling to work more reliably.</p>
38860f66f451Sopenharmony_ci
38870f66f451Sopenharmony_ci<p>(My own contribution this time around was just tightening up other people's
38880f66f451Sopenharmony_cicode, a build fix to unshare, some random bugfixes, and so on. My only new
38890f66f451Sopenharmony_cicode this time around was writing a bash replacement for the existing python
38900f66f451Sopenharmony_cibloat-o-meter.)</p>
38910f66f451Sopenharmony_ci
38920f66f451Sopenharmony_ci<p>Last time (the 0.2.0 release) included the first pass at an id command from
38930f66f451Sopenharmony_ciTim Bird, env and basename from Tryn Mirell, cmp and head from Timothy Elliott,
38940f66f451Sopenharmony_cimore bugfixes from Nathan McSween and Elie De Brauwer, and Luis Felipe Strano
38950f66f451Sopenharmony_ciMoraes did a first pass at the who command plus other bugfixes and
38960f66f451Sopenharmony_cioptimizations.</p>
38970f66f451Sopenharmony_ci
38980f66f451Sopenharmony_ci<p>(For that release I did xargs, cal, truncate, unlink, nohup, tty, wc, link,
38990f66f451Sopenharmony_cidirname, unshare, and various infrastructure tweaks, but it took me 3 months
39000f66f451Sopenharmony_ciand those guys did their stuff in a week or so.)</p>
39010f66f451Sopenharmony_ci
39020f66f451Sopenharmony_ci
39030f66f451Sopenharmony_ci<a name="12-02-2012" /><a href="#12-02-2012"><hr><h2><b>February 12, 2012</b></h2></a>
39040f66f451Sopenharmony_ci<blockquote><p>
39050f66f451Sopenharmony_ci"for though it has many omissions and contains much that is apocryphal, or at
39060f66f451Sopenharmony_cileast wildly inaccurate, it scores over the older, more pedestrian work in two
39070f66f451Sopenharmony_ciimportant respects..."</p>
39080f66f451Sopenharmony_ci<p> - The Hitchhiker's Guide to the Galaxy</p></blockquote>
39090f66f451Sopenharmony_ci
39100f66f451Sopenharmony_ci<p>Here's the first BSD licensed release,
39110f66f451Sopenharmony_ci<a href=downloads/toybox-0.2.0.tar.bz2>toybox-0.2.0</a>, more a synchronization
39120f66f451Sopenharmony_cipoint than anything particularly useful.  47 commands in a reasonably
39130f66f451Sopenharmony_ciready-to-use state (what "make defconfig" builds), another ten or so partially
39140f66f451Sopenharmony_cifinished stubs ("make allyesconfig"), and several
39150f66f451Sopenharmony_cipatches pending on the mailing list I need to review and merge.</p>
39160f66f451Sopenharmony_ci
39170f66f451Sopenharmony_ci<p>More to come...</p>
39180f66f451Sopenharmony_ci
39190f66f451Sopenharmony_ci<hr>
39200f66f451Sopenharmony_ci<a name="15-11-2011" /><a href="#15-11-2011"><hr><h2><b>November 15, 2011</b></h2></a>
39210f66f451Sopenharmony_ci- Back from the dead, Toybox is now under a 2
39220f66f451Sopenharmony_ciclause BSD license, and aiming to become the default command line
39230f66f451Sopenharmony_ciimplementation of Android systems everywhere.</p>
39240f66f451Sopenharmony_ci
39250f66f451Sopenharmony_ci<p>More to come...</p>
39260f66f451Sopenharmony_ci
39270f66f451Sopenharmony_ci<hr>
39280f66f451Sopenharmony_ci
39290f66f451Sopenharmony_ci<p><a href=oldnews.html>Old news</a> from before the relaunch.</p>
39300f66f451Sopenharmony_ci
39310f66f451Sopenharmony_ci<!--#include file="footer.html" -->
3932