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

Side by Side Diff: src/DefaultFileSystem.cpp

Issue 29512648: Issue 5475 - Update adblockpluscore dependency to revision hg:b935a0402215 (Closed) Base URL: https://github.com/adblockplus/libadblockplus.git
Patch Set: Created Aug. 11, 2017, 12:36 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
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2017 eyeo GmbH 3 * Copyright (C) 2006-2017 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 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 if (err == ERROR_FILE_NOT_FOUND || 117 if (err == ERROR_FILE_NOT_FOUND ||
118 err == ERROR_PATH_NOT_FOUND || 118 err == ERROR_PATH_NOT_FOUND ||
119 err == ERROR_INVALID_DRIVE) 119 err == ERROR_INVALID_DRIVE)
120 { 120 {
121 return result; 121 return result;
122 } 122 }
123 throw RuntimeErrorWithErrno("Unable to stat " + path); 123 throw RuntimeErrorWithErrno("Unable to stat " + path);
124 } 124 }
125 125
126 result.exists = true; 126 result.exists = true;
127 if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
128 {
129 result.isFile = false;
130 result.isDirectory = true;
131 }
132 else
133 {
134 result.isFile = true;
135 result.isDirectory = false;
136 }
137 127
138 // See http://support.microsoft.com/kb/167296 on this conversion 128 // See http://support.microsoft.com/kb/167296 on this conversion
139 #define FILE_TIME_TO_UNIX_EPOCH_OFFSET 116444736000000000LL 129 #define FILE_TIME_TO_UNIX_EPOCH_OFFSET 116444736000000000LL
140 #define FILE_TIME_TO_MILLISECONDS_FACTOR 10000 130 #define FILE_TIME_TO_MILLISECONDS_FACTOR 10000
141 ULARGE_INTEGER time; 131 ULARGE_INTEGER time;
142 time.LowPart = data.ftLastWriteTime.dwLowDateTime; 132 time.LowPart = data.ftLastWriteTime.dwLowDateTime;
143 time.HighPart = data.ftLastWriteTime.dwHighDateTime; 133 time.HighPart = data.ftLastWriteTime.dwHighDateTime;
144 result.lastModified = (time.QuadPart - FILE_TIME_TO_UNIX_EPOCH_OFFSET) / 134 result.lastModified = (time.QuadPart - FILE_TIME_TO_UNIX_EPOCH_OFFSET) /
145 FILE_TIME_TO_MILLISECONDS_FACTOR; 135 FILE_TIME_TO_MILLISECONDS_FACTOR;
146 return result; 136 return result;
147 #else 137 #else
148 struct stat nativeStat; 138 struct stat nativeStat;
149 const int failure = stat(NormalizePath(path).c_str(), &nativeStat); 139 const int failure = stat(NormalizePath(path).c_str(), &nativeStat);
150 if (failure) 140 if (failure)
151 { 141 {
152 if (errno == ENOENT) 142 if (errno == ENOENT)
153 return result; 143 return result;
154 throw RuntimeErrorWithErrno("Unable to stat " + path); 144 throw RuntimeErrorWithErrno("Unable to stat " + path);
155 } 145 }
156 result.exists = true; 146 result.exists = true;
157 result.isFile = S_ISREG(nativeStat.st_mode);
158 result.isDirectory = S_ISDIR(nativeStat.st_mode);
159 147
160 #define MSEC_IN_SEC 1000 148 #define MSEC_IN_SEC 1000
161 #define NSEC_IN_MSEC 1000000 149 #define NSEC_IN_MSEC 1000000
162 // Note: _POSIX_C_SOURCE macro is defined automatically on Linux due to g++ 150 // Note: _POSIX_C_SOURCE macro is defined automatically on Linux due to g++
163 // defining _GNU_SOURCE macro. On OS X we still fall back to the "no 151 // defining _GNU_SOURCE macro. On OS X we still fall back to the "no
164 // milliseconds" branch, it has st_mtimespec instead of st_mtim. 152 // milliseconds" branch, it has st_mtimespec instead of st_mtim.
165 #if _POSIX_C_SOURCE >= 200809L 153 #if _POSIX_C_SOURCE >= 200809L
166 result.lastModified = static_cast<int64_t>(nativeStat.st_mtim.tv_sec) * MSEC_I N_SEC 154 result.lastModified = static_cast<int64_t>(nativeStat.st_mtim.tv_sec) * MSEC_I N_SEC
167 + static_cast<int64_t>(nativeStat.st_mtim.tv_nsec) / NSEC _IN_MSEC; 155 + static_cast<int64_t>(nativeStat.st_mtim.tv_nsec) / NSEC _IN_MSEC;
168 #else 156 #else
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 { 191 {
204 basePath.resize(basePath.size() - 1); 192 basePath.resize(basePath.size() - 1);
205 } 193 }
206 } 194 }
207 195
208 DefaultFileSystem::DefaultFileSystem(const Scheduler& scheduler, std::unique_ptr <DefaultFileSystemSync> syncImpl) 196 DefaultFileSystem::DefaultFileSystem(const Scheduler& scheduler, std::unique_ptr <DefaultFileSystemSync> syncImpl)
209 : scheduler(scheduler), syncImpl(std::move(syncImpl)) 197 : scheduler(scheduler), syncImpl(std::move(syncImpl))
210 { 198 {
211 } 199 }
212 200
213 void DefaultFileSystem::Read(const std::string& path, 201 void DefaultFileSystem::Read(const std::string& fileName,
214 const ReadCallback& callback) const 202 const ReadCallback& callback) const
215 { 203 {
216 scheduler([this, path, callback] 204 scheduler([this, fileName, callback]
217 { 205 {
218 std::string error; 206 std::string error;
219 try 207 try
220 { 208 {
221 auto data = syncImpl->Read(path); 209 auto data = syncImpl->Read(Resolve(fileName));
222 callback(std::move(data), error); 210 callback(std::move(data), error);
223 return; 211 return;
224 } 212 }
225 catch (std::exception& e) 213 catch (std::exception& e)
226 { 214 {
227 error = e.what(); 215 error = e.what();
228 } 216 }
229 catch (...) 217 catch (...)
230 { 218 {
231 error = "Unknown error while reading from " + path; 219 error = "Unknown error while reading from " + fileName + " as " + Resolve (fileName);
232 } 220 }
233 callback(IOBuffer(), error); 221 callback(IOBuffer(), error);
234 }); 222 });
235 } 223 }
236 224
237 void DefaultFileSystem::Write(const std::string& path, 225 void DefaultFileSystem::Write(const std::string& fileName,
238 const IOBuffer& data, 226 const IOBuffer& data,
239 const Callback& callback) 227 const Callback& callback)
240 { 228 {
241 scheduler([this, path, data, callback] 229 scheduler([this, fileName, data, callback]
242 { 230 {
243 std::string error; 231 std::string error;
244 try 232 try
245 { 233 {
246 syncImpl->Write(path, data); 234 syncImpl->Write(Resolve(fileName), data);
247 } 235 }
248 catch (std::exception& e) 236 catch (std::exception& e)
249 { 237 {
250 error = e.what(); 238 error = e.what();
251 } 239 }
252 catch (...) 240 catch (...)
253 { 241 {
254 error = "Unknown error while writing to " + path; 242 error = "Unknown error while writing to " + fileName + " as " + Resolve(fi leName);
255 } 243 }
256 callback(error); 244 callback(error);
257 }); 245 });
258 } 246 }
259 247
260 void DefaultFileSystem::Move(const std::string& fromPath, 248 void DefaultFileSystem::Move(const std::string& fromFileName,
261 const std::string& toPath, 249 const std::string& toFileName,
262 const Callback& callback) 250 const Callback& callback)
263 { 251 {
264 scheduler([this, fromPath, toPath, callback] 252 scheduler([this, fromFileName, toFileName, callback]
265 { 253 {
266 std::string error; 254 std::string error;
267 try 255 try
268 { 256 {
269 syncImpl->Move(fromPath, toPath); 257 syncImpl->Move(Resolve(fromFileName), Resolve(toFileName));
270 } 258 }
271 catch (std::exception& e) 259 catch (std::exception& e)
272 { 260 {
273 error = e.what(); 261 error = e.what();
274 } 262 }
275 catch (...) 263 catch (...)
276 { 264 {
277 error = "Unknown error while moving " + fromPath + " to " + toPath; 265 error = "Unknown error while moving " + fromFileName + " to " + toFileName ;
278 } 266 }
279 callback(error); 267 callback(error);
280 }); 268 });
281 } 269 }
282 270
283 void DefaultFileSystem::Remove(const std::string& path, 271 void DefaultFileSystem::Remove(const std::string& fileName,
284 const Callback& callback) 272 const Callback& callback)
285 { 273 {
286 scheduler([this, path, callback] 274 scheduler([this, fileName, callback]
287 { 275 {
288 std::string error; 276 std::string error;
289 try 277 try
290 { 278 {
291 syncImpl->Remove(path); 279 syncImpl->Remove(Resolve(fileName));
292 } 280 }
293 catch (std::exception& e) 281 catch (std::exception& e)
294 { 282 {
295 error = e.what(); 283 error = e.what();
296 } 284 }
297 catch (...) 285 catch (...)
298 { 286 {
299 error = "Unknown error while removing " + path; 287 error = "Unknown error while removing " + fileName + " as " + Resolve(file Name);
300 } 288 }
301 callback(error); 289 callback(error);
302 }); 290 });
303 } 291 }
304 292
305 void DefaultFileSystem::Stat(const std::string& path, 293 void DefaultFileSystem::Stat(const std::string& fileName,
306 const StatCallback& callback) const 294 const StatCallback& callback) const
307 { 295 {
308 scheduler([this, path, callback] 296 scheduler([this, fileName, callback]
309 { 297 {
310 std::string error; 298 std::string error;
311 try 299 try
312 { 300 {
313 auto result = syncImpl->Stat(path); 301 auto result = syncImpl->Stat(Resolve(fileName));
314 callback(result, error); 302 callback(result, error);
315 return; 303 return;
316 } 304 }
317 catch (std::exception& e) 305 catch (std::exception& e)
318 { 306 {
319 error = e.what(); 307 error = e.what();
320 } 308 }
321 catch (...) 309 catch (...)
322 { 310 {
323 error = "Unknown error while calling stat on " + path; 311 error = "Unknown error while calling stat on " + fileName + " as " + Resol ve(fileName);
324 } 312 }
325 callback(StatResult(), error); 313 callback(StatResult(), error);
326 }); 314 });
327 } 315 }
328 316
329 std::string DefaultFileSystem::Resolve(const std::string& path) const 317 std::string DefaultFileSystem::Resolve(const std::string& fileName) const
330 { 318 {
331 return syncImpl->Resolve(path); 319 return syncImpl->Resolve(fileName);
332 } 320 }
OLDNEW
« libadblockplus.gyp ('K') | « src/DefaultFileSystem.h ('k') | src/FileSystemJsObject.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld