log: return GError on initialization failure
This commit is contained in:
parent
35af940166
commit
b680753db8
28
src/log.c
28
src/log.c
|
@ -133,16 +133,20 @@ open_log_file(void)
|
||||||
return open_cloexec(out_filename, O_CREAT | O_WRONLY | O_APPEND, 0666);
|
return open_cloexec(out_filename, O_CREAT | O_WRONLY | O_APPEND, 0666);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static bool
|
||||||
log_init_file(const char *path, unsigned line)
|
log_init_file(const char *path, unsigned line, GError **error_r)
|
||||||
{
|
{
|
||||||
out_filename = path;
|
out_filename = path;
|
||||||
out_fd = open_log_file();
|
out_fd = open_log_file();
|
||||||
if (out_fd < 0)
|
if (out_fd < 0) {
|
||||||
MPD_ERROR("problem opening log file \"%s\" (config line %u) "
|
g_set_error(error_r, log_quark(), errno,
|
||||||
"for writing\n", path, line);
|
"problem opening log file \"%s\" (config line %u) "
|
||||||
|
"for writing", path, line);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
g_log_set_default_handler(file_log_func, NULL);
|
g_log_set_default_handler(file_log_func, NULL);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_SYSLOG
|
#ifdef HAVE_SYSLOG
|
||||||
|
@ -232,7 +236,8 @@ log_early_init(bool verbose)
|
||||||
log_init_stdout();
|
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;
|
const struct config_param *param;
|
||||||
|
|
||||||
|
@ -245,6 +250,7 @@ void log_init(bool verbose, bool use_stdout)
|
||||||
|
|
||||||
if (use_stdout) {
|
if (use_stdout) {
|
||||||
log_init_stdout();
|
log_init_stdout();
|
||||||
|
return true;
|
||||||
} else {
|
} else {
|
||||||
param = config_get_param(CONF_LOG_FILE);
|
param = config_get_param(CONF_LOG_FILE);
|
||||||
if (param == NULL) {
|
if (param == NULL) {
|
||||||
|
@ -252,19 +258,23 @@ void log_init(bool verbose, bool use_stdout)
|
||||||
/* no configuration: default to syslog (if
|
/* no configuration: default to syslog (if
|
||||||
available) */
|
available) */
|
||||||
log_init_syslog();
|
log_init_syslog();
|
||||||
|
return true;
|
||||||
#else
|
#else
|
||||||
MPD_ERROR("config parameter \"%s\" not found\n",
|
g_set_error(error_r, log_quark(), 0,
|
||||||
CONF_LOG_FILE);
|
"config parameter \"%s\" not found",
|
||||||
|
CONF_LOG_FILE);
|
||||||
|
return false;
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_SYSLOG
|
#ifdef HAVE_SYSLOG
|
||||||
} else if (strcmp(param->value, "syslog") == 0) {
|
} else if (strcmp(param->value, "syslog") == 0) {
|
||||||
log_init_syslog();
|
log_init_syslog();
|
||||||
|
return true;
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
const char *path = config_get_path(CONF_LOG_FILE);
|
const char *path = config_get_path(CONF_LOG_FILE);
|
||||||
assert(path != NULL);
|
assert(path != NULL);
|
||||||
|
|
||||||
log_init_file(path, param->line);
|
return log_init_file(path, param->line, error_r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
10
src/log.h
10
src/log.h
|
@ -23,6 +23,13 @@
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <stdbool.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
|
* Configure a logging destination for daemon startup, before the
|
||||||
* configuration file is read. This allows the daemon to use the
|
* configuration file is read. This allows the daemon to use the
|
||||||
|
@ -34,7 +41,8 @@
|
||||||
void
|
void
|
||||||
log_early_init(bool verbose);
|
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);
|
void setup_log_output(bool use_stdout);
|
||||||
|
|
||||||
|
|
|
@ -332,7 +332,12 @@ int mpd_main(int argc, char *argv[])
|
||||||
|
|
||||||
stats_global_init();
|
stats_global_init();
|
||||||
tag_lib_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);
|
success = listen_global_init(&error);
|
||||||
if (!success) {
|
if (!success) {
|
||||||
|
|
Loading…
Reference in New Issue