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

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 27 04:27:53 PDT 2017


On 27.07.2017 02:11, Steven Schveighoffer wrote:
> 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

That works but it changes the signature. (extern(D) vs. extern(C)).


More information about the Digitalmars-d mailing list