[Toybox] [CLEANUP] stat's done.

Rob Landley rob at landley.net
Sun Jun 2 13:34:06 PDT 2013


I put description text into commits 912, 914, 916, and 917, all  
building on Felix's work. And then the actual mv was its own commit  
(918) in hopes of confusing source control less. (Although I did switch  
"default n" to "default y" in the same commit so the file wasn't  
_identical_...)

   http://landley.net/hg/toybox/rev/912
   http://landley.net/hg/toybox/rev/914
   http://landley.net/hg/toybox/rev/916
   http://landley.net/hg/toybox/rev/917

I was thinking of doing some variant of the table-driven logic I've  
been building in ifconfig's main (which is why I checked in the  
peek/poke stuff), but each iteration here is just a single function  
call with two arguments, so it's not really a win.

Instead I collapsed the big switch/case things into if/else staircases,  
which is a slightly nonobvious move but makes the code easier to  
understand (at least for me) because it fits 4 times as much code on  
the screen.

The 4 lines were Blank line, case line, xprintf(), break. This was  
replaced with 1 line: "if (test) xprintf();". So the redundancy I'm  
eliminating is 3 of the 4 repeated source lines. (It's possible for a  
refactor to complicate things and thus make it harder to understand,  
but it's not the case here.)

This doesn't even really make the binary bigger. (I haven't done a  
bloatcheck on it this time but previous such switches I found it  
actually made it smaller: the switch/case is often a binary search on a  
lookup on a table which is optimized for speed not size, the if/else  
can cache half the comparison in a register. As for speed, if it's all  
fitting in L1 cache it's a rounding error, the function call pulling in  
a new cache line is a bigger deal in performance terms and we don't  
worry about that...)

Rob


More information about the Toybox mailing list