Index


Cleaning up the toybox code.

Toybox hasn't always taken proper advantage of external contributions. Lots of people want to help, but their contributions languish out of tree or in the "pending" directory, awaiting cleanup.

Toybox's design goals require simpler, tighter, and more explicit code than most other implementations, among other reasons to allow better security auditing. Writing "another" implementation of standard command line tools isn't very interesting, they should be _better_ implementations. Unfortunately, this means existing, working commands often take more effort to clean up to Toybox's standards than writing a new one from scratch, not because they don't work, but because we aim for an unusual level of polish.

In hopes of teaching more people how to do this cleanup work, I've started breaking cleanup changes into smaller chunks and posting explanations of each change to the mailing list. Below are indexes of such cleanup series. Each commit and post are meant to be read together: each description explains what the corresponding patch was trying to accomplish.

Line/byte totals of completed series are given for scale, but the point of this work is simplicity and compactness, not size per se.

(Note: mercurial's web viewer doesn't follow renames, so although each command name links to a commit list with the bulk of the changes, it may not include the final version of each file moved from the "pending" directory to its final location. The summaries link the initial and cleaned versions of each file when giving line counts.)


General advice and/or policy.

The design of toybox page and the coding style section at the start of the source code walkthrough don't cover everything. Here are some links to mailing list messages that cover various programming topics not directly related to a specific cleanup series:


uuencode

This is an example of cleaning up something that started in a condition most projects would be quite happy with. The initial submission of uuencode and uudecode was a good high quality contribution, written by a seasoned developer who did an excellent job. It was still possible to shrink uuencode almost by half:

Status: COMPLETE

uudecode

I tried to do the uudecode cleanup in smaller stages than uuencode:

Status: COMPLETE

ifconfig

When ifconfig was submitted, it touched a half-dozen files. I glued it together into a single self-contained file, which needed a lot of cleanup. The final version is about 1/3 the size of the original.

This was the first command I started cleaning up with the intent of describing the process, and especially the first few entries in this series describe many of the low hanging fruit techniques used to clean up a codebase.

Status: COMPLETE.

find

814 Initial version by Gurang Shastri.
815
816
847 Felix Janda
848 Whitespace (reindent from tabs -> 2 spaces)
849 More cleanup
867 Felix Janda Improve operator processing.
874 Felix Janda
875 Felix Janda
887 Felix Janda fix -mtime

Status: in progress.

stat

747 initial submission
810 whitespace
811
871 whitespace (reindent from 4 spaces to 2)
872 Felix Janda cleanup
885 Felix Janda
  move permission formatting (777 -> -rwxrwxrwx) from ls to lib so stat can reuse it.
886 Felix Janda remove unimplemented options and clean up help text
910 Felix Janda Add support for stating multiple files.
911 Felix Janda Separate stat and statfs.
912 commit description
design pondering

 914 916

Status: COMPLETE.