Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/DefaultFileSystem.cpp

Issue 10565049: Implement milliseconds time resolution for lastModified on Linux and Android (Closed)
Patch Set: Created May 14, 2013, 12:54 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <http://adblockplus.org/>, 2 * This file is part of Adblock Plus <http://adblockplus.org/>,
3 * Copyright (C) 2006-2013 Eyeo GmbH 3 * Copyright (C) 2006-2013 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 if (failure) 115 if (failure)
116 { 116 {
117 if (errno == ENOENT) 117 if (errno == ENOENT)
118 return result; 118 return result;
119 throw RuntimeErrorWithErrno("Unable to stat " + path); 119 throw RuntimeErrorWithErrno("Unable to stat " + path);
120 } 120 }
121 result.exists = true; 121 result.exists = true;
122 result.isFile = S_ISREG(nativeStat.st_mode); 122 result.isFile = S_ISREG(nativeStat.st_mode);
123 result.isDirectory = S_ISDIR(nativeStat.st_mode); 123 result.isDirectory = S_ISDIR(nativeStat.st_mode);
124 124
125 /* 125 #define MSEC_IN_SEC 1000
126 * In order to get millisecond resolution for modification times, it's necessa ry to use the 'stat' structure defined in 126 #define NSEC_IN_MSEC 1000000
127 * POSIX 2008, which has 'struct timespec st_mtim' instead of 'time_t st_mtime '. Use "#define _POSIX_C_SOURCE 200809L" 127 // Note: _POSIX_C_SOURCE macro is defined automatically on Linux due to g++
128 * before the headers to invoke. The trouble is that not all systems may have this available, a category that includes 128 // defining _GNU_SOURCE macro.
129 * MS Windows, and so we'll need multiple implementations. 129 #if _POSIX_C_SOURCE >= 200809L
130 */ 130 result.lastModified = static_cast<int64_t>(nativeStat.st_mtim.tv_sec) * MSEC_I N_SEC
131 result.lastModified = static_cast<int64_t>(nativeStat.st_mtime) * 1000; 131 + static_cast<int64_t>(nativeStat.st_mtim.tv_nsec) / NSEC _IN_MSEC;
132 #else
133 result.lastModified = static_cast<int64_t>(nativeStat.st_mtime) * MSEC_IN_SEC;
134 #endif
132 return result; 135 return result;
133 #endif 136 #endif
134 } 137 }
135 138
136 std::string DefaultFileSystem::Resolve(const std::string& path) const 139 std::string DefaultFileSystem::Resolve(const std::string& path) const
137 { 140 {
138 if (basePath == "") 141 if (basePath == "")
139 { 142 {
140 return path; 143 return path;
141 } 144 }
(...skipping 17 matching lines...) Expand all
159 void DefaultFileSystem::SetBasePath(const std::string& path) 162 void DefaultFileSystem::SetBasePath(const std::string& path)
160 { 163 {
161 basePath = path; 164 basePath = path;
162 165
163 if ((*basePath.rbegin() == PATH_SEPARATOR)) 166 if ((*basePath.rbegin() == PATH_SEPARATOR))
164 { 167 {
165 basePath.resize(basePath.size() - 1); 168 basePath.resize(basePath.size() - 1);
166 } 169 }
167 } 170 }
168 171
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld