Thread overview
[Issue 1105] New: std.c.linux.linux.stat fails for files > 2GB
Apr 06, 2007
d-bugmail
Apr 25, 2007
d-bugmail
Apr 28, 2007
d-bugmail
Apr 28, 2007
d-bugmail
Apr 29, 2007
d-bugmail
April 06, 2007
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");
}


-- 

April 25, 2007
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;
# }


-- 

April 28, 2007
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)


-- 

April 28, 2007
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


-- 

April 29, 2007
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 ***


--