On Mon, Apr 27, 2015 at 08:36:53AM -0700, enh wrote: > On Sun, Apr 26, 2015 at 7:30 PM, Rich Felker <[email protected]> wrote: > > On Sat, Apr 25, 2015 at 12:14:44PM -0700, enh wrote: > >> what's the plan wrt SIGPIPE? the desktop is pretty inconsistent. many > >> (but not all) commands install a signal handler that does _exit(0). > >> others (coreutils 8.21's ls, say) do nothing. normally "what you do > >> about SIGPIPE" isn't a problem but on Android that leads to a crash > >> report and people filing "ls crashed" bugs against me. (our default > >> shell PS setup is also noisy about crashes.) > > > > Why not just *block* SIGPIPE (with sigprocmask) so that the write > > returns an error (EPIPE) and the program applies the same logic it > > would for any other write error? > > toybox does a little better than toolbox there thanks to xwrite, but > i've yet never met anyone who checks the return value of printf...
vmstat.c, cal.c, and see xprintf(). In some places the choice of non-erroring functions is deliberate, so that a failure to write will not lead to an early exit. > plus there's the question of whether giving up because you're writing > to a broken pipe is an error exit or not. you could add a special case > to xwrite (and add xprintf and xputs and...), but since the whole idea > is that code shouldn't have to care, it's easier just to install a > signal handler that does _exit(0). There are xputs and xprintf already. Calling _exit() is wrong for toybox, since you cannot use atexit() type code (eg, delete tempfiles on exit) - xexit() is the recommended path for toybox. Using a fixed return value is wrong; for an example, grep returns 0 for "line matched", 1 for "no match", and >1 for errors. Thanks, Isaac Dunham _______________________________________________ Toybox mailing list [email protected] http://lists.landley.net/listinfo.cgi/toybox-landley.net
