aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authort895 <clombardo169@gmail.com>2023-11-21 14:51:14 -0500
committert895 <clombardo169@gmail.com>2023-11-21 14:53:32 -0500
commit3e303a259c2ffae99ca69c666bd39bf42c30e7da (patch)
treedc8cbdb9d29fdb98c98195f084ef2de85ddc2b9d
parentf745e602ecce9575fee9cf73b6d190d0abb37a9b (diff)
frontend_common: Manually handle opening config file
SimpleIni only has the ability to use ANSI strings for config paths so this breaks opening configs on paths with special characters. This ensures that we open the right path on each platform.
-rw-r--r--src/frontend_common/config.cpp33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/frontend_common/config.cpp b/src/frontend_common/config.cpp
index b3f4a54a44..cf149ec26d 100644
--- a/src/frontend_common/config.cpp
+++ b/src/frontend_common/config.cpp
@@ -16,6 +16,8 @@
#include <boost/algorithm/string/replace.hpp>
+#include "common/string_util.h"
+
namespace FS = Common::FS;
Config::Config(const ConfigType config_type)
@@ -56,16 +58,43 @@ void Config::Initialize(const std::optional<std::string> config_path) {
}
void Config::WriteToIni() const {
- if (const SI_Error rc = config->SaveFile(config_loc.c_str(), false); rc < 0) {
+ FILE* fp = nullptr;
+#ifdef _WIN32
+ fp = _wfopen(Common::UTF8ToUTF16W(config_loc).data(), L"wb");
+#else
+ fp = fopen(config_loc.c_str(), "wb");
+#endif
+
+ CSimpleIniA::FileWriter writer(fp);
+ const SI_Error rc = config->Save(writer, false);
+ if (rc < 0) {
LOG_ERROR(Frontend, "Config file could not be saved!");
}
+ fclose(fp);
}
void Config::SetUpIni() {
config = std::make_unique<CSimpleIniA>();
config->SetUnicode(true);
config->SetSpaces(false);
- config->LoadFile(config_loc.c_str());
+
+ FILE* fp = nullptr;
+#ifdef _WIN32
+ _wfopen_s(&fp, Common::UTF8ToUTF16W(config_loc).data(), L"rb, ccs=UTF-8");
+ if (fp == nullptr) {
+ fp = _wfopen(Common::UTF8ToUTF16W(config_loc).data(), L"wb, ccs=UTF-8");
+ }
+#else
+ fp = fopen(config_loc.c_str(), "rb");
+ if (fp == nullptr) {
+ fp = fopen(config_loc.c_str(), "wb");
+ }
+#endif
+
+ if (SI_Error rc = config->LoadFile(fp); rc < 0) {
+ LOG_ERROR(Frontend, "Config file could not be loaded!");
+ }
+ fclose(fp);
}
bool Config::IsCustomConfig() const {