Index: src/plugin/PluginIniFileW.cpp |
=================================================================== |
deleted file mode 100644 |
--- a/src/plugin/PluginIniFileW.cpp |
+++ /dev/null |
@@ -1,395 +0,0 @@ |
-#include "PluginStdAfx.h" |
- |
-#include "PluginIniFileW.h" |
-#include "PluginChecksum.h" |
- |
-#if (defined PRODUCT_ADBLOCKPLUS) |
-#include "PluginClient.h" |
-#endif |
- |
- |
-CPluginIniFileW::CPluginIniFileW(const CString& filename, bool hasChecksum) : |
- m_isValidChecksum(false), m_isDirty(false), m_filename(filename), m_hasChecksum(hasChecksum), m_lastError(0) |
-{ |
- m_checksum = std::auto_ptr<CPluginChecksum>(new CPluginChecksum()); |
-} |
- |
-void CPluginIniFileW::SetInitialChecksumString(const CString& str) |
-{ |
- m_checksumInit = str; |
-} |
- |
-CString CPluginIniFileW::GetFilePath() const |
-{ |
- return m_filename; |
-} |
- |
- |
-void CPluginIniFileW::Clear() |
-{ |
- m_data.clear(); |
- m_sectionNames.clear(); |
- m_checksumInit.Empty(); |
- m_checksum->Clear(); |
-} |
- |
-bool CPluginIniFileW::Exists() |
-{ |
- bool isExisting = false; |
- |
- HANDLE hFile = ::CreateFile(m_filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
- if (hFile != INVALID_HANDLE_VALUE) |
- { |
- isExisting = true; |
- ::CloseHandle(hFile); |
- } |
- |
- return isExisting; |
-} |
- |
-bool CPluginIniFileW::ReadString(const CStringW& memFile) |
-{ |
- bool isOk = true; |
- |
- DWORD checksumValue = 0; |
- |
- m_checksum->Clear(); |
- m_checksum->Add(m_checksumInit); |
- |
- CPluginIniFileW::TSectionData sectionData; |
- CStringW sectionName; |
- |
- bool bHasSection = false; |
- |
- // Parse file string |
- int pos = 0; |
- CStringW line = memFile.Tokenize(L"\r\n", pos); |
- |
- // Remove initial unicode-chars |
- if (line.GetAt(0) == 0xfeff) |
- { |
- line = line.Right(line.GetLength() - 1); |
- } |
- else |
- { |
- } |
- |
- while (pos >= 0) |
- { |
- line.Trim(); |
- |
- if (!line.IsEmpty()) |
- { |
- // Comment |
- if (line.GetAt(0) == L'#') |
- { |
- } |
- // Section start |
- else if (line.GetAt(0) == L'[' && line.GetAt(line.GetLength() - 1) == L']') |
- { |
- if (bHasSection) |
- { |
- m_data[sectionName] = sectionData; |
- sectionData.clear(); |
- } |
- |
- // Add section name to list |
- sectionName = line.Mid(1, line.GetLength() - 2); |
- |
- DEBUG_INI("Ini::Read section:" + sectionName) |
- |
- // Add to checksum |
- if (m_hasChecksum && sectionName != "Checksum") |
- { |
- m_checksum->Add(sectionName); |
- } |
- |
- m_sectionNames.insert(sectionName); |
- |
- bHasSection = true; |
- } |
- // Section data |
- else if (bHasSection) |
- { |
- int pos = 0; |
- if ((pos = line.Find(L'=')) > 0) |
- { |
- CStringW key = line.Left(pos).Trim(); |
- CStringW value = line.Right(line.GetLength() - pos - 1).Trim(); |
- |
- if (!key.IsEmpty()) |
- { |
- sectionData[key] = value; |
- } |
- |
- if (m_hasChecksum && sectionName != "Checksum") |
- { |
- m_checksum->Add(key); |
- m_checksum->Add(value); |
- } |
- } |
- else if (m_hasChecksum && sectionName == "Checksum") |
- { |
- checksumValue = (DWORD)_wtol(line); |
- } |
- } |
- else |
- { |
- DEBUG_INI("Ini::Read ignoring line::" + CString(line)) |
- } |
- } |
- |
- line = memFile.Tokenize(L"\r\n", pos); |
- } |
- |
- // Add final section |
- if (bHasSection) |
- { |
- m_data[sectionName] = sectionData; |
- } |
- |
- m_isValidChecksum = (checksumValue == m_checksum->Get()); |
- |
- return isOk; |
-} |
- |
- |
-bool CPluginIniFileW::Read() |
-{ |
- bool isRead = true; |
- |
- m_lastError = 0; |
- |
- // Read file |
- HANDLE hFile = ::CreateFile(m_filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
- if (hFile == INVALID_HANDLE_VALUE) |
- { |
- m_lastError = ::GetLastError(); |
- isRead = false; |
- } |
- else |
- { |
- DEBUG_INI("Ini::Reading file " + m_filename); |
- |
- // Read file |
- WCHAR buffer[1026]; |
- LPVOID pBuffer = buffer; |
- LPBYTE pByteBuffer = (LPBYTE)pBuffer; |
- DWORD dwBytesRead = 0; |
- CStringW fileContent; |
- BOOL bRead = TRUE; |
- while ((bRead = ::ReadFile(hFile, pBuffer, 1024, &dwBytesRead, NULL)) == TRUE && dwBytesRead > 0) |
- { |
- pByteBuffer[dwBytesRead] = 0; |
- pByteBuffer[dwBytesRead+1] = 0; |
- |
- fileContent += buffer; |
- } |
- |
- // Read error |
- if (!bRead) |
- { |
- m_lastError = ::GetLastError(); |
- isRead = false; |
- } |
- |
- // Close file |
- ::CloseHandle(hFile); |
- |
- // Parse file |
- if (isRead) |
- { |
- isRead = ReadString(fileContent); |
- } |
- } |
- |
- return isRead; |
-} |
- |
- |
-bool CPluginIniFileW::Write() |
-{ |
- bool isWritten = true; |
- |
- m_lastError = 0; |
- |
- DEBUG_INI("Ini::Write " + m_filename); |
- |
- // Save file |
- if (m_isDirty) |
- { |
- DEBUG_INI("Ini::Writing file " + m_filename); |
- |
- m_checksum->Clear(); |
- |
- // Create file |
- HANDLE hFile = ::CreateFile(m_filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); |
- if (hFile == INVALID_HANDLE_VALUE) |
- { |
- m_lastError = ::GetLastError(); |
- isWritten = false; |
- } |
- else |
- { |
- CStringW line; |
- |
- // Write warning |
- if (m_hasChecksum) |
- { |
- line += "# Please do not edit this file!\r\n\r\n";; |
- } |
- |
- for (CPluginIniFileW::TData::iterator it = m_data.begin(); it != m_data.end(); ++it) |
- { |
- line += L"[" + it->first + L"]\r\n"; |
- |
- m_checksum->Add(it->first); |
- |
- for (CPluginIniFileW::TSectionData::iterator itValues = it->second.begin(); itValues != it->second.end(); ++itValues) |
- { |
- line += itValues->first + L"=" + itValues->second + L"\r\n"; |
- |
- m_checksum->Add(itValues->first); |
- m_checksum->Add(itValues->second); |
- } |
- |
- line += L"\r\n"; |
- } |
- |
- // Add checksum |
- if (m_hasChecksum) |
- { |
- line += L"[Checksum]\r\n"; |
- |
- CStringW checksum; |
- checksum.Format(L"%lu\r\n", m_checksum->Get()); |
- |
- line += checksum; |
- } |
- |
- // Write file |
- DWORD dwBytesWritten = 0; |
- if (::WriteFile(hFile, line.GetBuffer(), line.GetLength()*2, &dwBytesWritten, NULL) && dwBytesWritten == line.GetLength()*2) |
- { |
- m_isDirty = false; |
- |
- Clear(); |
- } |
- else |
- { |
- m_lastError = ::GetLastError(); |
- isWritten = false; |
- } |
- |
- // Close file |
- ::CloseHandle(hFile); |
- } |
- } |
- |
- return isWritten; |
-} |
- |
- |
-// Used to retrieve a value give the section and key |
-CStringW CPluginIniFileW::GetValue(const CStringW& section, const CStringW& key) const |
-{ |
- CStringW value; |
- |
- TSectionData sectionData = GetSectionData(section); |
- |
- TSectionData::iterator it = sectionData.find(key); |
- if (it != sectionData.end()) |
- { |
- value = it->second; |
- } |
- |
- return value; |
-} |
- |
- |
-// Used to add or set a key value pair to a section |
-bool CPluginIniFileW::SetValue(const CStringW& section, const CStringW& key, const CStringW& value) |
-{ |
- bool isSet = false; |
- |
- CPluginIniFileW::TData::iterator it = m_data.find(section); |
- if (it != m_data.end()) |
- { |
- CPluginIniFileW::TSectionData::iterator itValue = it->second.find(key); |
- if (itValue != it->second.end()) |
- { |
- if (itValue->second != value) |
- { |
- m_isDirty = true; |
- } |
- } |
- |
- it->second[key] = value; |
- isSet = true; |
- } |
- |
- return isSet; |
-} |
- |
- |
-// Used to add or set a key value pair to a section |
-bool CPluginIniFileW::SetValue(const CStringW& section, const CStringW& key, int value) |
-{ |
- CStringW valueStr; |
- valueStr.Format(L"%d", value); |
- |
- return SetValue(section, key, valueStr); |
-} |
- |
- |
-// Used to find out if a given section exists |
-bool CPluginIniFileW::HasSection(const CStringW& section) const |
-{ |
- return m_sectionNames.find(section) != m_sectionNames.end(); |
-} |
- |
- |
-// Used to find out if a given key exists |
-bool CPluginIniFileW::HasKey(const CStringW& section, const CStringW& key) const |
-{ |
- return !GetValue(section, key).IsEmpty(); |
-} |
- |
- |
-void CPluginIniFileW::UpdateSection(const CStringW& section, const CPluginIniFileW::TSectionData& data) |
-{ |
- m_data[section] = data; |
- m_isDirty = true; |
-} |
- |
- |
-// Used to retrieve all of the section names in the ini file |
-const CPluginIniFileW::TSectionNames& CPluginIniFileW::GetSectionNames() const |
-{ |
- return m_sectionNames; |
-} |
- |
- |
-// Used to retrieve all key/value pairs of a given section. |
-CPluginIniFileW::TSectionData CPluginIniFileW::GetSectionData(const CStringW& section) const |
-{ |
- CPluginIniFileW::TSectionData sectionData; |
- |
- CPluginIniFileW::TData::const_iterator it = m_data.find(section); |
- if (it != m_data.end()) |
- { |
- sectionData = it->second; |
- } |
- |
- return sectionData; |
-} |
- |
-bool CPluginIniFileW::IsValidChecksum() const |
-{ |
- return m_isValidChecksum && m_hasChecksum || !m_hasChecksum; |
-} |
- |
-unsigned int CPluginIniFileW::GetLastError() const |
-{ |
- return m_lastError; |
-} |