From 1ee6a78cb727561e75a5d60135bb0cd7956f70b0 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 12 Sep 2013 10:02:11 +0200 Subject: Path: add FromUTF8() overload that returns an Error --- src/ConfigPath.cxx | 8 ++------ src/Main.cxx | 8 ++++++-- src/fs/Path.cxx | 13 +++++++++++++ src/fs/Path.hxx | 5 +++++ 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/ConfigPath.cxx b/src/ConfigPath.cxx index 86f70dfd3..f9236df2a 100644 --- a/src/ConfigPath.cxx +++ b/src/ConfigPath.cxx @@ -53,13 +53,9 @@ ParsePath(const char *path, Error &error) { assert(path != nullptr); - Path path2 = Path::FromUTF8(path); - if (path2.IsNull()) { - error.Format(path_domain, - "Failed to convert path to file system charset: %s", - path); + Path path2 = Path::FromUTF8(path, error); + if (path2.IsNull()) return Path::Null(); - } #ifndef WIN32 if (!g_path_is_absolute(path) && path[0] != '~') { diff --git a/src/Main.cxx b/src/Main.cxx index a1138a908..80c6b0069 100644 --- a/src/Main.cxx +++ b/src/Main.cxx @@ -138,8 +138,12 @@ glue_mapper_init(Error &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)); + if (music_dir.IsNull()) { + music_dir = Path::FromUTF8(g_get_user_special_dir(G_USER_DIRECTORY_MUSIC), + error); + if (music_dir.IsNull()) + return false; + } mapper_init(std::move(music_dir), std::move(playlist_dir)); return true; diff --git a/src/fs/Path.cxx b/src/fs/Path.cxx index c063025c8..f04823661 100644 --- a/src/fs/Path.cxx +++ b/src/fs/Path.cxx @@ -21,6 +21,7 @@ #include "fs/Path.hxx" #include "ConfigGlobal.hxx" #include "system/FatalError.hxx" +#include "util/Error.hxx" #include "util/Domain.hxx" #include "gcc.h" @@ -89,6 +90,18 @@ Path Path::FromUTF8(const char *path_utf8) return Path(Donate(), p); } +Path +Path::FromUTF8(const char *path_utf8, Error &error) +{ + Path path = FromUTF8(path_utf8); + if (path.IsNull()) + error.Format(path_domain, + "Failed to convert to file system charset: %s", + path_utf8); + + return path; +} + gcc_pure static bool IsSupportedCharset(const char *charset) diff --git a/src/fs/Path.hxx b/src/fs/Path.hxx index dd4cf38a7..8bfc9b8c4 100644 --- a/src/fs/Path.hxx +++ b/src/fs/Path.hxx @@ -44,6 +44,8 @@ # endif #endif +class Error; + extern const class Domain path_domain; /** @@ -151,6 +153,9 @@ public: gcc_pure static Path FromUTF8(const char *path_utf8); + gcc_pure + static Path FromUTF8(const char *path_utf8, Error &error); + /** * Convert the path to UTF-8. * Returns empty string on error or if #path_fs is null pointer. -- cgit v1.2.3