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.
_______________________________________________
Toybox mailing list
Toybox@lists.landley.net
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to