util/Error: new error passing library
Replaces GLib's GError.
This commit is contained in:
		
							
								
								
									
										107
									
								
								src/Main.cxx
									
									
									
									
									
								
							
							
						
						
									
										107
									
								
								src/Main.cxx
									
									
									
									
									
								
							@@ -56,6 +56,7 @@
 | 
			
		||||
#include "pcm/PcmResample.hxx"
 | 
			
		||||
#include "Daemon.hxx"
 | 
			
		||||
#include "system/FatalError.hxx"
 | 
			
		||||
#include "util/Error.hxx"
 | 
			
		||||
 | 
			
		||||
extern "C" {
 | 
			
		||||
#include "stats.h"
 | 
			
		||||
@@ -107,15 +108,11 @@ static inline GQuark main_quark()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool
 | 
			
		||||
glue_daemonize_init(const struct options *options, GError **error_r)
 | 
			
		||||
glue_daemonize_init(const struct options *options, Error &error)
 | 
			
		||||
{
 | 
			
		||||
	GError *error = NULL;
 | 
			
		||||
 | 
			
		||||
	Path pid_file = config_get_path(CONF_PID_FILE, &error);
 | 
			
		||||
	if (pid_file.IsNull() && error != NULL) {
 | 
			
		||||
		g_propagate_error(error_r, error);
 | 
			
		||||
	Path pid_file = config_get_path(CONF_PID_FILE, error);
 | 
			
		||||
	if (pid_file.IsNull() && error.IsDefined())
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	daemonize_init(config_get_string(CONF_USER, NULL),
 | 
			
		||||
		       config_get_string(CONF_GROUP, NULL),
 | 
			
		||||
@@ -128,20 +125,15 @@ glue_daemonize_init(const struct options *options, GError **error_r)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool
 | 
			
		||||
glue_mapper_init(GError **error_r)
 | 
			
		||||
glue_mapper_init(Error &error)
 | 
			
		||||
{
 | 
			
		||||
	GError *error = NULL;
 | 
			
		||||
	Path music_dir = config_get_path(CONF_MUSIC_DIR, &error);
 | 
			
		||||
	if (music_dir.IsNull() && error != NULL) {
 | 
			
		||||
		g_propagate_error(error_r, error);
 | 
			
		||||
	Path music_dir = config_get_path(CONF_MUSIC_DIR, error);
 | 
			
		||||
	if (music_dir.IsNull() && error.IsDefined())
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Path playlist_dir = config_get_path(CONF_PLAYLIST_DIR, &error);
 | 
			
		||||
	if (playlist_dir.IsNull() && error != NULL) {
 | 
			
		||||
		g_propagate_error(error_r, error);
 | 
			
		||||
	Path playlist_dir = config_get_path(CONF_PLAYLIST_DIR, error);
 | 
			
		||||
	if (playlist_dir.IsNull() && error.IsDefined())
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (music_dir.IsNull())
 | 
			
		||||
		music_dir = Path::FromUTF8(g_get_user_special_dir(G_USER_DIRECTORY_MUSIC));
 | 
			
		||||
@@ -164,9 +156,6 @@ glue_db_init_and_load(void)
 | 
			
		||||
	if (param != NULL && path != NULL)
 | 
			
		||||
		g_message("Found both 'database' and 'db_file' setting - ignoring the latter");
 | 
			
		||||
 | 
			
		||||
	GError *error = NULL;
 | 
			
		||||
	bool ret;
 | 
			
		||||
 | 
			
		||||
	if (!mapper_has_music_directory()) {
 | 
			
		||||
		if (param != NULL)
 | 
			
		||||
			g_message("Found database setting without "
 | 
			
		||||
@@ -185,13 +174,13 @@ glue_db_init_and_load(void)
 | 
			
		||||
		param = allocated;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!DatabaseGlobalInit(*param, &error))
 | 
			
		||||
	Error error;
 | 
			
		||||
	if (!DatabaseGlobalInit(*param, error))
 | 
			
		||||
		FatalError(error);
 | 
			
		||||
 | 
			
		||||
	delete allocated;
 | 
			
		||||
 | 
			
		||||
	ret = DatabaseGlobalOpen(&error);
 | 
			
		||||
	if (!ret)
 | 
			
		||||
	if (!DatabaseGlobalOpen(error))
 | 
			
		||||
		FatalError(error);
 | 
			
		||||
 | 
			
		||||
	/* run database update after daemonization? */
 | 
			
		||||
@@ -205,36 +194,22 @@ static void
 | 
			
		||||
glue_sticker_init(void)
 | 
			
		||||
{
 | 
			
		||||
#ifdef ENABLE_SQLITE
 | 
			
		||||
	GError *error = NULL;
 | 
			
		||||
	Path sticker_file = config_get_path(CONF_STICKER_FILE, &error);
 | 
			
		||||
	if (sticker_file.IsNull() && error != NULL)
 | 
			
		||||
	Error error;
 | 
			
		||||
	Path sticker_file = config_get_path(CONF_STICKER_FILE, error);
 | 
			
		||||
	if (sticker_file.IsNull() && error.IsDefined())
 | 
			
		||||
		FatalError(error);
 | 
			
		||||
 | 
			
		||||
	if (!sticker_global_init(std::move(sticker_file), &error))
 | 
			
		||||
	if (!sticker_global_init(std::move(sticker_file), error))
 | 
			
		||||
		FatalError(error);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool
 | 
			
		||||
glue_state_file_init(GError **error_r)
 | 
			
		||||
glue_state_file_init(Error &error)
 | 
			
		||||
{
 | 
			
		||||
	GError *error = NULL;
 | 
			
		||||
 | 
			
		||||
	Path path_fs = config_get_path(CONF_STATE_FILE, &error);
 | 
			
		||||
	if (path_fs.IsNull()) {
 | 
			
		||||
		if (error != nullptr) {
 | 
			
		||||
			g_propagate_error(error_r, error);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (path_fs.IsNull()) {
 | 
			
		||||
		g_set_error(error_r, main_quark(), 0,
 | 
			
		||||
			    "Failed to convert state file path to FS encoding");
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	Path path_fs = config_get_path(CONF_STATE_FILE, error);
 | 
			
		||||
	if (path_fs.IsNull())
 | 
			
		||||
		return !error.IsDefined();
 | 
			
		||||
 | 
			
		||||
	state_file = new StateFile(std::move(path_fs),
 | 
			
		||||
				   *instance->partition, *main_loop);
 | 
			
		||||
@@ -364,7 +339,7 @@ int mpd_main(int argc, char *argv[])
 | 
			
		||||
	struct options options;
 | 
			
		||||
	clock_t start;
 | 
			
		||||
	bool create_db;
 | 
			
		||||
	GError *error = NULL;
 | 
			
		||||
	Error error;
 | 
			
		||||
	bool success;
 | 
			
		||||
 | 
			
		||||
	daemonize_close_stdin();
 | 
			
		||||
@@ -385,25 +360,22 @@ int mpd_main(int argc, char *argv[])
 | 
			
		||||
	winsock_init();
 | 
			
		||||
	config_global_init();
 | 
			
		||||
 | 
			
		||||
	success = parse_cmdline(argc, argv, &options, &error);
 | 
			
		||||
	success = parse_cmdline(argc, argv, &options, error);
 | 
			
		||||
	if (!success) {
 | 
			
		||||
		g_warning("%s", error->message);
 | 
			
		||||
		g_error_free(error);
 | 
			
		||||
		g_warning("%s", error.GetMessage());
 | 
			
		||||
		return EXIT_FAILURE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!glue_daemonize_init(&options, &error)) {
 | 
			
		||||
		g_warning("%s", error->message);
 | 
			
		||||
		g_error_free(error);
 | 
			
		||||
	if (!glue_daemonize_init(&options, error)) {
 | 
			
		||||
		g_printerr("%s\n", error.GetMessage());
 | 
			
		||||
		return EXIT_FAILURE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats_global_init();
 | 
			
		||||
	tag_lib_init();
 | 
			
		||||
 | 
			
		||||
	if (!log_init(options.verbose, options.log_stderr, &error)) {
 | 
			
		||||
		g_warning("%s", error->message);
 | 
			
		||||
		g_error_free(error);
 | 
			
		||||
	if (!log_init(options.verbose, options.log_stderr, error)) {
 | 
			
		||||
		g_warning("%s", error.GetMessage());
 | 
			
		||||
		return EXIT_FAILURE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -415,10 +387,9 @@ int mpd_main(int argc, char *argv[])
 | 
			
		||||
	const unsigned max_clients = config_get_positive(CONF_MAX_CONN, 10);
 | 
			
		||||
	instance->client_list = new ClientList(max_clients);
 | 
			
		||||
 | 
			
		||||
	success = listen_global_init(&error);
 | 
			
		||||
	success = listen_global_init(error);
 | 
			
		||||
	if (!success) {
 | 
			
		||||
		g_warning("%s", error->message);
 | 
			
		||||
		g_error_free(error);
 | 
			
		||||
		g_warning("%s", error.GetMessage());
 | 
			
		||||
		return EXIT_FAILURE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -432,9 +403,8 @@ int mpd_main(int argc, char *argv[])
 | 
			
		||||
 | 
			
		||||
	Path::GlobalInit();
 | 
			
		||||
 | 
			
		||||
	if (!glue_mapper_init(&error)) {
 | 
			
		||||
		g_warning("%s", error->message);
 | 
			
		||||
		g_error_free(error);
 | 
			
		||||
	if (!glue_mapper_init(error)) {
 | 
			
		||||
		g_printerr("%s\n", error.GetMessage());
 | 
			
		||||
		return EXIT_FAILURE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -445,9 +415,8 @@ int mpd_main(int argc, char *argv[])
 | 
			
		||||
	archive_plugin_init_all();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!pcm_resample_global_init(&error)) {
 | 
			
		||||
		g_warning("%s", error->message);
 | 
			
		||||
		g_error_free(error);
 | 
			
		||||
	if (!pcm_resample_global_init(error)) {
 | 
			
		||||
		g_warning("%s", error.GetMessage());
 | 
			
		||||
		return EXIT_FAILURE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -466,9 +435,8 @@ int mpd_main(int argc, char *argv[])
 | 
			
		||||
	client_manager_init();
 | 
			
		||||
	replay_gain_global_init();
 | 
			
		||||
 | 
			
		||||
	if (!input_stream_global_init(&error)) {
 | 
			
		||||
		g_warning("%s", error->message);
 | 
			
		||||
		g_error_free(error);
 | 
			
		||||
	if (!input_stream_global_init(error)) {
 | 
			
		||||
		g_warning("%s", error.GetMessage());
 | 
			
		||||
		return EXIT_FAILURE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -494,9 +462,8 @@ int mpd_main(int argc, char *argv[])
 | 
			
		||||
			FatalError("directory update failed");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!glue_state_file_init(&error)) {
 | 
			
		||||
		g_warning("%s", error->message);
 | 
			
		||||
		g_error_free(error);
 | 
			
		||||
	if (!glue_state_file_init(error)) {
 | 
			
		||||
		g_printerr("%s\n", error.GetMessage());
 | 
			
		||||
		return EXIT_FAILURE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user