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

Side by Side Diff: src/shared/Utils.cpp

Issue 10800092: Use libadblockplus update checker (Closed)
Patch Set: Addressed review comments Created June 7, 2013, 5:27 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« src/plugin/PluginClass.cpp ('K') | « src/shared/Utils.h ('k') | 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 #include <memory> 1 #include <memory>
2 #include <stdexcept> 2 #include <stdexcept>
3 3
4 #include <Windows.h> 4 #include <Windows.h>
5 #include <ShlObj.h> 5 #include <ShlObj.h>
6 6
7 #include "Utils.h" 7 #include "Utils.h"
8 8
9 namespace 9 namespace
10 { 10 {
11 std::wstring appDataPath; 11 std::wstring appDataPath;
12 12
13 bool IsWindowsVistaOrLater() 13 bool IsWindowsVistaOrLater()
14 { 14 {
15 OSVERSIONINFOEX osvi; 15 OSVERSIONINFOEX osvi;
16 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); 16 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
17 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 17 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
18 GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvi)); 18 GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvi));
19 return osvi.dwMajorVersion >= 6; 19 return osvi.dwMajorVersion >= 6;
20 } 20 }
21 } 21 }
22 22
23 std::string ToUtf8String(std::wstring str)
24 {
25 size_t length = str.size();
26 if (length == 0)
27 return std::string();
28
29 DWORD utf8StringLength = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), length, 0, 0, 0, 0);
30 if (utf8StringLength == 0)
31 throw std::runtime_error("Failed to determine the required buffer size");
32
33 std::string utf8String(utf8StringLength, '\0');
34 WideCharToMultiByte(CP_UTF8, 0, str.c_str(), length, &utf8String[0], utf8Strin gLength, 0, 0);
35 return utf8String;
36 }
37
23 std::wstring GetAppDataPath() 38 std::wstring GetAppDataPath()
24 { 39 {
25 if (appDataPath.empty()) 40 if (appDataPath.empty())
26 { 41 {
27 if (IsWindowsVistaOrLater()) 42 if (IsWindowsVistaOrLater())
28 { 43 {
29 WCHAR* pathBuffer; 44 WCHAR* pathBuffer;
30 if (FAILED(SHGetKnownFolderPath(FOLDERID_LocalAppDataLow, 0, 0, &pathBuffe r))) 45 if (FAILED(SHGetKnownFolderPath(FOLDERID_LocalAppDataLow, 0, 0, &pathBuffe r)))
31 throw std::runtime_error("Unable to find app data directory"); 46 throw std::runtime_error("Unable to find app data directory");
32 appDataPath.assign(pathBuffer); 47 appDataPath.assign(pathBuffer);
33 CoTaskMemFree(pathBuffer); 48 CoTaskMemFree(pathBuffer);
34 } 49 }
35 else 50 else
36 { 51 {
37 std::auto_ptr<wchar_t> pathBuffer(new wchar_t[MAX_PATH]); 52 std::auto_ptr<wchar_t> pathBuffer(new wchar_t[MAX_PATH]);
38 if (!SHGetSpecialFolderPath(0, pathBuffer.get(), CSIDL_LOCAL_APPDATA, true )) 53 if (!SHGetSpecialFolderPath(0, pathBuffer.get(), CSIDL_LOCAL_APPDATA, true ))
39 throw std::runtime_error("Unable to find app data directory"); 54 throw std::runtime_error("Unable to find app data directory");
40 appDataPath.assign(pathBuffer.get()); 55 appDataPath.assign(pathBuffer.get());
41 } 56 }
42 appDataPath += L"\\Adblock Plus for IE"; 57 appDataPath += L"\\Adblock Plus for IE";
43 58
44 // Ignore errors here, this isn't a critical operation 59 // Ignore errors here, this isn't a critical operation
45 ::CreateDirectoryW(appDataPath.c_str(), NULL); 60 ::CreateDirectoryW(appDataPath.c_str(), NULL);
46 } 61 }
47 return appDataPath; 62 return appDataPath;
48 } 63 }
OLDNEW
« src/plugin/PluginClass.cpp ('K') | « src/shared/Utils.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld