Path: add FromUTF8() overload that returns an Error

This commit is contained in:
Max Kellermann 2013-09-12 10:02:11 +02:00
parent bf4ee48efa
commit 1ee6a78cb7
4 changed files with 26 additions and 8 deletions

View File

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

View File

@ -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;

View File

@ -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)

View File

@ -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.