summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
Diffstat (limited to 'base')
-rw-r--r--base/platform_file.h6
-rw-r--r--base/platform_file_posix.cc8
-rw-r--r--base/platform_file_win.cc8
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