Le 23/11/2013 11:40, Otto Moerbeek a écrit : > On Fri, Nov 22, 2013 at 10:04:02PM +0100, Maxime Villard wrote: > >> Le 22/11/2013 17:48, Ted Unangst a ??crit : >>> On Fri, Nov 22, 2013 at 10:09, Stuart Henderson wrote: >>>> On 2013/11/22 07:25, Maxime Villard wrote: >>> >>>>> If write() fails without EPIPE, d is decremented, and the function >>>>> keeps looping. If write() succeeds after several loops, d will be >>>>> negative, and the function will write from buf-XX. >>> >>> When does write() fail and do we want to keep writing? (If I fill up >>> the filesystem, do I really want to spin here?) >> >> >> I must say that I actually fail to see why EPIPE is the only case >> handled; it should stop looping regardless of the errno code, >> shouldn't it? > > often you'll ned to retry on EAGAIN. But indeed, the code is weird.
as far as I see, here 'fout' is either stdout, popen() or fopen(); none of them is non-blocking, so we can't get EAGAIN > >> >> >>> >>>> Shouldn't it be something more like this? Otherwise if the write() fails, >>>> we attempt writing one byte fewer for every retry. >>> >>> That looks better to me. >>>