* autoload.cc (GetCompressedFileSize): Add.

* fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Compute
	st_blocks value from GetCompressedFileSize() if available.
This commit is contained in:
Corinna Vinschen 2003-02-20 11:12:44 +00:00
parent 7920792369
commit 3a88cf1b10
3 changed files with 21 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2003-02-20 Corinna Vinschen <corinna@vinschen.de>
* autoload.cc (GetCompressedFileSize): Add.
* fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Compute
st_blocks value from GetCompressedFileSize() if available.
2003-02-18 Vaclav Haisman <V.Haisman@sh.cvut.cz>
* wincap.h (wincaps::supports_sparse_files): New flag.

View File

@ -497,6 +497,7 @@ LoadDLLfunc (CoCreateInstance, 20, ole32)
LoadDLLfuncEx (CancelIo, 4, kernel32, 1)
LoadDLLfuncEx (CreateHardLinkA, 12, kernel32, 1)
LoadDLLfuncEx (CreateToolhelp32Snapshot, 8, kernel32, 1)
LoadDLLfuncEx2 (GetCompressedFileSizeA, 8, kernel32, 1, 0xffffffff)
LoadDLLfuncEx (GetConsoleWindow, 0, kernel32, 1)
LoadDLLfuncEx2 (IsDebuggerPresent, 0, kernel32, 1, 1)
LoadDLLfuncEx (Process32First, 8, kernel32, 1)

View File

@ -260,7 +260,20 @@ fhandler_disk_file::fstat_helper (struct __stat64 *buf, path_conv *pc,
}
buf->st_blksize = S_BLKSIZE;
buf->st_blocks = (buf->st_size + S_BLKSIZE - 1) / S_BLKSIZE;
/* GetCompressedFileSize() gets autoloaded. It returns INVALID_FILE_SIZE
if it doesn't exist. Since that's also a valid return value on 64bit
capable file systems, we must additionally check for the win32 error. */
nFileSizeLow = GetCompressedFileSizeA (pc->get_win32 (), &nFileSizeHigh);
if (nFileSizeLow != INVALID_FILE_SIZE || GetLastError () == NO_ERROR)
/* On systems supporting compressed (and sparsed) files,
GetCompressedFileSize() returns the actual amount of
bytes allocated on disk. */
buf->st_blocks = (((__off64_t)nFileSizeHigh << 32)
+ nFileSizeLow + S_BLKSIZE - 1) / S_BLKSIZE;
else
/* Just compute no. of blocks from file size. */
buf->st_blocks = (buf->st_size + S_BLKSIZE - 1) / S_BLKSIZE;
buf->st_mode = 0;
/* Using a side effect: get_file_attibutes checks for