[Toybox] [CLEANUP] uudecode commit 835

Rob Landley rob at landley.net
Sat Jan 11 12:18:27 PST 2014


http://landley.net/hg/toybox/rev/835

Two changes to the NEWTOY() line: only allow at most 1 leftover 
non-option argument instead of 2 (because POSIX says so), and use 
TOYFLAG_UMASK to tell the setup code in main.c to set the umask to 0 
before calling uudecode's main function. (That way we don't have to do it.)

This means the test for toys.optc == 1 near the start of uudecode_main() 
can just test for nonzero instead of specifically for 1. (Saves a ~4 
byte constant. You'd think they'd have 1 byte constants for small 
commonly used numbers, but oddly it doesn't seem to come up much in 
assembly dumps.)

The old "mode = 744" in the declaration went away because we actually 
parse the permission string in the input now. So the old mode was an 
int, the new one is a string.

The old code had a special purpose loop to skip blank lines at the 
beginning, followed by a bunch of strncmp() and loops to parse the rest.

The new code puts all that inside a single loop using two sscanf() calls 
to parse each of the two kinds of lines it's looking for in one go 
(including the mode field the previous one ignored). The new loop skips 
any line that isn't one of the begin lines it's looking for (blank or 
not), so a uudecode blob appended to a message should decode ok. The 
error message changed from "empty file" to the slightly more accurate 
"no header" (it could have all sorts of stuff in it, just not a valid 
uudecode block).

At the end, close both the input and output filehandles in the 
TOYBOX_FREE block.


More information about the Toybox mailing list