[Issue 18017] [External] [DMC] File.size() uses a 32-bit signed integer for size internally (gives wrong results for files over ≈2.1 GB)
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue Nov 28 15:32:29 UTC 2017
    
    
  
https://issues.dlang.org/show_bug.cgi?id=18017
Steven Schveighoffer <schveiguy at yahoo.com> changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |schveiguy at yahoo.com
           Hardware|x86_64                      |x86
            Summary|File.size() uses a 32-bit   |[External] [DMC]
                   |signed integer for size     |File.size() uses a 32-bit
                   |internally (gives wrong     |signed integer for size
                   |results for files over ≈2.1 |internally (gives wrong
                   |GB)                         |results for files over ≈2.1
                   |                            |GB)
--- Comment #1 from Steven Schveighoffer <schveiguy at yahoo.com> ---
The issue here is that DMC's 32-bit ftell returns a 32-bit signed value, and
this translates to int.min here.
Then phobos translates that to an unsigned long (64-bit).
The workaround is to simply use 64-bit C runtime (dmd -m64), which should work
properly.
But until DMC's clib can support 64-bit ftell, D can't do anything about this.
Sure we can treat values from int.min to -2 as unsigned, but that doesn't help
with 5GB files for instance.
One thing we *could* do is throw an error. But I'm not sure that's a
"solution". Nor am I sure that this workaround would work for files that are
larger than uint.max.
--
    
    
More information about the Digitalmars-d-bugs
mailing list