diff options
| author | 2021-05-25 19:32:56 -0400 | |
|---|---|---|
| committer | 2021-05-25 19:32:56 -0400 | |
| commit | 065867e2c24e9856c360fc2d6b9a86c92aedc43e (patch) | |
| tree | 7964e85ef4f01a3c2b8f44e850f37b384405b930 /src/yuzu_cmd/config.cpp | |
| parent | Merge pull request #6349 from german77/suppress_config_warning (diff) | |
| download | yuzu-065867e2c24e9856c360fc2d6b9a86c92aedc43e.tar.gz yuzu-065867e2c24e9856c360fc2d6b9a86c92aedc43e.tar.xz yuzu-065867e2c24e9856c360fc2d6b9a86c92aedc43e.zip | |
common: fs: Rework the Common Filesystem interface to make use of std::filesystem (#6270)
* common: fs: fs_types: Create filesystem types
Contains various filesystem types used by the Common::FS library
* common: fs: fs_util: Add std::string to std::u8string conversion utility
* common: fs: path_util: Add utlity functions for paths
Contains various utility functions for getting or manipulating filesystem paths used by the Common::FS library
* common: fs: file: Rewrite the IOFile implementation
* common: fs: Reimplement Common::FS library using std::filesystem
* common: fs: fs_paths: Add fs_paths to replace common_paths
* common: fs: path_util: Add the rest of the path functions
* common: Remove the previous Common::FS implementation
* general: Remove unused fs includes
* string_util: Remove unused function and include
* nvidia_flags: Migrate to the new Common::FS library
* settings: Migrate to the new Common::FS library
* logging: backend: Migrate to the new Common::FS library
* core: Migrate to the new Common::FS library
* perf_stats: Migrate to the new Common::FS library
* reporter: Migrate to the new Common::FS library
* telemetry_session: Migrate to the new Common::FS library
* key_manager: Migrate to the new Common::FS library
* bis_factory: Migrate to the new Common::FS library
* registered_cache: Migrate to the new Common::FS library
* xts_archive: Migrate to the new Common::FS library
* service: acc: Migrate to the new Common::FS library
* applets/profile: Migrate to the new Common::FS library
* applets/web: Migrate to the new Common::FS library
* service: filesystem: Migrate to the new Common::FS library
* loader: Migrate to the new Common::FS library
* gl_shader_disk_cache: Migrate to the new Common::FS library
* nsight_aftermath_tracker: Migrate to the new Common::FS library
* vulkan_library: Migrate to the new Common::FS library
* configure_debug: Migrate to the new Common::FS library
* game_list_worker: Migrate to the new Common::FS library
* config: Migrate to the new Common::FS library
* configure_filesystem: Migrate to the new Common::FS library
* configure_per_game_addons: Migrate to the new Common::FS library
* configure_profile_manager: Migrate to the new Common::FS library
* configure_ui: Migrate to the new Common::FS library
* input_profiles: Migrate to the new Common::FS library
* yuzu_cmd: config: Migrate to the new Common::FS library
* yuzu_cmd: Migrate to the new Common::FS library
* vfs_real: Migrate to the new Common::FS library
* vfs: Migrate to the new Common::FS library
* vfs_libzip: Migrate to the new Common::FS library
* service: bcat: Migrate to the new Common::FS library
* yuzu: main: Migrate to the new Common::FS library
* vfs_real: Delete the contents of an existing file in CreateFile
Current usages of CreateFile expect to delete the contents of an existing file, retain this behavior for now.
* input_profiles: Don't iterate the input profile dir if it does not exist
Silences an error produced in the log if the directory does not exist.
* game_list_worker: Skip parsing file if the returned VfsFile is nullptr
Prevents crashes in GetLoader when the virtual file is nullptr
* common: fs: Validate paths for path length
* service: filesystem: Open the mod load directory as read only
Diffstat (limited to '')
| -rw-r--r-- | src/yuzu_cmd/config.cpp | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp index 38d896d65..a2ab69cdd 100644 --- a/src/yuzu_cmd/config.cpp +++ b/src/yuzu_cmd/config.cpp | |||
| @@ -16,7 +16,9 @@ | |||
| 16 | #endif | 16 | #endif |
| 17 | 17 | ||
| 18 | #include <inih/cpp/INIReader.h> | 18 | #include <inih/cpp/INIReader.h> |
| 19 | #include "common/file_util.h" | 19 | #include "common/fs/file.h" |
| 20 | #include "common/fs/fs.h" | ||
| 21 | #include "common/fs/path_util.h" | ||
| 20 | #include "common/logging/log.h" | 22 | #include "common/logging/log.h" |
| 21 | #include "common/param_package.h" | 23 | #include "common/param_package.h" |
| 22 | #include "common/settings.h" | 24 | #include "common/settings.h" |
| @@ -30,8 +32,8 @@ namespace FS = Common::FS; | |||
| 30 | 32 | ||
| 31 | Config::Config() { | 33 | Config::Config() { |
| 32 | // TODO: Don't hardcode the path; let the frontend decide where to put the config files. | 34 | // TODO: Don't hardcode the path; let the frontend decide where to put the config files. |
| 33 | sdl2_config_loc = FS::GetUserPath(FS::UserPath::ConfigDir) + "sdl2-config.ini"; | 35 | sdl2_config_loc = FS::GetYuzuPath(FS::YuzuPath::ConfigDir) / "sdl2-config.ini"; |
| 34 | sdl2_config = std::make_unique<INIReader>(sdl2_config_loc); | 36 | sdl2_config = std::make_unique<INIReader>(FS::PathToUTF8String(sdl2_config_loc)); |
| 35 | 37 | ||
| 36 | Reload(); | 38 | Reload(); |
| 37 | } | 39 | } |
| @@ -39,20 +41,23 @@ Config::Config() { | |||
| 39 | Config::~Config() = default; | 41 | Config::~Config() = default; |
| 40 | 42 | ||
| 41 | bool Config::LoadINI(const std::string& default_contents, bool retry) { | 43 | bool Config::LoadINI(const std::string& default_contents, bool retry) { |
| 42 | const std::string& location = this->sdl2_config_loc; | 44 | const auto config_loc_str = FS::PathToUTF8String(sdl2_config_loc); |
| 43 | if (sdl2_config->ParseError() < 0) { | 45 | if (sdl2_config->ParseError() < 0) { |
| 44 | if (retry) { | 46 | if (retry) { |
| 45 | LOG_WARNING(Config, "Failed to load {}. Creating file from defaults...", location); | 47 | LOG_WARNING(Config, "Failed to load {}. Creating file from defaults...", |
| 46 | FS::CreateFullPath(location); | 48 | config_loc_str); |
| 47 | FS::WriteStringToFile(true, location, default_contents); | 49 | |
| 48 | sdl2_config = std::make_unique<INIReader>(location); // Reopen file | 50 | void(FS::CreateParentDir(sdl2_config_loc)); |
| 51 | void(FS::WriteStringToFile(sdl2_config_loc, FS::FileType::TextFile, default_contents)); | ||
| 52 | |||
| 53 | sdl2_config = std::make_unique<INIReader>(config_loc_str); | ||
| 49 | 54 | ||
| 50 | return LoadINI(default_contents, false); | 55 | return LoadINI(default_contents, false); |
| 51 | } | 56 | } |
| 52 | LOG_ERROR(Config, "Failed."); | 57 | LOG_ERROR(Config, "Failed."); |
| 53 | return false; | 58 | return false; |
| 54 | } | 59 | } |
| 55 | LOG_INFO(Config, "Successfully loaded {}", location); | 60 | LOG_INFO(Config, "Successfully loaded {}", config_loc_str); |
| 56 | return true; | 61 | return true; |
| 57 | } | 62 | } |
| 58 | 63 | ||
| @@ -327,18 +332,18 @@ void Config::ReadValues() { | |||
| 327 | // Data Storage | 332 | // Data Storage |
| 328 | Settings::values.use_virtual_sd = | 333 | Settings::values.use_virtual_sd = |
| 329 | sdl2_config->GetBoolean("Data Storage", "use_virtual_sd", true); | 334 | sdl2_config->GetBoolean("Data Storage", "use_virtual_sd", true); |
| 330 | FS::GetUserPath( | 335 | FS::SetYuzuPath(FS::YuzuPath::NANDDir, |
| 331 | FS::UserPath::NANDDir, | 336 | sdl2_config->Get("Data Storage", "nand_directory", |
| 332 | sdl2_config->Get("Data Storage", "nand_directory", FS::GetUserPath(FS::UserPath::NANDDir))); | 337 | FS::GetYuzuPathString(FS::YuzuPath::NANDDir))); |
| 333 | FS::GetUserPath( | 338 | FS::SetYuzuPath(FS::YuzuPath::SDMCDir, |
| 334 | FS::UserPath::SDMCDir, | 339 | sdl2_config->Get("Data Storage", "sdmc_directory", |
| 335 | sdl2_config->Get("Data Storage", "sdmc_directory", FS::GetUserPath(FS::UserPath::SDMCDir))); | 340 | FS::GetYuzuPathString(FS::YuzuPath::SDMCDir))); |
| 336 | FS::GetUserPath( | 341 | FS::SetYuzuPath(FS::YuzuPath::LoadDir, |
| 337 | FS::UserPath::LoadDir, | 342 | sdl2_config->Get("Data Storage", "load_directory", |
| 338 | sdl2_config->Get("Data Storage", "load_directory", FS::GetUserPath(FS::UserPath::LoadDir))); | 343 | FS::GetYuzuPathString(FS::YuzuPath::LoadDir))); |
| 339 | FS::GetUserPath( | 344 | FS::SetYuzuPath(FS::YuzuPath::DumpDir, |
| 340 | FS::UserPath::DumpDir, | 345 | sdl2_config->Get("Data Storage", "dump_directory", |
| 341 | sdl2_config->Get("Data Storage", "dump_directory", FS::GetUserPath(FS::UserPath::DumpDir))); | 346 | FS::GetYuzuPathString(FS::YuzuPath::DumpDir))); |
| 342 | Settings::values.gamecard_inserted = | 347 | Settings::values.gamecard_inserted = |
| 343 | sdl2_config->GetBoolean("Data Storage", "gamecard_inserted", false); | 348 | sdl2_config->GetBoolean("Data Storage", "gamecard_inserted", false); |
| 344 | Settings::values.gamecard_current_game = | 349 | Settings::values.gamecard_current_game = |