key_manager: Make use of IOFile in WriteKeyToFile()
This properly handles unicode-based paths on Windows, while opening a raw stream doesn't out-of-the-box. Prevents file creation from potentially failing on Windows PCs that make use of unicode characters in their save paths (e.g. writing to a user's AppData folder, where the user has a name with non-ASCII characters).
This commit is contained in:
parent
8714d40a77
commit
64cbebc58f
|
@ -668,23 +668,27 @@ void KeyManager::WriteKeyToFile(KeyCategory category, std::string_view keyname,
|
||||||
const std::array<u8, Size>& key) {
|
const std::array<u8, Size>& key) {
|
||||||
const std::string yuzu_keys_dir = FileUtil::GetUserPath(FileUtil::UserPath::KeysDir);
|
const std::string yuzu_keys_dir = FileUtil::GetUserPath(FileUtil::UserPath::KeysDir);
|
||||||
std::string filename = "title.keys_autogenerated";
|
std::string filename = "title.keys_autogenerated";
|
||||||
if (category == KeyCategory::Standard)
|
if (category == KeyCategory::Standard) {
|
||||||
filename = dev_mode ? "dev.keys_autogenerated" : "prod.keys_autogenerated";
|
filename = dev_mode ? "dev.keys_autogenerated" : "prod.keys_autogenerated";
|
||||||
else if (category == KeyCategory::Console)
|
} else if (category == KeyCategory::Console) {
|
||||||
filename = "console.keys_autogenerated";
|
filename = "console.keys_autogenerated";
|
||||||
const auto add_info_text = !FileUtil::Exists(yuzu_keys_dir + DIR_SEP + filename);
|
|
||||||
FileUtil::CreateFullPath(yuzu_keys_dir + DIR_SEP + filename);
|
|
||||||
std::ofstream file(yuzu_keys_dir + DIR_SEP + filename, std::ios::app);
|
|
||||||
if (!file.is_open())
|
|
||||||
return;
|
|
||||||
if (add_info_text) {
|
|
||||||
file
|
|
||||||
<< "# This file is autogenerated by Yuzu\n"
|
|
||||||
<< "# It serves to store keys that were automatically generated from the normal keys\n"
|
|
||||||
<< "# If you are experiencing issues involving keys, it may help to delete this file\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
file << fmt::format("\n{} = {}", keyname, Common::HexToString(key));
|
const auto path = yuzu_keys_dir + DIR_SEP + filename;
|
||||||
|
const auto add_info_text = !FileUtil::Exists(path);
|
||||||
|
FileUtil::CreateFullPath(path);
|
||||||
|
FileUtil::IOFile file{path, "a"};
|
||||||
|
if (!file.IsOpen()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (add_info_text) {
|
||||||
|
file.WriteString(
|
||||||
|
"# This file is autogenerated by Yuzu\n"
|
||||||
|
"# It serves to store keys that were automatically generated from the normal keys\n"
|
||||||
|
"# If you are experiencing issues involving keys, it may help to delete this file\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
file.WriteString(fmt::format("\n{} = {}", keyname, Common::HexToString(key)));
|
||||||
AttemptLoadKeyFile(yuzu_keys_dir, yuzu_keys_dir, filename, category == KeyCategory::Title);
|
AttemptLoadKeyFile(yuzu_keys_dir, yuzu_keys_dir, filename, category == KeyCategory::Title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue