all OS functions should be "nothrow @trusted @nogc"

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Wed Jul 26 17:11:57 PDT 2017


On 7/26/17 7:56 PM, Andrei Alexandrescu wrote:
> On 07/26/2017 06:16 PM, Steven Schveighoffer wrote:
>> So I guess I should restate that we can assume no implementations 
>> exist that intentionally cause UB when stream is NULL (as in Timon's 
>> example). Either they check for null, and handle gracefully, or don't 
>> check and segfault.
> 
> No need to worry about that at all. If worse comes to worst - i.e. we do 
> port to such an implementation - we can always provide a thin wrapper 
> that checks for NULL then calls the native function. No need to change 
> the signatures. -- Andrei

Hm.. so you mean:

pragma(mangle, "fgetc")
private extern(C) int real_fgetc(FILE * stream)

extern(D) int fgetc(FILE *stream) @trusted
{
   if(stream == null) assert(0);
   return real_fgetc(stream);
}

Yeah, that should work well actually. Nice!

-Steve


More information about the Digitalmars-d mailing list