| OLD | NEW |
| 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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 | 68 |
| 69 std::shared_ptr<std::istream> | 69 std::shared_ptr<std::istream> |
| 70 DefaultFileSystem::Read(const std::string& path) const | 70 DefaultFileSystem::Read(const std::string& path) const |
| 71 { | 71 { |
| 72 std::shared_ptr<std::istream> result(new std::ifstream(NormalizePath(path).c_s
tr())); | 72 std::shared_ptr<std::istream> result(new std::ifstream(NormalizePath(path).c_s
tr())); |
| 73 if (result->fail()) | 73 if (result->fail()) |
| 74 throw RuntimeErrorWithErrno("Failed to open " + path); | 74 throw RuntimeErrorWithErrno("Failed to open " + path); |
| 75 return result; | 75 return result; |
| 76 } | 76 } |
| 77 | 77 |
| 78 void DefaultFileSystem::Read(const std::string& path, |
| 79 const ReadCallback& callback) const |
| 80 { |
| 81 try |
| 82 { |
| 83 auto result = Read(path); |
| 84 callback(result); |
| 85 } |
| 86 catch (...) |
| 87 { |
| 88 } |
| 89 } |
| 90 |
| 78 void DefaultFileSystem::Write(const std::string& path, | 91 void DefaultFileSystem::Write(const std::string& path, |
| 79 std::istream& data) | 92 std::istream& data) |
| 80 { | 93 { |
| 81 std::ofstream file(NormalizePath(path).c_str(), std::ios_base::out | std::ios_
base::binary); | 94 std::ofstream file(NormalizePath(path).c_str(), std::ios_base::out | std::ios_
base::binary); |
| 82 file << Utils::Slurp(data); | 95 file << Utils::Slurp(data); |
| 83 } | 96 } |
| 84 | 97 |
| 98 void DefaultFileSystem::Write(const std::string& path, |
| 99 std::istream& data, |
| 100 const Callback& callback) |
| 101 { |
| 102 Write(path, data); |
| 103 callback(); |
| 104 } |
| 105 |
| 85 void DefaultFileSystem::Move(const std::string& fromPath, | 106 void DefaultFileSystem::Move(const std::string& fromPath, |
| 86 const std::string& toPath) | 107 const std::string& toPath) |
| 87 { | 108 { |
| 88 if (rename(NormalizePath(fromPath).c_str(), NormalizePath(toPath).c_str())) | 109 if (rename(NormalizePath(fromPath).c_str(), NormalizePath(toPath).c_str())) |
| 89 throw RuntimeErrorWithErrno("Failed to move " + fromPath + " to " + toPath); | 110 throw RuntimeErrorWithErrno("Failed to move " + fromPath + " to " + toPath); |
| 90 } | 111 } |
| 91 | 112 |
| 113 void DefaultFileSystem::Move(const std::string& fromPath, |
| 114 const std::string& toPath, |
| 115 const Callback& callback) |
| 116 { |
| 117 try |
| 118 { |
| 119 Move(fromPath, toPath); |
| 120 callback(); |
| 121 } |
| 122 catch (...) |
| 123 { |
| 124 } |
| 125 } |
| 126 |
| 92 void DefaultFileSystem::Remove(const std::string& path) | 127 void DefaultFileSystem::Remove(const std::string& path) |
| 93 { | 128 { |
| 94 if (remove(NormalizePath(path).c_str())) | 129 if (remove(NormalizePath(path).c_str())) |
| 95 throw RuntimeErrorWithErrno("Failed to remove " + path); | 130 throw RuntimeErrorWithErrno("Failed to remove " + path); |
| 96 } | 131 } |
| 97 | 132 |
| 133 void DefaultFileSystem::Remove(const std::string& path, |
| 134 const Callback& callback) |
| 135 { |
| 136 try |
| 137 { |
| 138 Remove(path); |
| 139 callback(); |
| 140 } |
| 141 catch (...) |
| 142 { |
| 143 } |
| 144 } |
| 145 |
| 98 FileSystem::StatResult DefaultFileSystem::Stat(const std::string& path) const | 146 FileSystem::StatResult DefaultFileSystem::Stat(const std::string& path) const |
| 99 { | 147 { |
| 100 FileSystem::StatResult result; | 148 FileSystem::StatResult result; |
| 101 #ifdef WIN32 | 149 #ifdef WIN32 |
| 102 WIN32_FILE_ATTRIBUTE_DATA data; | 150 WIN32_FILE_ATTRIBUTE_DATA data; |
| 103 if (!GetFileAttributesExW(NormalizePath(path).c_str(), GetFileExInfoStandard,
&data)) | 151 if (!GetFileAttributesExW(NormalizePath(path).c_str(), GetFileExInfoStandard,
&data)) |
| 104 { | 152 { |
| 105 DWORD err = GetLastError(); | 153 DWORD err = GetLastError(); |
| 106 if (err == ERROR_FILE_NOT_FOUND || | 154 if (err == ERROR_FILE_NOT_FOUND || |
| 107 err == ERROR_PATH_NOT_FOUND || | 155 err == ERROR_PATH_NOT_FOUND || |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 #if _POSIX_C_SOURCE >= 200809L | 202 #if _POSIX_C_SOURCE >= 200809L |
| 155 result.lastModified = static_cast<int64_t>(nativeStat.st_mtim.tv_sec) * MSEC_I
N_SEC | 203 result.lastModified = static_cast<int64_t>(nativeStat.st_mtim.tv_sec) * MSEC_I
N_SEC |
| 156 + static_cast<int64_t>(nativeStat.st_mtim.tv_nsec) / NSEC
_IN_MSEC; | 204 + static_cast<int64_t>(nativeStat.st_mtim.tv_nsec) / NSEC
_IN_MSEC; |
| 157 #else | 205 #else |
| 158 result.lastModified = static_cast<int64_t>(nativeStat.st_mtime) * MSEC_IN_SEC; | 206 result.lastModified = static_cast<int64_t>(nativeStat.st_mtime) * MSEC_IN_SEC; |
| 159 #endif | 207 #endif |
| 160 return result; | 208 return result; |
| 161 #endif | 209 #endif |
| 162 } | 210 } |
| 163 | 211 |
| 212 void DefaultFileSystem::Stat(const std::string& path, |
| 213 const StatCallback& callback) const |
| 214 { |
| 215 try |
| 216 { |
| 217 auto stats = Stat(path); |
| 218 callback(stats); |
| 219 } |
| 220 catch (...) |
| 221 { |
| 222 } |
| 223 } |
| 224 |
| 164 std::string DefaultFileSystem::Resolve(const std::string& path) const | 225 std::string DefaultFileSystem::Resolve(const std::string& path) const |
| 165 { | 226 { |
| 166 if (basePath == "") | 227 if (basePath == "") |
| 167 { | 228 { |
| 168 return path; | 229 return path; |
| 169 } | 230 } |
| 170 else | 231 else |
| 171 { | 232 { |
| 172 #ifdef _WIN32 | 233 #ifdef _WIN32 |
| 173 if (PathIsRelative(NormalizePath(path).c_str())) | 234 if (PathIsRelative(NormalizePath(path).c_str())) |
| 174 #else | 235 #else |
| 175 if (path.length() && *path.begin() != PATH_SEPARATOR) | 236 if (path.length() && *path.begin() != PATH_SEPARATOR) |
| 176 #endif | 237 #endif |
| 177 { | 238 { |
| 178 return basePath + PATH_SEPARATOR + path; | 239 return basePath + PATH_SEPARATOR + path; |
| 179 } | 240 } |
| 180 else | 241 else |
| 181 { | 242 { |
| 182 return path; | 243 return path; |
| 183 } | 244 } |
| 184 } | 245 } |
| 185 } | 246 } |
| 247 void DefaultFileSystem::Resolve(const std::string& path, |
| 248 const ResolveCallback& callback) const |
| 249 { |
| 250 callback(Resolve(path)); |
| 251 } |
| 186 | 252 |
| 187 void DefaultFileSystem::SetBasePath(const std::string& path) | 253 void DefaultFileSystem::SetBasePath(const std::string& path) |
| 188 { | 254 { |
| 189 basePath = path; | 255 basePath = path; |
| 190 | 256 |
| 191 if (*basePath.rbegin() == PATH_SEPARATOR) | 257 if (*basePath.rbegin() == PATH_SEPARATOR) |
| 192 { | 258 { |
| 193 basePath.resize(basePath.size() - 1); | 259 basePath.resize(basePath.size() - 1); |
| 194 } | 260 } |
| 195 } | 261 } |
| 196 | 262 |
| OLD | NEW |