Index: src/plugin/PluginIniFile.cpp |
=================================================================== |
deleted file mode 100644 |
--- a/src/plugin/PluginIniFile.cpp |
+++ /dev/null |
@@ -1,397 +0,0 @@ |
-#include "PluginStdAfx.h" |
- |
-#include "PluginIniFile.h" |
-#include "PluginChecksum.h" |
- |
-#if (defined PRODUCT_ADBLOCKPLUS) |
-#include "PluginClient.h" |
-#endif |
- |
- |
-CPluginIniFile::CPluginIniFile(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 CPluginIniFile::SetInitialChecksumString(const CString& str) |
-{ |
- m_checksumInit = str; |
-} |
- |
-CString CPluginIniFile::GetFilePath() const |
-{ |
- return m_filename; |
-} |
- |
- |
-void CPluginIniFile::Clear() |
-{ |
- m_data.clear(); |
- m_sectionNames.clear(); |
- m_checksumInit.Empty(); |
- m_checksum->Clear(); |
-} |
- |
- |
-bool CPluginIniFile::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 CPluginIniFile::ReadString(const CStringA& memFile) |
-{ |
- bool isOk = true; |
- |
- DWORD checksumValue = 0; |
- |
- m_checksum->Clear(); |
- m_checksum->Add(m_checksumInit); |
- |
- // Read file |
- std::string buffer(memFile); |
- |
- std::istringstream is; |
- is.str(buffer); |
- |
- CPluginIniFile::TSectionData sectionData; |
- CStringA sectionName; |
- |
- bool bHasSection = false; |
- |
- while (isOk && !is.eof()) |
- { |
- char szLine[256]; |
- is.getline(szLine, 255); |
- |
- if (is.fail() && !is.eof()) |
- { |
- is.clear(); |
- isOk = false; |
- break; |
- } |
- |
- CStringA line(szLine); |
- line.Trim(); |
- |
- if (!line.IsEmpty()) |
- { |
- // Comment |
- if (line.GetAt(0) == '#') |
- { |
- } |
- // Section start |
- else if (line.GetAt(0) == '[' && line.GetAt(line.GetLength() - 1) == ']') |
- { |
- if (bHasSection) |
- { |
- m_data[sectionName] = sectionData; |
- sectionData.clear(); |
- } |
- |
- // Add section name to list |
- sectionName = line.Mid(1, line.GetLength() - 2); |
- |
- // 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('=')) > 0) |
- { |
- CStringA key = line.Left(pos).Trim(); |
- CStringA 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)atol(line); |
- } |
- } |
- } |
- } |
- |
- // Add final section |
- if (bHasSection) |
- { |
- m_data[sectionName] = sectionData; |
- } |
- |
- m_isValidChecksum = checksumValue == m_checksum->Get(); |
- |
- return isOk; |
-} |
- |
- |
-bool CPluginIniFile::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); |
- |
- DWORD checksumValue = 0; |
- m_checksum->Clear(); |
- |
- CPluginIniFile::TSectionData sectionData; |
- CStringA sectionName; |
- |
- bool bHasSection = false; |
- |
- // Read file |
- char buffer[8194]; |
- LPVOID pBuffer = buffer; |
- LPBYTE pByteBuffer = (LPBYTE)pBuffer; |
- DWORD dwBytesRead = 0; |
- CStringA fileContent; |
- BOOL bRead = TRUE; |
- while ((bRead = ::ReadFile(hFile, pBuffer, 8192, &dwBytesRead, NULL)) == TRUE && dwBytesRead > 0) |
- { |
- pByteBuffer[dwBytesRead] = 0; |
- |
- fileContent += buffer; |
- } |
- |
- // Read error |
- if (!bRead) |
- { |
- m_lastError = ::GetLastError(); |
- isRead = false; |
- } |
- |
- // Close file |
- ::CloseHandle(hFile); |
- |
- // Parse the file |
- isRead = ReadString(fileContent); |
- } |
- |
- return isRead; |
-} |
- |
- |
-bool CPluginIniFile::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 |
- { |
- CStringA line; |
- |
- // Write warning |
- if (m_hasChecksum) |
- { |
- line += "# Please do not edit this file!\r\n\r\n";; |
- } |
- |
- for (CPluginIniFile::TData::iterator it = m_data.begin(); it != m_data.end(); ++it) |
- { |
- line += "[" + it->first + "]\r\n"; |
- |
- m_checksum->Add(it->first); |
- |
- for (CPluginIniFile::TSectionData::iterator itValues = it->second.begin(); itValues != it->second.end(); ++itValues) |
- { |
- line += itValues->first + "=" + itValues->second + "\r\n"; |
- |
- m_checksum->Add(itValues->first); |
- m_checksum->Add(itValues->second); |
- } |
- |
- line += "\r\n"; |
- } |
- |
- // Add checksum |
- if (m_hasChecksum) |
- { |
- line += "[Checksum]\r\n"; |
- |
- CStringA checksum; |
- checksum.Format("%lu\r\n", m_checksum->Get()); |
- |
- line += checksum; |
- } |
- |
- // Write file |
- DWORD dwBytesWritten = 0; |
- if (::WriteFile(hFile, line.GetBuffer(), line.GetLength(), &dwBytesWritten, NULL) && dwBytesWritten == line.GetLength()) |
- { |
- 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 |
-CStringA CPluginIniFile::GetValue(const CStringA& section, const CStringA& key) const |
-{ |
- CStringA 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 CPluginIniFile::SetValue(const CStringA& section, const CStringA& key, const CStringA& value) |
-{ |
- bool isSet = false; |
- |
- CPluginIniFile::TData::iterator it = m_data.find(section); |
- if (it != m_data.end()) |
- { |
- CPluginIniFile::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 CPluginIniFile::SetValue(const CStringA& section, const CStringA& key, int value) |
-{ |
- CStringA valueStr; |
- valueStr.Format("%d", value); |
- |
- return SetValue(section, key, valueStr); |
-} |
- |
- |
-// Used to find out if a given section exists |
-bool CPluginIniFile::HasSection(const CStringA& section) const |
-{ |
- return m_sectionNames.find(section) != m_sectionNames.end(); |
-} |
- |
- |
-// Used to find out if a given key exists |
-bool CPluginIniFile::HasKey(const CStringA& section, const CStringA& key) const |
-{ |
- return !GetValue(section, key).IsEmpty(); |
-} |
- |
- |
-void CPluginIniFile::UpdateSection(const CStringA& section, const CPluginIniFile::TSectionData& data) |
-{ |
- m_data[section] = data; |
- m_isDirty = true; |
-} |
- |
- |
-// Used to retrieve all of the section names in the ini file |
-const CPluginIniFile::TSectionNames& CPluginIniFile::GetSectionNames() const |
-{ |
- return m_sectionNames; |
-} |
- |
- |
-// Used to retrieve all key/value pairs of a given section. |
-CPluginIniFile::TSectionData CPluginIniFile::GetSectionData(const CStringA& section) const |
-{ |
- CPluginIniFile::TSectionData sectionData; |
- |
- CPluginIniFile::TData::const_iterator it = m_data.find(section); |
- if (it != m_data.end()) |
- { |
- sectionData = it->second; |
- } |
- |
- return sectionData; |
-} |
- |
-bool CPluginIniFile::IsValidChecksum() const |
-{ |
- return m_isValidChecksum && m_hasChecksum || !m_hasChecksum; |
-} |
- |
-unsigned int CPluginIniFile::GetLastError() const |
-{ |
- return m_lastError; |
-} |