Fix device name since the ending do contain spaces

This is the only setting has spaces in it.

Other strings, list below, does not have any spaces at beginning and ending.
* VideoResolution
* File paths
This commit is contained in:
RadWolfie 2018-08-23 12:34:33 -05:00
parent 8c9d8e448e
commit 062e5b9aaf
1 changed files with 35 additions and 6 deletions

View File

@ -153,7 +153,32 @@ std::string GenerateUserProfileDirectoryStr()
genDirectory.append(szSettings_cxbx_reloaded_directory);
return genDirectory;
}
}
std::string TrimQuoteFromString(const char* data)
{
// Safeguard before continue on.
if (data == nullptr) {
return "";
}
std::string trim_str = data;
size_t len = trim_str.size();
if (len > 0) {
// New method, in order to support spaces inside DeviceName value.
if (data[0] == '"') {
len--; // Let's decrement since it also can act as offset too.
if (trim_str.at(len) == '"') {
len--;
}
trim_str = trim_str.substr(1, len);
}
// Old method, don't do anything special.
}
return trim_str;
}
#define AppendQuoteToString(d) "\"" + std::string(d) + "\""
bool Settings::Init()
{
@ -257,6 +282,7 @@ bool Settings::LoadConfig()
int iStatus;
std::list<CSimpleIniA::Entry> si_list;
std::list<CSimpleIniA::Entry>::iterator si_list_iterator;
std::string trim_str;
// ==== GUI Begin ===========
@ -422,8 +448,9 @@ bool Settings::LoadConfig()
// default is a null string
m_controller_dinput.DeviceName[v][0] = '\0';
}
else {
std::strncpy(m_controller_dinput.DeviceName[v], si_data, MAX_PATH);
else {
trim_str = TrimQuoteFromString(si_data);
std::strncpy(m_controller_dinput.DeviceName[v], trim_str.c_str(), MAX_PATH);
}
}
@ -475,7 +502,8 @@ bool Settings::Save(std::string file_path)
}
// Minimal need is 25, 0x37 for GUID.
char si_value[64];
char si_value[64];
std::string quote_str;
// ==== GUI Begin ===========
@ -554,8 +582,9 @@ bool Settings::Save(std::string file_path)
if (m_controller_dinput.DeviceName[v][0] == 0) {
m_si.Delete(section_controller_dinput, szKeyName, true);
}
else {
m_si.SetValue(section_controller_dinput, szKeyName, m_controller_dinput.DeviceName[v], nullptr, true);
else {
quote_str = AppendQuoteToString(m_controller_dinput.DeviceName[v]);
m_si.SetValue(section_controller_dinput, szKeyName, quote_str.c_str(), nullptr, true);
}
}