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&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