Commit 1ee6a78c authored by Max Kellermann's avatar Max Kellermann

Path: add FromUTF8() overload that returns an Error

parent bf4ee48e
...@@ -53,13 +53,9 @@ ParsePath(const char *path, Error &error) ...@@ -53,13 +53,9 @@ ParsePath(const char *path, Error &error)
{ {
assert(path != nullptr); assert(path != nullptr);
Path path2 = Path::FromUTF8(path); Path path2 = Path::FromUTF8(path, error);
if (path2.IsNull()) { if (path2.IsNull())
error.Format(path_domain,
"Failed to convert path to file system charset: %s",
path);
return Path::Null(); return Path::Null();
}
#ifndef WIN32 #ifndef WIN32
if (!g_path_is_absolute(path) && path[0] != '~') { if (!g_path_is_absolute(path) && path[0] != '~') {
......
...@@ -138,8 +138,12 @@ glue_mapper_init(Error &error) ...@@ -138,8 +138,12 @@ glue_mapper_init(Error &error)
if (playlist_dir.IsNull() && error.IsDefined()) if (playlist_dir.IsNull() && error.IsDefined())
return false; return false;
if (music_dir.IsNull()) if (music_dir.IsNull()) {
music_dir = Path::FromUTF8(g_get_user_special_dir(G_USER_DIRECTORY_MUSIC)); 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)); mapper_init(std::move(music_dir), std::move(playlist_dir));
return true; return true;
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "fs/Path.hxx" #include "fs/Path.hxx"
#include "ConfigGlobal.hxx" #include "ConfigGlobal.hxx"
#include "system/FatalError.hxx" #include "system/FatalError.hxx"
#include "util/Error.hxx"
#include "util/Domain.hxx" #include "util/Domain.hxx"
#include "gcc.h" #include "gcc.h"
...@@ -89,6 +90,18 @@ Path Path::FromUTF8(const char *path_utf8) ...@@ -89,6 +90,18 @@ Path Path::FromUTF8(const char *path_utf8)
return Path(Donate(), p); 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 gcc_pure
static bool static bool
IsSupportedCharset(const char *charset) IsSupportedCharset(const char *charset)
......
...@@ -44,6 +44,8 @@ ...@@ -44,6 +44,8 @@
# endif # endif
#endif #endif
class Error;
extern const class Domain path_domain; extern const class Domain path_domain;
/** /**
...@@ -151,6 +153,9 @@ public: ...@@ -151,6 +153,9 @@ public:
gcc_pure gcc_pure
static Path FromUTF8(const char *path_utf8); static Path FromUTF8(const char *path_utf8);
gcc_pure
static Path FromUTF8(const char *path_utf8, Error &error);
/** /**
* Convert the path to UTF-8. * Convert the path to UTF-8.
* Returns empty string on error or if #path_fs is null pointer. * Returns empty string on error or if #path_fs is null pointer.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment