diff options
author | Max Kellermann <max@duempel.org> | 2011-09-09 21:40:28 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2011-09-09 21:53:42 +0200 |
commit | b680753db88ea75cab6776aaf99c1635c9e48f68 (patch) | |
tree | 00709ecfbe53f2bf3b4d464f9f8132e2f16b0ed6 /src | |
parent | 35af940166da22a253cf8bbff48d6e7d63389d0b (diff) | |
download | mpd-b680753db88ea75cab6776aaf99c1635c9e48f68.tar.gz mpd-b680753db88ea75cab6776aaf99c1635c9e48f68.tar.xz mpd-b680753db88ea75cab6776aaf99c1635c9e48f68.zip |
log: return GError on initialization failure
Diffstat (limited to 'src')
-rw-r--r-- | src/log.c | 28 | ||||
-rw-r--r-- | src/log.h | 10 | ||||
-rw-r--r-- | src/main.c | 7 |
3 files changed, 34 insertions, 11 deletions
@@ -133,16 +133,20 @@ open_log_file(void) return open_cloexec(out_filename, O_CREAT | O_WRONLY | O_APPEND, 0666); } -static void -log_init_file(const char *path, unsigned line) +static bool +log_init_file(const char *path, unsigned line, GError **error_r) { out_filename = path; out_fd = open_log_file(); - if (out_fd < 0) - MPD_ERROR("problem opening log file \"%s\" (config line %u) " - "for writing\n", path, line); + if (out_fd < 0) { + g_set_error(error_r, log_quark(), errno, + "problem opening log file \"%s\" (config line %u) " + "for writing", path, line); + return false; + } g_log_set_default_handler(file_log_func, NULL); + return true; } #ifdef HAVE_SYSLOG @@ -232,7 +236,8 @@ log_early_init(bool verbose) log_init_stdout(); } -void log_init(bool verbose, bool use_stdout) +bool +log_init(bool verbose, bool use_stdout, GError **error_r) { const struct config_param *param; @@ -245,6 +250,7 @@ void log_init(bool verbose, bool use_stdout) if (use_stdout) { log_init_stdout(); + return true; } else { param = config_get_param(CONF_LOG_FILE); if (param == NULL) { @@ -252,19 +258,23 @@ void log_init(bool verbose, bool use_stdout) /* no configuration: default to syslog (if available) */ log_init_syslog(); + return true; #else - MPD_ERROR("config parameter \"%s\" not found\n", - CONF_LOG_FILE); + g_set_error(error_r, log_quark(), 0, + "config parameter \"%s\" not found", + CONF_LOG_FILE); + return false; #endif #ifdef HAVE_SYSLOG } else if (strcmp(param->value, "syslog") == 0) { log_init_syslog(); + return true; #endif } else { const char *path = config_get_path(CONF_LOG_FILE); assert(path != NULL); - log_init_file(path, param->line); + return log_init_file(path, param->line, error_r); } } } @@ -23,6 +23,13 @@ #include <glib.h> #include <stdbool.h> +G_GNUC_CONST +static inline GQuark +log_quark(void) +{ + return g_quark_from_static_string("log"); +} + /** * Configure a logging destination for daemon startup, before the * configuration file is read. This allows the daemon to use the @@ -34,7 +41,8 @@ void log_early_init(bool verbose); -void log_init(bool verbose, bool use_stdout); +bool +log_init(bool verbose, bool use_stdout, GError **error_r); void setup_log_output(bool use_stdout); diff --git a/src/main.c b/src/main.c index 52b1331c4..a80b4e17f 100644 --- a/src/main.c +++ b/src/main.c @@ -332,7 +332,12 @@ int mpd_main(int argc, char *argv[]) stats_global_init(); tag_lib_init(); - log_init(options.verbose, options.log_stderr); + + if (!log_init(options.verbose, options.log_stderr, &error)) { + g_warning("%s", error->message); + g_error_free(error); + return EXIT_FAILURE; + } success = listen_global_init(&error); if (!success) { |