Commit fc3e0dfc authored by Max Kellermann's avatar Max Kellermann

fs/AllocatedPath: add method FromUTF8Throw()

parent 6513ff92
...@@ -43,9 +43,8 @@ playlist_print_song(BufferedOutputStream &os, const DetachedSong &song) ...@@ -43,9 +43,8 @@ playlist_print_song(BufferedOutputStream &os, const DetachedSong &song)
: song.GetURI(); : song.GetURI();
try { try {
const auto uri_fs = AllocatedPath::FromUTF8(uri_utf8); const auto uri_fs = AllocatedPath::FromUTF8Throw(uri_utf8);
if (!uri_fs.IsNull()) os.Format("%s\n", NarrowPath(uri_fs).c_str());
os.Format("%s\n", NarrowPath(uri_fs).c_str());
} catch (const std::runtime_error &) { } catch (const std::runtime_error &) {
} }
} }
...@@ -61,7 +60,7 @@ playlist_print_uri(BufferedOutputStream &os, const char *uri) ...@@ -61,7 +60,7 @@ playlist_print_uri(BufferedOutputStream &os, const char *uri)
? map_uri_fs(uri) ? map_uri_fs(uri)
: :
#endif #endif
AllocatedPath::FromUTF8(uri); AllocatedPath::FromUTF8Throw(uri);
if (!path.IsNull()) if (!path.IsNull())
os.Format("%s\n", NarrowPath(path).c_str()); os.Format("%s\n", NarrowPath(path).c_str());
......
...@@ -44,6 +44,16 @@ AllocatedPath::FromUTF8(const char *path_utf8) ...@@ -44,6 +44,16 @@ AllocatedPath::FromUTF8(const char *path_utf8)
} }
AllocatedPath AllocatedPath
AllocatedPath::FromUTF8Throw(const char *path_utf8)
{
#if defined(HAVE_FS_CHARSET) || defined(WIN32)
return AllocatedPath(::PathFromUTF8(path_utf8));
#else
return FromFS(path_utf8);
#endif
}
AllocatedPath
AllocatedPath::FromUTF8(const char *path_utf8, Error &error) AllocatedPath::FromUTF8(const char *path_utf8, Error &error)
{ {
AllocatedPath path = FromUTF8(path_utf8); AllocatedPath path = FromUTF8(path_utf8);
......
...@@ -157,6 +157,13 @@ public: ...@@ -157,6 +157,13 @@ public:
gcc_pure gcc_nonnull_all gcc_pure gcc_nonnull_all
static AllocatedPath FromUTF8(const char *path_utf8); static AllocatedPath FromUTF8(const char *path_utf8);
/**
* Convert a UTF-8 C string to an #AllocatedPath instance.
* Throws a std::runtime_error on error.
*/
gcc_pure gcc_nonnull_all
static AllocatedPath FromUTF8Throw(const char *path_utf8);
gcc_pure gcc_nonnull_all gcc_pure gcc_nonnull_all
static AllocatedPath FromUTF8(const char *path_utf8, Error &error); static AllocatedPath FromUTF8(const char *path_utf8, Error &error);
......
...@@ -96,9 +96,7 @@ embcue_playlist_open_uri(const char *uri, ...@@ -96,9 +96,7 @@ embcue_playlist_open_uri(const char *uri,
/* only local files supported */ /* only local files supported */
return nullptr; return nullptr;
const auto path_fs = AllocatedPath::FromUTF8(uri); const auto path_fs = AllocatedPath::FromUTF8Throw(uri);
if (path_fs.IsNull())
return nullptr;
const auto playlist = new EmbeddedCuePlaylist(); const auto playlist = new EmbeddedCuePlaylist();
......
...@@ -94,9 +94,7 @@ flac_playlist_open_uri(const char *uri, ...@@ -94,9 +94,7 @@ flac_playlist_open_uri(const char *uri,
/* only local files supported */ /* only local files supported */
return nullptr; return nullptr;
const auto path_fs = AllocatedPath::FromUTF8(uri); const auto path_fs = AllocatedPath::FromUTF8Throw(uri);
if (path_fs.IsNull())
return nullptr;
const NarrowPath narrow_path_fs(path_fs); const NarrowPath narrow_path_fs(path_fs);
......
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