| 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 | 
|---|