From c8bb3c0b717bc0cd4fdfb40093963ce01a2d269b Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 2 Nov 2016 10:30:46 +0100 Subject: [PATCH] CommandLine: migrate from class Error to C++ exceptions --- src/CommandLine.cxx | 35 ++++++++++++++--------------------- src/CommandLine.hxx | 7 ++----- src/Main.cxx | 10 +--------- 3 files changed, 17 insertions(+), 35 deletions(-) diff --git a/src/CommandLine.cxx b/src/CommandLine.cxx index 696a79474..1171828a1 100644 --- a/src/CommandLine.cxx +++ b/src/CommandLine.cxx @@ -35,8 +35,9 @@ #include "fs/Traits.hxx" #include "fs/FileSystem.hxx" #include "fs/StandardDirectory.hxx" +#include "system/Error.hxx" #include "util/Macros.hxx" -#include "util/Error.hxx" +#include "util/RuntimeError.hxx" #include "util/Domain.hxx" #include "util/OptionDef.hxx" #include "util/OptionParser.hxx" @@ -301,9 +302,8 @@ bool ConfigLoader::TryFile(const AllocatedPath &base_path, return TryFile(full_path); } -bool -parse_cmdline(int argc, char **argv, struct options *options, - Error &error) +void +ParseCommandLine(int argc, char **argv, struct options *options) { bool use_config_file = true; options->kill = false; @@ -341,9 +341,8 @@ parse_cmdline(int argc, char **argv, struct options *options, if (parser.CheckOption(opt_help, opt_help_alt)) help(); - error.Format(cmdline_domain, "invalid option: %s", - parser.GetOption()); - return false; + throw FormatRuntimeError("invalid option: %s", + parser.GetOption()); } /* initialize the logging library, so the configuration file @@ -353,7 +352,7 @@ parse_cmdline(int argc, char **argv, struct options *options, if (!use_config_file) { LogDebug(cmdline_domain, "Ignoring config, using daemon defaults"); - return true; + return; } // Second pass: find non-option parameters (i.e. config file) @@ -365,8 +364,8 @@ parse_cmdline(int argc, char **argv, struct options *options, config_file = argv[i]; continue; } - error.Set(cmdline_domain, "too many arguments"); - return false; + + throw std::runtime_error("too many arguments"); } if (config_file != nullptr) { @@ -375,16 +374,14 @@ parse_cmdline(int argc, char **argv, struct options *options, wchar_t buffer[MAX_PATH]; auto result = MultiByteToWideChar(CP_ACP, 0, config_file, -1, buffer, ARRAY_SIZE(buffer)); - if (result <= 0) { - error.SetLastError("MultiByteToWideChar() failed"); - return false; - } + if (result <= 0) + throw MakeLastError("MultiByteToWideChar() failed"); ReadConfigFile(Path::FromFS(buffer)); #else ReadConfigFile(Path::FromFS(config_file)); #endif - return true; + return; } /* use default configuration file path */ @@ -403,10 +400,6 @@ parse_cmdline(int argc, char **argv, struct options *options, loader.TryFile(GetHomeDir(), USER_CONFIG_FILE_LOCATION2) || loader.TryFile(Path::FromFS(SYSTEM_CONFIG_FILE_LOCATION)); #endif - if (!found) { - error.Set(cmdline_domain, "No configuration file found"); - return false; - } - - return true; + if (!found) + throw std::runtime_error("No configuration file found"); } diff --git a/src/CommandLine.hxx b/src/CommandLine.hxx index 344e94362..2a3f8c248 100644 --- a/src/CommandLine.hxx +++ b/src/CommandLine.hxx @@ -20,8 +20,6 @@ #ifndef MPD_COMMAND_LINE_HXX #define MPD_COMMAND_LINE_HXX -class Error; - struct options { bool kill; bool daemon; @@ -29,8 +27,7 @@ struct options { bool verbose; }; -bool -parse_cmdline(int argc, char **argv, struct options *options, - Error &error); +void +ParseCommandLine(int argc, char **argv, struct options *options); #endif diff --git a/src/Main.cxx b/src/Main.cxx index 00b9515f0..8689eb178 100644 --- a/src/Main.cxx +++ b/src/Main.cxx @@ -49,7 +49,6 @@ #include "pcm/PcmConvert.hxx" #include "unix/SignalHandlers.hxx" #include "system/FatalError.hxx" -#include "util/Error.hxx" #include "thread/Slack.hxx" #include "lib/icu/Init.hxx" #include "config/ConfigGlobal.hxx" @@ -170,7 +169,6 @@ InitStorage() static bool glue_db_init_and_load(void) { - Error error; instance->database = CreateConfiguredDatabase(instance->event_loop, *instance); if (instance->database == nullptr) @@ -367,7 +365,6 @@ static inline int mpd_main(int argc, char *argv[]) try { struct options options; - Error error; #ifdef ENABLE_DAEMON daemonize_close_stdin(); @@ -399,10 +396,7 @@ try { ReadConfigFile(config_path); } #else - if (!parse_cmdline(argc, argv, &options, error)) { - LogError(error); - return EXIT_FAILURE; - } + ParseCommandLine(argc, argv, &options); #endif #ifdef ENABLE_DAEMON @@ -461,8 +455,6 @@ try { static int mpd_main_after_fork(struct options options) try { - Error error; - ConfigureFS(); glue_mapper_init();