diff options
-rw-r--r-- | net/disk_cache/simple/simple_util.cc | 33 | ||||
-rw-r--r-- | net/disk_cache/simple/simple_util.h | 4 |
2 files changed, 35 insertions, 2 deletions
diff --git a/net/disk_cache/simple/simple_util.cc b/net/disk_cache/simple/simple_util.cc index e9ec067..4a89f9b 100644 --- a/net/disk_cache/simple/simple_util.cc +++ b/net/disk_cache/simple/simple_util.cc @@ -21,6 +21,25 @@ namespace { // Size of the uint64 hash_key number in Hex format in a string. const size_t kEntryHashKeyAsHexStringSize = 2 * sizeof(uint64); +// TODO(clamy, gavinp): this should go in base +bool GetNanoSecsFromStat(const struct stat& st, + time_t* out_sec, + long* out_nsec) { +#if defined(OS_ANDROID) + *out_sec = st.st_mtime; + *out_nsec = st.st_mtime_nsec; +#elif defined(OS_LINUX) + *out_sec = st.st_mtim.tv_sec; + *out_nsec = st.st_mtim.tv_nsec; +#elif defined(OS_MACOSX) || defined(OS_IOS) || defined(OS_BSD) + *out_sec = st.st_mtimespec.tv_sec; + *out_nsec = st.st_mtimespec.tv_nsec; +#else + return false; +#endif + return true; +} + } // namespace namespace disk_cache { @@ -88,6 +107,20 @@ int64 GetFileOffsetFromKeyAndDataOffset(const std::string& key, // TODO(clamy, gavinp): this should go in base bool GetMTime(const base::FilePath& path, base::Time* out_mtime) { DCHECK(out_mtime); +#if defined(OS_POSIX) + base::ThreadRestrictions::AssertIOAllowed(); + struct stat file_stat; + if (stat(path.value().c_str(), &file_stat) != 0) + return false; + time_t sec; + long nsec; + if (GetNanoSecsFromStat(file_stat, &sec, &nsec)) { + int64 usec = (nsec / base::Time::kNanosecondsPerMicrosecond); + *out_mtime = base::Time::FromTimeT(sec) + + base::TimeDelta::FromMicroseconds(usec); + return true; + } +#endif base::PlatformFileInfo file_info; if (!file_util::GetFileInfo(path, &file_info)) return false; diff --git a/net/disk_cache/simple/simple_util.h b/net/disk_cache/simple/simple_util.h index 3bb80b9..ef51869 100644 --- a/net/disk_cache/simple/simple_util.h +++ b/net/disk_cache/simple/simple_util.h @@ -63,8 +63,8 @@ NET_EXPORT_PRIVATE int64 GetFileOffsetFromKeyAndDataOffset( const std::string& key, int data_offset); -// Fills |out_time| with the time the file last modified time. -// TODO(gavinp): Remove this function. +// Fills |out_time| with the time the file last modified time. Unlike the +// functions in platform_file.h, the time resolution is milliseconds. NET_EXPORT_PRIVATE bool GetMTime(const base::FilePath& path, base::Time* out_mtime); } // namespace simple_backend |