* 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:
parent
7920792369
commit
3a88cf1b10
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue