Merge pull request #5015 from lioncash/sysconf

SysConf: const correctness changes
This commit is contained in:
Matthew Parlane 2017-03-05 13:41:43 +13:00 committed by GitHub
commit c21193c6f5
3 changed files with 23 additions and 21 deletions

View File

@ -53,11 +53,13 @@ struct SSysConfEntry
std::vector<u8> data; std::vector<u8> data;
template <class T> template <class T>
T GetData() T GetData() const
{ {
return *(T*)data.data(); T extracted_data;
std::memcpy(&extracted_data, data.data(), sizeof(T));
return extracted_data;
} }
bool GetArrayData(u8* dest, u16 destSize) bool GetArrayData(u8* dest, u16 destSize) const
{ {
if (dest && destSize >= dataLength) if (dest && destSize >= dataLength)
{ {
@ -66,7 +68,7 @@ struct SSysConfEntry
} }
return false; return false;
} }
bool SetArrayData(u8* buffer, u16 bufferSize) bool SetArrayData(const u8* buffer, u16 bufferSize)
{ {
if (buffer) if (buffer)
{ {
@ -83,9 +85,9 @@ public:
SysConf(Common::FromWhichRoot root_type); SysConf(Common::FromWhichRoot root_type);
~SysConf(); ~SysConf();
bool IsValid() { return m_IsValid; } bool IsValid() const { return m_IsValid; }
template <class T> template <class T>
T GetData(const char* sectionName) T GetData(const char* sectionName) const
{ {
if (!m_IsValid) if (!m_IsValid)
{ {
@ -93,13 +95,13 @@ public:
return 0; return 0;
} }
std::vector<SSysConfEntry>::iterator index = m_Entries.begin(); auto index = m_Entries.cbegin();
for (; index < m_Entries.end() - 1; ++index) for (; index < m_Entries.cend() - 1; ++index)
{ {
if (strcmp(index->name, sectionName) == 0) if (strcmp(index->name, sectionName) == 0)
break; break;
} }
if (index == m_Entries.end() - 1) if (index == m_Entries.cend() - 1)
{ {
PanicAlertT("Section %s not found in SYSCONF", sectionName); PanicAlertT("Section %s not found in SYSCONF", sectionName);
return 0; return 0;
@ -108,35 +110,35 @@ public:
return index->GetData<T>(); return index->GetData<T>();
} }
bool GetArrayData(const char* sectionName, u8* dest, u16 destSize) bool GetArrayData(const char* sectionName, u8* dest, u16 destSize) const
{ {
if (!m_IsValid) if (!m_IsValid)
{ {
PanicAlertT("Trying to read from invalid SYSCONF"); PanicAlertT("Trying to read from invalid SYSCONF");
return 0; return false;
} }
std::vector<SSysConfEntry>::iterator index = m_Entries.begin(); auto index = m_Entries.cbegin();
for (; index < m_Entries.end() - 1; ++index) for (; index < m_Entries.cend() - 1; ++index)
{ {
if (strcmp(index->name, sectionName) == 0) if (strcmp(index->name, sectionName) == 0)
break; break;
} }
if (index == m_Entries.end() - 1) if (index == m_Entries.cend() - 1)
{ {
PanicAlertT("Section %s not found in SYSCONF", sectionName); PanicAlertT("Section %s not found in SYSCONF", sectionName);
return 0; return false;
} }
return index->GetArrayData(dest, destSize); return index->GetArrayData(dest, destSize);
} }
bool SetArrayData(const char* sectionName, u8* buffer, u16 bufferSize) bool SetArrayData(const char* sectionName, const u8* buffer, u16 bufferSize)
{ {
if (!m_IsValid) if (!m_IsValid)
return false; return false;
std::vector<SSysConfEntry>::iterator index = m_Entries.begin(); auto index = m_Entries.begin();
for (; index < m_Entries.end() - 1; ++index) for (; index < m_Entries.end() - 1; ++index)
{ {
if (strcmp(index->name, sectionName) == 0) if (strcmp(index->name, sectionName) == 0)
@ -157,7 +159,7 @@ public:
if (!m_IsValid) if (!m_IsValid)
return false; return false;
std::vector<SSysConfEntry>::iterator index = m_Entries.begin(); auto index = m_Entries.begin();
for (; index < m_Entries.end() - 1; ++index) for (; index < m_Entries.end() - 1; ++index)
{ {
if (strcmp(index->name, sectionName) == 0) if (strcmp(index->name, sectionName) == 0)
@ -169,7 +171,7 @@ public:
return false; return false;
} }
*(T*)index->data.data() = newValue; std::memcpy(index->data.data(), &newValue, sizeof(T));
return true; return true;
} }

View File

@ -22,7 +22,7 @@ namespace HLE
{ {
constexpr u16 BT_INFO_SECTION_LENGTH = 0x460; constexpr u16 BT_INFO_SECTION_LENGTH = 0x460;
void BackUpBTInfoSection(SysConf* sysconf) void BackUpBTInfoSection(const SysConf* sysconf)
{ {
const std::string filename = File::GetUserPath(D_SESSION_WIIROOT_IDX) + DIR_SEP WII_BTDINF_BACKUP; const std::string filename = File::GetUserPath(D_SESSION_WIIROOT_IDX) + DIR_SEP WII_BTDINF_BACKUP;
if (File::Exists(filename)) if (File::Exists(filename))

View File

@ -18,7 +18,7 @@ namespace IOS
{ {
namespace HLE namespace HLE
{ {
void BackUpBTInfoSection(SysConf* sysconf); void BackUpBTInfoSection(const SysConf* sysconf);
void RestoreBTInfoSection(SysConf* sysconf); void RestoreBTInfoSection(SysConf* sysconf);
namespace Device namespace Device