www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 1105] New: std.c.linux.linux.stat fails for files > 2GB

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1105

           Summary: std.c.linux.linux.stat fails for files > 2GB
           Product: D
           Version: 1.010
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: Alexander.Blum gmail.com


While trying to use listdir (combined with isdir) on a folder containing files
 2GB I ran into a "Value too large for defined data type" FileException.
Further inspection showed that a call to std.c.linux.linux.stat returns -1 on files > 2GB. I found that st_size is of type int in struct_stat. Testfall: dd if=/dev/zero of=/tmp/test.dat bs=100MB count=22 error.d: import std.file; void main(char[][] args) { isdir ("/tmp/test.dat"); } --
Apr 06 2007
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1105


thomas-dloop kuehne.cn changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID




------- Comment #1 from thomas-dloop kuehne.cn  2007-04-25 12:49 -------
This is a C issue. The below C code shows the same symbtoms like the above D 
code:

# #include <sys/stat.h>
# #include <stdio.h>
# #include <errno.h>
#
# int main(){
#    struct stat meta;
#    int code = stat("/tmp/test.dat", &meta);
#
#    if(0 == code){
#       printf("isdir: %i\n", S_ISDIR(meta.st_mode));
#    }else{
#       printf("errno: %i\n", errno);
#    }
#
#    return 0;
# }

While this issue can be by-passed via stat64 (below) stat64 isn't guaranteed to 
be present (most current Linux system should support it but some odler ones 
don't):

# #define _LARGEFILE64_SOURCE 1
# #include <sys/stat.h>
# #include <stdio.h>
# #include <errno.h>
#
# int main(){
#    struct stat64 meta;
#    int code = stat64("/tmp/test.dat", &meta);
#
#    if(0 == code){
#       printf("isdir: %i\n", S_ISDIR(meta.st_mode));
#    }else{
#       printf("errno: %i\n", errno);
#    }
#
#    return 0;
# }


-- 
Apr 25 2007
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1105





------- Comment #2 from thomas-dloop kuehne.cn  2007-04-28 12:08 -------
Created an attachment (id=144)
 --> (http://d.puremagic.com/issues/attachment.cgi?id=144&action=view)
bigfile support for DMD-1.014's Phobos (mostly un-tested)


-- 
Apr 28 2007
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1105





------- Comment #3 from thomas-dloop kuehne.cn  2007-04-28 12:10 -------
Created an attachment (id=145)
 --> (http://d.puremagic.com/issues/attachment.cgi?id=145&action=view)
bzip2 compressed DMD-1.014 libphobos.a with bigfile support


-- 
Apr 28 2007
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1105


thomas-dloop kuehne.cn changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|INVALID                     |DUPLICATE




------- Comment #4 from thomas-dloop kuehne.cn  2007-04-29 04:00 -------
changed to "duplicate" because Bugzilla's duplication statistic is rather 
limited and doesn't support lower numbered issue reports to be marked as 
duplicate of an higher numbered one

*** This bug has been marked as a duplicate of 579 ***


-- 
Apr 29 2007