diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2003-05-25 09:18:43 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2003-05-25 09:18:43 +0000 |
commit | a80229fd4934b438677ec3ac2a7cb9f369c0050c (patch) | |
tree | e5684e765ac36191b7e56455ebda72fbf790807d /winsup/cygwin/syscalls.cc | |
parent | c295ce6f6e18cac30b0e5313cecad9fdab1809c6 (diff) | |
download | cygnal-a80229fd4934b438677ec3ac2a7cb9f369c0050c.tar.gz cygnal-a80229fd4934b438677ec3ac2a7cb9f369c0050c.tar.bz2 cygnal-a80229fd4934b438677ec3ac2a7cb9f369c0050c.zip |
* autoload.cc (GetDiskFreeSpaceEx): Add.
* syscalls.cc (statfs): Call full_path.root_dir() instead of
rootdir(full_path). Use GetDiskFreeSpaceEx when available and
report space available in addition to free space.
* fhandler_disk_file.cc (fhandler_disk_file::fstat_by_name):
Do not call FindFirstFile for disk root directories.
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r-- | winsup/cygwin/syscalls.cc | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 625e05957..3c3be8664 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -1871,11 +1871,12 @@ statfs (const char *fname, struct statfs *sfs) } path_conv full_path (fname, PC_SYM_FOLLOW | PC_FULL); - char *root = rootdir (full_path); + + const char *root = full_path.root_dir(); syscall_printf ("statfs %s", root); - DWORD spc, bps, freec, totalc; + DWORD spc, bps, availc, freec, totalc; if (!GetDiskFreeSpace (root, &spc, &bps, &freec, &totalc)) { @@ -1883,6 +1884,17 @@ statfs (const char *fname, struct statfs *sfs) return -1; } + ULARGE_INTEGER availb, freeb, totalb; + + if (GetDiskFreeSpaceEx (root, &availb, &totalb, &freeb)) + { + availc = availb.QuadPart / (spc*bps); + totalc = totalb.QuadPart / (spc*bps); + freec = freeb.QuadPart / (spc*bps); + } + else + availc = freec; + DWORD vsn, maxlen, flags; if (!GetVolumeInformation (root, NULL, 0, &vsn, &maxlen, &flags, NULL, 0)) @@ -1893,7 +1905,8 @@ statfs (const char *fname, struct statfs *sfs) sfs->f_type = flags; sfs->f_bsize = spc*bps; sfs->f_blocks = totalc; - sfs->f_bfree = sfs->f_bavail = freec; + sfs->f_bavail = availc; + sfs->f_bfree = freec; sfs->f_files = -1; sfs->f_ffree = -1; sfs->f_fsid = vsn; |