From e98e2a0b07363132707146f571d3411e3e1b8076 Mon Sep 17 00:00:00 2001 From: Denis Krjuchkov <denis@crazydev.net> Date: Sun, 27 Jan 2013 13:26:17 +0600 Subject: Path::FromUTF8() returns nulled instance on error, add error handling where required --- src/Mapper.cxx | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) (limited to 'src/Mapper.cxx') diff --git a/src/Mapper.cxx b/src/Mapper.cxx index fa5af2dba..559df0d23 100644 --- a/src/Mapper.cxx +++ b/src/Mapper.cxx @@ -57,6 +57,12 @@ static size_t music_dir_fs_length; */ static Path playlist_dir_fs = Path::Null(); +static inline GQuark +mapper_quark() +{ + return g_quark_from_static_string ("mapper"); +} + /** * Duplicate a string, chop all trailing slashes. */ @@ -98,31 +104,52 @@ check_directory(const char *path_utf8, const Path &path_fs) g_warning("No permission to read directory: %s", path_utf8); } -static void -mapper_set_music_dir(const char *path_utf8) +static bool +mapper_set_music_dir(const char *path_utf8, GError **error_r) { + music_dir_fs = Path::FromUTF8(path_utf8); + if (music_dir_fs.IsNull()) { + g_set_error(error_r, mapper_quark(), 0, + "Failed to convert music path to FS encoding"); + return false; + } + + music_dir_fs_length = music_dir_fs.length(); + music_dir_utf8 = strdup_chop_slash(path_utf8); music_dir_utf8_length = strlen(music_dir_utf8); - music_dir_fs = Path::FromUTF8(path_utf8); check_directory(path_utf8, music_dir_fs); - music_dir_fs_length = music_dir_fs.length(); + + return true; } -static void -mapper_set_playlist_dir(const char *path_utf8) +static bool +mapper_set_playlist_dir(const char *path_utf8, GError **error_r) { playlist_dir_fs = Path::FromUTF8(path_utf8); + if (playlist_dir_fs.IsNull()) { + g_set_error(error_r, mapper_quark(), 0, + "Failed to convert playlist path to FS encoding"); + return false; + } + check_directory(path_utf8, playlist_dir_fs); + return true; } -void mapper_init(const char *_music_dir, const char *_playlist_dir) +bool mapper_init(const char *_music_dir, const char *_playlist_dir, + GError **error_r) { if (_music_dir != NULL) - mapper_set_music_dir(_music_dir); + if (!mapper_set_music_dir(_music_dir, error_r)) + return false; if (_playlist_dir != NULL) - mapper_set_playlist_dir(_playlist_dir); + if (!mapper_set_playlist_dir(_playlist_dir, error_r)) + return false; + + return true; } void mapper_finish(void) -- cgit v1.2.3