Catch duplicate command name (which breaks the build already, but doesn't identify the culprit).
Initial cleanup of last: mostly whitespace, move no record test to start of loop, don't bother to stat an empty file to report when an empty log was created (just report current time).
sizeof("string") treats it as a char array _including_ the null terminator, so strncmp(dest, "string", sizeof("string")) is just strcpy.
Add arp from Sandeep Sharma and Kyungwan Han.
Add sysctl by Bilal Qureshi.
First cleanup pass on sysctl.

Remove unnecessary typecasting of things that are already char * to char *,
and multiplying by sizeof(char *) which is 1. Rename do_process() do_flag_a()
since that's the only caller. Move read_key_values() down past trim_spaces()
and read_config_file() so it's next to its only two users. Replace some
euphemisms for 0 with 0.

replace_char() really sounds like something libc should already have one of,
but I'm blanking on it if so. (It doesn't need a temporary variable when the
argument variable is already a copy so changing it won't affect the caller.)
Cleanup pass on sysctl.

Not heavily tested yet but should be finished at the design level.
More sysctl cleanup: fix error message on nonexistent key, write path, and -p.
Promote sysctl from pending to other, default y.
Here's a quick cleanup of md5sum. Executive summary: smaller and faster.

On my machine, for a 2.2 GB file of random bytes, the timings with
warm cache are:
toybox before:     11.4 seconds
toybox after:      8.3 seconds
GNU md5sum:        3.9 seconds
openssl dgst -md5: 3.5 seconds

This is clearly better than before (3x openssl), but still slow (2x openssl).

I suspect there is more low-hanging fruit to be had by eliminating the
memcpy in hash_update (maybe not too much - hash_update accounts for
about 4% of total runtime versus 92% for md5_transform according to
perf - but this would also help sha1sum).

make bloatcheck on x86_64 gcc 4.8.2 -Os:
name                                           old       new      delta
-----------------------------------------------------------------------
 md5rot                                          0        64         64
 md5_transform                                 365       223       -142
-----------------------------------------------------------------------
                                                                    -78 total

Rationale for the changes:

Move definition of 'rol' up so it can be used in md5_transform. This
is purely cosmetic; it expands to exactly the same code.

Put rotation counts in a lookup table instead of calculating them on
the fly. This is mostly a wash size-wise, +5 bytes total, but
worthwhile for readability and speed.

Instead of accessing the state array using a rotating index (the
variable formerly known as 'a'), access the state with constant
offsets and rotate the contents of the array instead.  This is the big
win - it eliminates all the crazy memory addressing math inside the
loop.
bootchartd by Bilal Qureshi.
Teach singleconfig to switch on sub-options of commands it's building.

If we're building a standalone version, it might as well have all the bells and whistles enabled.
Cleanup pass on lspci
Quick cleanup pass on ps.
Fluff out the coding style section, but the result was a bit big for the start of code.html, so move it to design.html.
Cleanup pass on bootchartd.

Might have broken something, don't actually have a test case for bootchartd yet.
lspci text output: add -i, allow -n when disabled

-i is how standard lspci handles changing the PCI ID database.
lspci -n should be a no-op when text is disabled.
dhcp client had a segfault, when DHCP message contained 'pad' option.

The parsing logic kept checking for other options beyond __pad__ option, without
checking if it was __end__ option after that or not.