Chromium Code Reviews| Index: base/files/file_posix.cc |
| diff --git a/base/files/file_posix.cc b/base/files/file_posix.cc |
| index 46d6d94eaaf77c42044bf39146cf05281d0ffc8e..4b82e8aab9fd0ddc9bb24878f8c6a68f2e10531c 100644 |
| --- a/base/files/file_posix.cc |
| +++ b/base/files/file_posix.cc |
| @@ -32,13 +32,11 @@ COMPILE_ASSERT(File::FROM_BEGIN == SEEK_SET && |
| namespace { |
| #if defined(OS_BSD) || defined(OS_MACOSX) || defined(OS_NACL) |
| -typedef struct stat stat_wrapper_t; |
| static int CallFstat(int fd, stat_wrapper_t *sb) { |
| base::ThreadRestrictions::AssertIOAllowed(); |
| return fstat(fd, sb); |
| } |
| #else |
| -typedef struct stat64 stat_wrapper_t; |
| static int CallFstat(int fd, stat_wrapper_t *sb) { |
| base::ThreadRestrictions::AssertIOAllowed(); |
| return fstat64(fd, sb); |
| @@ -119,6 +117,58 @@ static File::Error CallFctnlFlock(PlatformFile file, bool do_lock) { |
| } // namespace |
| +void File::Info::FromStat(const stat_wrapper_t& stat_info) { |
| + is_directory = S_ISDIR(stat_info.st_mode); |
| + is_symbolic_link = S_ISLNK(stat_info.st_mode); |
| + size = stat_info.st_size; |
| + |
| +#if defined(OS_LINUX) |
| + time_t last_modified_sec = stat_info.st_mtim.tv_sec; |
| + int64 last_modified_nsec = stat_info.st_mtim.tv_nsec; |
| + time_t last_accessed_sec = stat_info.st_atim.tv_sec; |
| + int64 last_accessed_nsec = stat_info.st_atim.tv_nsec; |
| + time_t creation_time_sec = stat_info.st_ctim.tv_sec; |
| + int64 creation_time_nsec = stat_info.st_ctim.tv_nsec; |
| +#elif defined(OS_ANDROID) |
| + time_t last_modified_sec = stat_info.st_mtime; |
| + int64 last_modified_nsec = stat_info.st_mtime_nsec; |
| + time_t last_accessed_sec = stat_info.st_atime; |
| + int64 last_accessed_nsec = stat_info.st_atime_nsec; |
| + time_t creation_time_sec = stat_info.st_ctime; |
| + int64 creation_time_nsec = stat_info.st_ctime_nsec; |
| +#elif defined(OS_MACOSX) || defined(OS_IOS) || defined(OS_BSD) |
| + time_t last_modified_sec = stat_info.st_mtimespec.tv_sec; |
| + int64 last_modified_nsec = stat_info.st_mtimespec.tv_nsec; |
| + time_t last_accessed_sec = stat_info.st_atimespec.tv_sec; |
| + int64 last_accessed_nsec = stat_info.st_atimespec.tv_nsec; |
| + time_t creation_time_sec = stat_info.st_ctimespec.tv_sec; |
| + int64 creation_time_nsec = stat_info.st_ctimespec.tv_nsec; |
| +#else |
| + // TODO(gavinp): Investigate a good high resolution option for OS_NACL. |
|
nfullagar1
2014/03/28 19:40:15
couple of nits
- #else is for default, but commen
rvargas (doing something else)
2014/03/28 19:53:31
Sure. I was basically just moving this code :)
Eve
nfullagar1
2014/03/31 19:59:07
Talking to Roland NaCl should be zero'ing the nsec
rvargas (doing something else)
2014/03/31 23:02:28
Given that a default option is needed even if we a
|
| + time_t last_modified_sec = stat_info.st_mtime; |
| + int64 last_modified_nsec = 0; |
| + time_t last_accessed_sec = stat_info.st_atime; |
| + int64 last_accessed_nsec = 0; |
| + time_t creation_time_sec = stat_info.st_ctime; |
| + int64 creation_time_nsec = 0; |
| +#endif |
| + |
| + last_modified = |
| + Time::FromTimeT(last_modified_sec) + |
| + TimeDelta::FromMicroseconds(last_modified_nsec / |
| + Time::kNanosecondsPerMicrosecond); |
| + |
| + last_accessed = |
| + Time::FromTimeT(last_accessed_sec) + |
| + TimeDelta::FromMicroseconds(last_accessed_nsec / |
| + Time::kNanosecondsPerMicrosecond); |
| + |
| + creation_time = |
| + Time::FromTimeT(creation_time_sec) + |
| + TimeDelta::FromMicroseconds(creation_time_nsec / |
| + Time::kNanosecondsPerMicrosecond); |
| +} |
| + |
| // NaCl doesn't implement system calls to open files directly. |
| #if !defined(OS_NACL) |
| // TODO(erikkay): does it make sense to support FLAG_EXCLUSIVE_* here? |
| @@ -384,53 +434,7 @@ bool File::GetInfo(Info* info) { |
| if (CallFstat(file_.get(), &file_info)) |
| return false; |
| - info->is_directory = S_ISDIR(file_info.st_mode); |
| - info->is_symbolic_link = S_ISLNK(file_info.st_mode); |
| - info->size = file_info.st_size; |
| - |
| -#if defined(OS_LINUX) |
| - const time_t last_modified_sec = file_info.st_mtim.tv_sec; |
| - const int64 last_modified_nsec = file_info.st_mtim.tv_nsec; |
| - const time_t last_accessed_sec = file_info.st_atim.tv_sec; |
| - const int64 last_accessed_nsec = file_info.st_atim.tv_nsec; |
| - const time_t creation_time_sec = file_info.st_ctim.tv_sec; |
| - const int64 creation_time_nsec = file_info.st_ctim.tv_nsec; |
| -#elif defined(OS_ANDROID) |
| - const time_t last_modified_sec = file_info.st_mtime; |
| - const int64 last_modified_nsec = file_info.st_mtime_nsec; |
| - const time_t last_accessed_sec = file_info.st_atime; |
| - const int64 last_accessed_nsec = file_info.st_atime_nsec; |
| - const time_t creation_time_sec = file_info.st_ctime; |
| - const int64 creation_time_nsec = file_info.st_ctime_nsec; |
| -#elif defined(OS_MACOSX) || defined(OS_IOS) || defined(OS_BSD) |
| - const time_t last_modified_sec = file_info.st_mtimespec.tv_sec; |
| - const int64 last_modified_nsec = file_info.st_mtimespec.tv_nsec; |
| - const time_t last_accessed_sec = file_info.st_atimespec.tv_sec; |
| - const int64 last_accessed_nsec = file_info.st_atimespec.tv_nsec; |
| - const time_t creation_time_sec = file_info.st_ctimespec.tv_sec; |
| - const int64 creation_time_nsec = file_info.st_ctimespec.tv_nsec; |
| -#else |
| - // TODO(gavinp): Investigate a good high resolution option for OS_NACL. |
| - const time_t last_modified_sec = file_info.st_mtime; |
| - const int64 last_modified_nsec = 0; |
| - const time_t last_accessed_sec = file_info.st_atime; |
| - const int64 last_accessed_nsec = 0; |
| - const time_t creation_time_sec = file_info.st_ctime; |
| - const int64 creation_time_nsec = 0; |
| -#endif |
| - |
| - info->last_modified = |
| - base::Time::FromTimeT(last_modified_sec) + |
| - base::TimeDelta::FromMicroseconds(last_modified_nsec / |
| - base::Time::kNanosecondsPerMicrosecond); |
| - info->last_accessed = |
| - base::Time::FromTimeT(last_accessed_sec) + |
| - base::TimeDelta::FromMicroseconds(last_accessed_nsec / |
| - base::Time::kNanosecondsPerMicrosecond); |
| - info->creation_time = |
| - base::Time::FromTimeT(creation_time_sec) + |
| - base::TimeDelta::FromMicroseconds(creation_time_nsec / |
| - base::Time::kNanosecondsPerMicrosecond); |
| + info->FromStat(file_info); |
| return true; |
| } |