diff options
| -rw-r--r-- | src/yuzu_cmd/config.cpp | 10 | ||||
| -rw-r--r-- | src/yuzu_cmd/config.h | 5 | ||||
| -rw-r--r-- | src/yuzu_cmd/yuzu.cpp | 22 | 
3 files changed, 27 insertions, 10 deletions
| diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp index b74411c84..131bc2201 100644 --- a/src/yuzu_cmd/config.cpp +++ b/src/yuzu_cmd/config.cpp @@ -3,6 +3,7 @@  // Refer to the license.txt file included.  #include <memory> +#include <optional>  #include <sstream>  // Ignore -Wimplicit-fallthrough due to https://github.com/libsdl-org/SDL/issues/4307 @@ -29,11 +30,12 @@  namespace FS = Common::FS; -Config::Config() { -    // TODO: Don't hardcode the path; let the frontend decide where to put the config files. -    sdl2_config_loc = FS::GetYuzuPath(FS::YuzuPath::ConfigDir) / "sdl2-config.ini"; -    sdl2_config = std::make_unique<INIReader>(FS::PathToUTF8String(sdl2_config_loc)); +const std::filesystem::path default_config_path = +    FS::GetYuzuPath(FS::YuzuPath::ConfigDir) / "sdl2-config.ini"; +Config::Config(std::optional<std::filesystem::path> config_path) +    : sdl2_config_loc{config_path.value_or(default_config_path)}, +      sdl2_config{std::make_unique<INIReader>(FS::PathToUTF8String(sdl2_config_loc))} {      Reload();  } diff --git a/src/yuzu_cmd/config.h b/src/yuzu_cmd/config.h index 1ee932be2..f61ba23ec 100644 --- a/src/yuzu_cmd/config.h +++ b/src/yuzu_cmd/config.h @@ -6,6 +6,7 @@  #include <filesystem>  #include <memory> +#include <optional>  #include <string>  #include "common/settings.h" @@ -13,14 +14,14 @@  class INIReader;  class Config { -    std::unique_ptr<INIReader> sdl2_config;      std::filesystem::path sdl2_config_loc; +    std::unique_ptr<INIReader> sdl2_config;      bool LoadINI(const std::string& default_contents = "", bool retry = true);      void ReadValues();  public: -    Config(); +    explicit Config(std::optional<std::filesystem::path> config_path);      ~Config();      void Reload(); diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp index b44ea0cc4..f6d563017 100644 --- a/src/yuzu_cmd/yuzu.cpp +++ b/src/yuzu_cmd/yuzu.cpp @@ -66,7 +66,8 @@ static void PrintHelp(const char* argv0) {                   "-f, --fullscreen      Start in fullscreen mode\n"                   "-h, --help            Display this help and exit\n"                   "-v, --version         Output version information and exit\n" -                 "-p, --program         Pass following string as arguments to executable\n"; +                 "-p, --program         Pass following string as arguments to executable\n" +                 "-c, --config          Load the specified configuration file\n";  }  static void PrintVersion() { @@ -78,7 +79,6 @@ int main(int argc, char** argv) {      Common::Log::Initialize();      Common::Log::SetColorConsoleBackendEnabled(true);      Common::DetachedTasks detached_tasks; -    Config config;      int option_index = 0;  #ifdef _WIN32 @@ -91,19 +91,24 @@ int main(int argc, char** argv) {      }  #endif      std::string filepath; +    std::optional<std::string> config_path; +    std::string program_args;      bool fullscreen = false;      static struct option long_options[] = { +        // clang-format off          {"fullscreen", no_argument, 0, 'f'},          {"help", no_argument, 0, 'h'},          {"version", no_argument, 0, 'v'},          {"program", optional_argument, 0, 'p'}, +        {"config", required_argument, 0, 'c'},          {0, 0, 0, 0}, +        // clang-format on      };      while (optind < argc) { -        int arg = getopt_long(argc, argv, "g:fhvp::", long_options, &option_index); +        int arg = getopt_long(argc, argv, "g:fhvp::c:", long_options, &option_index);          if (arg != -1) {              switch (static_cast<char>(arg)) {              case 'f': @@ -117,9 +122,12 @@ int main(int argc, char** argv) {                  PrintVersion();                  return 0;              case 'p': -                Settings::values.program_args = argv[optind]; +                program_args = argv[optind];                  ++optind;                  break; +            case 'c': +                config_path = optarg; +                break;              }          } else {  #ifdef _WIN32 @@ -131,6 +139,12 @@ int main(int argc, char** argv) {          }      } +    Config config{config_path}; + +    if (!program_args.empty()) { +        Settings::values.program_args = program_args; +    } +  #ifdef _WIN32      LocalFree(argv_w);  #endif | 
