diff --git a/src/xenia/config.cc b/src/xenia/config.cc
index 08b914221..899170014 100644
--- a/src/xenia/config.cc
+++ b/src/xenia/config.cc
@@ -5,6 +5,18 @@
#include "xenia/base/logging.h"
#include "xenia/base/string.h"
+namespace cpptoml {
+inline std::shared_ptr
parse_file(const std::wstring& filename) {
+ std::ifstream file(filename);
+ if (!file.is_open()) {
+ throw parse_exception(xe::to_string(filename) +
+ " could not be opened for parsing");
+ }
+ parser p(file);
+ return p.parse();
+}
+} // namespace cpptoml
+
CmdVar(config, "", "Specifies the target config to load.");
namespace config {
std::wstring config_name = L"xenia.config.toml";
@@ -18,18 +30,18 @@ bool sortCvar(cvar::IConfigVar* a, cvar::IConfigVar* b) {
return false;
}
-std::shared_ptr ParseConfig(std::string config_path) {
+std::shared_ptr ParseConfig(const std::wstring& config_path) {
try {
return cpptoml::parse_file(config_path);
} catch (cpptoml::parse_exception e) {
- xe::FatalError("Failed to parse config file '%s':\n\n%s",
- config_path.c_str(), e.what());
+ xe::FatalError(L"Failed to parse config file '%s':\n\n%s",
+ config_path.c_str(), xe::to_wstring(e.what()).c_str());
return nullptr;
}
}
void ReadConfig(const std::wstring& file_path) {
- const auto config = ParseConfig(xe::to_string(file_path));
+ const auto config = ParseConfig(file_path);
for (auto& it : *cvar::ConfigVars) {
auto configVar = static_cast(it.second);
auto configKey = configVar->category() + "." + configVar->name();
@@ -41,7 +53,7 @@ void ReadConfig(const std::wstring& file_path) {
}
void ReadGameConfig(std::wstring file_path) {
- const auto config = ParseConfig(xe::to_string(file_path));
+ const auto config = ParseConfig(file_path);
for (auto& it : *cvar::ConfigVars) {
auto configVar = static_cast(it.second);
auto configKey = configVar->category() + "." + configVar->name();
@@ -89,7 +101,7 @@ void SaveConfig() {
// save the config file
xe::filesystem::CreateParentFolder(config_path);
std::ofstream file;
- file.open(xe::to_string(config_path), std::ios::out | std::ios::trunc);
+ file.open(config_path, std::ios::out | std::ios::trunc);
file << output.str();
file.close();
}