aboutsummaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2003-05-26 16:52:58 +0000
committerCorinna Vinschen <corinna@vinschen.de>2003-05-26 16:52:58 +0000
commitada0376f6499dd8d796de5020eb86d14430cfea4 (patch)
tree28e6df2da329d29372674b7506af283853581b84 /winsup
parent0372ad9f117d574cca0bbad9830d72057b18a34d (diff)
downloadnewlib-ada0376f6499dd8d796de5020eb86d14430cfea4.zip
newlib-ada0376f6499dd8d796de5020eb86d14430cfea4.tar.gz
newlib-ada0376f6499dd8d796de5020eb86d14430cfea4.tar.bz2
* syscalls.cc (statfs): Call GetDiskFreeSpaceEx before GetDiskFreeSpace.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog4
-rw-r--r--winsup/cygwin/syscalls.cc9
2 files changed, 10 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index b61ba69..76f1fc3 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,7 @@
+2003-05-26 Pierre Humblet <pierre.humblet@ieee.org>
+
+ * syscalls.cc (statfs): Call GetDiskFreeSpaceEx before GetDiskFreeSpace.
+
2003-05-26 Corinna Vinschen <corinna@vinschen.de>
* fhandler.cc (is_at_eof): Fix conditional. Use INVALID_FILE_SIZE
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index 3c3be86..8922f94 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -1876,6 +1876,11 @@ statfs (const char *fname, struct statfs *sfs)
syscall_printf ("statfs %s", root);
+ /* GetDiskFreeSpaceEx must be called before GetDiskFreeSpace on
+ WinME, to avoid the MS KB 314417 bug */
+ ULARGE_INTEGER availb, freeb, totalb;
+ BOOL status = GetDiskFreeSpaceEx (root, &availb, &totalb, &freeb);
+
DWORD spc, bps, availc, freec, totalc;
if (!GetDiskFreeSpace (root, &spc, &bps, &freec, &totalc))
@@ -1884,9 +1889,7 @@ statfs (const char *fname, struct statfs *sfs)
return -1;
}
- ULARGE_INTEGER availb, freeb, totalb;
-
- if (GetDiskFreeSpaceEx (root, &availb, &totalb, &freeb))
+ if (status)
{
availc = availb.QuadPart / (spc*bps);
totalc = totalb.QuadPart / (spc*bps);