aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2011-09-09 21:40:28 +0200
committerMax Kellermann <max@duempel.org>2011-09-09 21:53:42 +0200
commitb680753db88ea75cab6776aaf99c1635c9e48f68 (patch)
tree00709ecfbe53f2bf3b4d464f9f8132e2f16b0ed6
parent35af940166da22a253cf8bbff48d6e7d63389d0b (diff)
downloadmpd-b680753db88ea75cab6776aaf99c1635c9e48f68.tar.gz
mpd-b680753db88ea75cab6776aaf99c1635c9e48f68.tar.xz
mpd-b680753db88ea75cab6776aaf99c1635c9e48f68.zip
log: return GError on initialization failure
-rw-r--r--src/log.c28
-rw-r--r--src/log.h10
-rw-r--r--src/main.c7
3 files changed, 34 insertions, 11 deletions
diff --git a/src/log.c b/src/log.c
index af76cc1bb..b6c79e985 100644
--- a/src/log.c
+++ b/src/log.c
@@ -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);
}
}
}
diff --git a/src/log.h b/src/log.h
index 9a06d46bf..75e386b25 100644
--- a/src/log.h
+++ b/src/log.h
@@ -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) {