diff options
Diffstat (limited to 'base')
-rw-r--r-- | base/platform_file.h | 6 | ||||
-rw-r--r-- | base/platform_file_posix.cc | 8 | ||||
-rw-r--r-- | base/platform_file_win.cc | 8 |
3 files changed, 22 insertions, 0 deletions
diff --git a/base/platform_file.h b/base/platform_file.h index 0dbf4e4..46ff0cc 100644 --- a/base/platform_file.h +++ b/base/platform_file.h @@ -6,6 +6,8 @@ #define BASE_PLATFORM_FILE_H_ #include "build/build_config.h" +#include "base/basictypes.h" + #if defined(OS_WIN) #include <windows.h> #endif @@ -53,6 +55,10 @@ PlatformFile CreatePlatformFile(const std::wstring& name, // Closes a file handle bool ClosePlatformFile(PlatformFile file); +// Get the length of an underlying file. Returns false on error. Otherwise +// *size is set to the length of the file, in bytes. +bool GetPlatformFileSize(PlatformFile file, uint64* size); + } // namespace base #endif // BASE_PLATFORM_FILE_H_ diff --git a/base/platform_file_posix.cc b/base/platform_file_posix.cc index 46039b9..bfd40e9 100644 --- a/base/platform_file_posix.cc +++ b/base/platform_file_posix.cc @@ -77,4 +77,12 @@ bool ClosePlatformFile(PlatformFile file) { return close(file); } +bool GetPlatformFileSize(PlatformFile file, uint64* out_size) { + struct stat st; + if (fstat(file, &st)) + return false; + *out_size = st.st_size; + return true; +} + } // namespace base diff --git a/base/platform_file_win.cc b/base/platform_file_win.cc index 1143487..ccaee1e 100644 --- a/base/platform_file_win.cc +++ b/base/platform_file_win.cc @@ -75,4 +75,12 @@ bool ClosePlatformFile(PlatformFile file) { return (CloseHandle(file) == 0); } +bool GetPlatformFileSize(PlatformFile file, uint64* out_size) { + LARGE_INTEGER size; + if (!GetFileSizeEx(file, &size)) + return false; + *out_size = size.QuadPart; + return true; +} + } // namespace disk_cache |