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)
{
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] != '~') {
......
......@@ -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;
......
......@@ -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)
......
......@@ -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.
......
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