cmdline: handle fatal errors with GError

Don't call g_error(), which will abort the process and dump core.
This commit is contained in:
Max Kellermann 2009-09-24 21:40:05 +02:00
parent 308b3f2337
commit 1b227e0145
3 changed files with 30 additions and 5 deletions

View File

@ -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;
}
}

View File

@ -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

View File

@ -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);