diff --git a/src/xpdev/dirwrap.c b/src/xpdev/dirwrap.c index e5e63e71fa01d89dd2ab0b17291e41566e541d05..61c481641a5ca596e767a3902babf5c6ce164fd5 100644 --- a/src/xpdev/dirwrap.c +++ b/src/xpdev/dirwrap.c @@ -921,53 +921,21 @@ typedef BOOL (WINAPI * GetDiskFreeSpaceEx_t) static uint64_t getdiskspace(const char* path, uint64_t unit, bool freespace) { #if defined(_WIN32) - char root[16]; - DWORD TotalNumberOfClusters; - DWORD NumberOfFreeClusters; - DWORD BytesPerSector; - DWORD SectorsPerCluster; uint64_t total; ULARGE_INTEGER avail; ULARGE_INTEGER size; - static HINSTANCE hK32 = NULL; - GetDiskFreeSpaceEx_t GDFSE = NULL; - - if (hK32 == NULL) - hK32 = LoadLibraryA("KERNEL32"); - if (hK32 != NULL) - GDFSE = (GetDiskFreeSpaceEx_t)GetProcAddress(hK32, "GetDiskFreeSpaceExA"); - - if (GDFSE != NULL) { /* Windows 95-OSR2 or later */ - if (!GDFSE( - path, /* pointer to the directory name */ - &avail, /* receives the number of bytes on disk avail to the caller */ - &size, /* receives the number of bytes on disk */ - NULL)) /* receives the free bytes on disk */ - return 0; - - total = freespace ? avail.QuadPart : size.QuadPart; - if (unit > 1) - total /= unit; - return total; - } - /* Windows 95 (old way), limited to 2GB */ - sprintf(root, "%.3s", path); - if (!GetDiskFreeSpaceA( - root, /* pointer to root path */ - (PDWORD)&SectorsPerCluster, /* pointer to sectors per cluster */ - (PDWORD)&BytesPerSector, /* pointer to bytes per sector */ - (PDWORD)&NumberOfFreeClusters, /* pointer to number of free clusters */ - (PDWORD)&TotalNumberOfClusters /* pointer to total number of clusters */ - )) + if (!GetDiskFreeSpaceExA( + path, /* pointer to the directory name */ + &avail, /* receives the number of bytes on disk avail to the caller */ + &size, /* receives the number of bytes on disk */ + NULL)) /* receives the free bytes on disk */ return 0; - if (freespace) - TotalNumberOfClusters = NumberOfFreeClusters; + total = freespace ? avail.QuadPart : size.QuadPart; if (unit > 1) - TotalNumberOfClusters /= (DWORD)unit; - return TotalNumberOfClusters * SectorsPerCluster * BytesPerSector; - + total /= unit; + return total; #elif defined(__solaris__) || (defined(__NetBSD_Version__) && (__NetBSD_Version__ >= 300000000 /* NetBSD 3.0 */))