* 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

@ -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