| 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-2015 Eyeo GmbH | 3 * Copyright (C) 2006-2015 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 } | 84 } |
| 85 | 85 |
| 86 std::vector<std::wstring> ToUtf16Strings(const std::vector<std::string>& values) | 86 std::vector<std::wstring> ToUtf16Strings(const std::vector<std::string>& values) |
| 87 { | 87 { |
| 88 std::vector<std::wstring> result; | 88 std::vector<std::wstring> result; |
| 89 result.reserve(values.size()); | 89 result.reserve(values.size()); |
| 90 transform(values.begin(), values.end(), back_inserter(result), ToUtf16String); | 90 transform(values.begin(), values.end(), back_inserter(result), ToUtf16String); |
| 91 return result; | 91 return result; |
| 92 } | 92 } |
| 93 | 93 |
| 94 namespace |
| 95 { |
| 96 std::wstring GetModulePath(HINSTANCE hInstance) |
| 97 { |
| 98 std::vector<WCHAR> path(MAX_PATH); |
| 99 int length = GetModuleFileNameW(hInstance, &path[0], static_cast<DWORD>(path
.size())); |
| 100 |
| 101 while (length == path.size()) |
| 102 { |
| 103 // Buffer too small, double buffer size |
| 104 path.resize(path.size() * 2); |
| 105 length = GetModuleFileNameW(hInstance, &path[0], static_cast<DWORD>(path.s
ize())); |
| 106 } |
| 107 |
| 108 try |
| 109 { |
| 110 if (length == 0) |
| 111 throw std::runtime_error("Failed determining module path"); |
| 112 |
| 113 std::vector<WCHAR>::reverse_iterator it = std::find(path.rbegin(), path.re
nd(), L'\\'); |
| 114 if (it == path.rend()) |
| 115 throw std::runtime_error("Unexpected plugin path, no backslash found"); |
| 116 |
| 117 return std::wstring(path.begin(), it.base()); |
| 118 } |
| 119 catch (const std::exception&) |
| 120 { |
| 121 return std::wstring(); |
| 122 } |
| 123 } |
| 124 } |
| 125 |
| 94 std::wstring GetDllDir() | 126 std::wstring GetDllDir() |
| 95 { | 127 { |
| 96 std::vector<WCHAR> path(MAX_PATH); | 128 return GetModulePath((HINSTANCE)&__ImageBase); |
| 97 int length = GetModuleFileNameW((HINSTANCE)&__ImageBase, &path[0], static_cast
<DWORD>(path.size())); | 129 } |
| 98 | 130 |
| 99 while (length == path.size()) | 131 std::wstring GetExeDir() |
| 100 { | 132 { |
| 101 // Buffer too small, double buffer size | 133 return GetModulePath(nullptr); |
| 102 path.resize(path.size() * 2); | |
| 103 length = GetModuleFileNameW((HINSTANCE)&__ImageBase, &path[0], static_cast<D
WORD>(path.size())); | |
| 104 } | |
| 105 | |
| 106 try | |
| 107 { | |
| 108 if (length == 0) | |
| 109 throw std::runtime_error("Failed determining module path"); | |
| 110 | |
| 111 std::vector<WCHAR>::reverse_iterator it = std::find(path.rbegin(), path.rend
(), L'\\'); | |
| 112 if (it == path.rend()) | |
| 113 throw std::runtime_error("Unexpected plugin path, no backslash found"); | |
| 114 | |
| 115 return std::wstring(path.begin(), it.base()); | |
| 116 } | |
| 117 catch (const std::exception&) | |
| 118 { | |
| 119 return std::wstring(); | |
| 120 } | |
| 121 } | 134 } |
| 122 | 135 |
| 123 std::wstring GetAppDataPath() | 136 std::wstring GetAppDataPath() |
| 124 { | 137 { |
| 125 if (appDataPath.empty()) | 138 if (appDataPath.empty()) |
| 126 { | 139 { |
| 127 if (IsWindowsVistaOrLater()) | 140 if (IsWindowsVistaOrLater()) |
| 128 { | 141 { |
| 129 WCHAR* pathBuffer; | 142 WCHAR* pathBuffer; |
| 130 if (FAILED(SHGetKnownFolderPath(FOLDERID_LocalAppDataLow, 0, 0, &pathBuffe
r))) | 143 if (FAILED(SHGetKnownFolderPath(FOLDERID_LocalAppDataLow, 0, 0, &pathBuffe
r))) |
| 131 throw std::runtime_error("Unable to find app data directory"); | 144 throw std::runtime_error("Unable to find app data directory"); |
| 132 appDataPath.assign(pathBuffer); | 145 appDataPath.assign(pathBuffer); |
| 133 CoTaskMemFree(pathBuffer); | 146 CoTaskMemFree(pathBuffer); |
| 134 } | 147 } |
| 135 else | 148 else |
| 136 { | 149 { |
| 137 std::auto_ptr<wchar_t> pathBuffer(new wchar_t[MAX_PATH]); | 150 std::auto_ptr<wchar_t> pathBuffer(new wchar_t[MAX_PATH]); |
| 138 if (!SHGetSpecialFolderPathW(0, pathBuffer.get(), CSIDL_LOCAL_APPDATA, tru
e)) | 151 if (!SHGetSpecialFolderPathW(0, pathBuffer.get(), CSIDL_LOCAL_APPDATA, tru
e)) |
| 139 throw std::runtime_error("Unable to find app data directory"); | 152 throw std::runtime_error("Unable to find app data directory"); |
| 140 appDataPath.assign(pathBuffer.get()); | 153 appDataPath.assign(pathBuffer.get()); |
| 141 } | 154 } |
| 142 appDataPath += L"\\Adblock Plus for IE"; | 155 appDataPath += L"\\Adblock Plus for IE"; |
| 143 | 156 |
| 144 // Ignore errors here, this isn't a critical operation | 157 // Ignore errors here, this isn't a critical operation |
| 145 ::CreateDirectoryW(appDataPath.c_str(), NULL); | 158 ::CreateDirectoryW(appDataPath.c_str(), NULL); |
| 146 } | 159 } |
| 147 return appDataPath; | 160 return appDataPath; |
| 148 } | 161 } |
| 149 | 162 |
| 150 void ReplaceString(std::wstring& input, const std::wstring placeholder, const st
d::wstring replacement) | 163 void ReplaceString(std::wstring& input, const std::wstring& placeholder, const s
td::wstring& replacement) |
| 151 { | 164 { |
| 152 size_t replaceStart = input.find(placeholder); | 165 size_t replaceStart = input.find(placeholder); |
| 153 if (replaceStart != std::string::npos) | 166 if (replaceStart != std::string::npos) |
| 154 { | 167 { |
| 155 input.replace(replaceStart, placeholder.length(), replacement); | 168 input.replace(replaceStart, placeholder.length(), replacement); |
| 156 } | 169 } |
| 157 } | 170 } |
| 158 | 171 |
| 159 std::wstring GetSchemeAndHierarchicalPart(const std::wstring& url) | 172 std::wstring GetSchemeAndHierarchicalPart(const std::wstring& url) |
| 160 { | 173 { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 174 return L""; | 187 return L""; |
| 175 } | 188 } |
| 176 auto queryStringBeginsAt = questionSignPos + 1; | 189 auto queryStringBeginsAt = questionSignPos + 1; |
| 177 auto endQueryStringPos = url.find(L'#', queryStringBeginsAt); | 190 auto endQueryStringPos = url.find(L'#', queryStringBeginsAt); |
| 178 if (endQueryStringPos == std::wstring::npos) | 191 if (endQueryStringPos == std::wstring::npos) |
| 179 { | 192 { |
| 180 endQueryStringPos = url.length(); | 193 endQueryStringPos = url.length(); |
| 181 } | 194 } |
| 182 return url.substr(queryStringBeginsAt, endQueryStringPos - queryStringBeginsAt
); | 195 return url.substr(queryStringBeginsAt, endQueryStringPos - queryStringBeginsAt
); |
| 183 } | 196 } |
| OLD | NEW |