On Thu, Jun 13, 2013 at 11:11:06AM -0700, Walter Bright wrote:
> On 6/13/2013 6:24 AM, Steven Schveighoffer wrote:
[...]
> >This isn't the problem that was presented.  The problem that was
> >presented is that given an invalid file descriptor, writeln happily
> >works (as long as you don't cause a flush) and does not throw.  This
> >is unintuitive to someone who is expecting writeln to choke on an
> >invalid descriptor.
> 
> That behavior is normal to anyone used to working with C stdio.
> 
> What is wrong and needs fixing is the program exiting with "success"
> indication when the output has actually failed.

Wouldn't an easy fix be for DMD to insert this into main()?

        scope(exit) if (fflush(stdout) != 0)
                throw new Exception(...);

        // ... rinse, repeat for whatever other fd's we care about

Of course, instead of hardcoding stdio into DMD, the scope(exit) can
call some kind of library cleanup hook, maybe something like:

        scope(exit) _druntimeCleanup();

and the throw can happen inside _druntimeCleanup, which should cause the
exit status to be non-zero.

Not sure how to make this exception user-catchable, though.


T

-- 
Ph.D. = Permanent head Damage

Reply via email to