cmdline: handle fatal errors with GError
Don't call g_error(), which will abort the process and dump core.
This commit is contained in:
parent
308b3f2337
commit
1b227e0145
@ -38,6 +38,12 @@
|
||||
#define USER_CONFIG_FILE_LOCATION1 ".mpdconf"
|
||||
#define USER_CONFIG_FILE_LOCATION2 ".mpd/mpd.conf"
|
||||
|
||||
static GQuark
|
||||
cmdline_quark(void)
|
||||
{
|
||||
return g_quark_from_static_string("cmdline");
|
||||
}
|
||||
|
||||
G_GNUC_NORETURN
|
||||
static void version(void)
|
||||
{
|
||||
@ -76,7 +82,9 @@ static const char *summary =
|
||||
"Music Player Daemon - a daemon for playing music.";
|
||||
#endif
|
||||
|
||||
void parse_cmdline(int argc, char **argv, struct options *options)
|
||||
bool
|
||||
parse_cmdline(int argc, char **argv, struct options *options,
|
||||
GError **error_r)
|
||||
{
|
||||
GError *error = NULL;
|
||||
GOptionContext *context;
|
||||
@ -133,6 +141,7 @@ void parse_cmdline(int argc, char **argv, struct options *options)
|
||||
|
||||
if (option_no_config) {
|
||||
g_debug("Ignoring config, using daemon defaults\n");
|
||||
return true;
|
||||
} else if (argc <= 1) {
|
||||
/* default configuration file path */
|
||||
char *path1;
|
||||
@ -151,9 +160,16 @@ void parse_cmdline(int argc, char **argv, struct options *options)
|
||||
config_read_file(SYSTEM_CONFIG_FILE_LOCATION);
|
||||
g_free(path1);
|
||||
g_free(path2);
|
||||
|
||||
return true;
|
||||
} else if (argc == 2) {
|
||||
/* specified configuration file */
|
||||
config_read_file(argv[1]);
|
||||
} else
|
||||
g_error("too many arguments");
|
||||
|
||||
return true;
|
||||
} else {
|
||||
g_set_error(error_r, cmdline_quark(), 0,
|
||||
"too many arguments");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -22,6 +22,8 @@
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
struct options {
|
||||
gboolean kill;
|
||||
gboolean daemon;
|
||||
@ -29,6 +31,8 @@ struct options {
|
||||
gboolean verbose;
|
||||
};
|
||||
|
||||
void parse_cmdline(int argc, char **argv, struct options *options);
|
||||
bool
|
||||
parse_cmdline(int argc, char **argv, struct options *options,
|
||||
GError **error_r);
|
||||
|
||||
#endif
|
||||
|
@ -295,7 +295,12 @@ int main(int argc, char *argv[])
|
||||
tag_pool_init();
|
||||
config_global_init();
|
||||
|
||||
parse_cmdline(argc, argv, &options);
|
||||
success = parse_cmdline(argc, argv, &options, &error);
|
||||
if (!success) {
|
||||
g_warning("%s", error->message);
|
||||
g_error_free(error);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
glue_daemonize_init(&options);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user