util/Error: new error passing library
Replaces GLib's GError.
This commit is contained in:
@@ -33,6 +33,8 @@
|
||||
#include "mpd_error.h"
|
||||
#include "fs/Path.hxx"
|
||||
#include "fs/FileSystem.hxx"
|
||||
#include "util/Error.hxx"
|
||||
#include "util/Domain.hxx"
|
||||
|
||||
#ifdef ENABLE_ENCODER
|
||||
#include "EncoderList.hxx"
|
||||
@@ -57,11 +59,7 @@
|
||||
#define USER_CONFIG_FILE_LOCATION_XDG "mpd/mpd.conf"
|
||||
#endif
|
||||
|
||||
static GQuark
|
||||
cmdline_quark(void)
|
||||
{
|
||||
return g_quark_from_static_string("cmdline");
|
||||
}
|
||||
static constexpr Domain cmdline_domain("cmdline");
|
||||
|
||||
gcc_noreturn
|
||||
static void version(void)
|
||||
@@ -147,9 +145,8 @@ PathBuildChecked(const Path &a, Path::const_pointer b)
|
||||
|
||||
bool
|
||||
parse_cmdline(int argc, char **argv, struct options *options,
|
||||
GError **error_r)
|
||||
Error &error)
|
||||
{
|
||||
GError *error = NULL;
|
||||
GOptionContext *context;
|
||||
bool ret;
|
||||
static gboolean option_version,
|
||||
@@ -183,11 +180,12 @@ parse_cmdline(int argc, char **argv, struct options *options,
|
||||
|
||||
g_option_context_set_summary(context, summary);
|
||||
|
||||
ret = g_option_context_parse(context, &argc, &argv, &error);
|
||||
GError *gerror = nullptr;
|
||||
ret = g_option_context_parse(context, &argc, &argv, &gerror);
|
||||
g_option_context_free(context);
|
||||
|
||||
if (!ret)
|
||||
MPD_ERROR("option parsing failed: %s\n", error->message);
|
||||
MPD_ERROR("option parsing failed: %s\n", gerror->message);
|
||||
|
||||
if (option_version)
|
||||
version();
|
||||
@@ -208,7 +206,7 @@ parse_cmdline(int argc, char **argv, struct options *options,
|
||||
Path path = PathBuildChecked(Path::FromUTF8(g_get_user_config_dir()),
|
||||
CONFIG_FILE_LOCATION);
|
||||
if (!path.IsNull() && FileExists(path))
|
||||
return ReadConfigFile(path, error_r);
|
||||
return ReadConfigFile(path, error);
|
||||
|
||||
const char *const*system_config_dirs =
|
||||
g_get_system_config_dirs();
|
||||
@@ -217,38 +215,36 @@ parse_cmdline(int argc, char **argv, struct options *options,
|
||||
path = PathBuildChecked(Path::FromUTF8(system_config_dirs[i]),
|
||||
CONFIG_FILE_LOCATION);
|
||||
if (!path.IsNull() && FileExists(path))
|
||||
return ReadConfigFile(path, error_r);
|
||||
return ReadConfigFile(path, error);
|
||||
}
|
||||
#else /* G_OS_WIN32 */
|
||||
Path path = PathBuildChecked(Path::FromUTF8(g_get_user_config_dir()),
|
||||
USER_CONFIG_FILE_LOCATION_XDG);
|
||||
if (!path.IsNull() && FileExists(path))
|
||||
return ReadConfigFile(path, error_r);
|
||||
return ReadConfigFile(path, error);
|
||||
|
||||
path = PathBuildChecked(Path::FromUTF8(g_get_home_dir()),
|
||||
USER_CONFIG_FILE_LOCATION1);
|
||||
if (!path.IsNull() && FileExists(path))
|
||||
return ReadConfigFile(path, error_r);
|
||||
return ReadConfigFile(path, error);
|
||||
|
||||
path = PathBuildChecked(Path::FromUTF8(g_get_home_dir()),
|
||||
USER_CONFIG_FILE_LOCATION2);
|
||||
if (!path.IsNull() && FileExists(path))
|
||||
return ReadConfigFile(path, error_r);
|
||||
return ReadConfigFile(path, error);
|
||||
|
||||
path = Path::FromUTF8(SYSTEM_CONFIG_FILE_LOCATION);
|
||||
if (!path.IsNull() && FileExists(path))
|
||||
return ReadConfigFile(path, error_r);
|
||||
return ReadConfigFile(path, error);
|
||||
#endif
|
||||
|
||||
g_set_error(error_r, cmdline_quark(), 0,
|
||||
"No configuration file found");
|
||||
error.Set(cmdline_domain, "No configuration file found");
|
||||
return false;
|
||||
} else if (argc == 2) {
|
||||
/* specified configuration file */
|
||||
return ReadConfigFile(Path::FromFS(argv[1]), error_r);
|
||||
return ReadConfigFile(Path::FromFS(argv[1]), error);
|
||||
} else {
|
||||
g_set_error(error_r, cmdline_quark(), 0,
|
||||
"too many arguments");
|
||||
error.Set(cmdline_domain, "too many arguments");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user