Commit 45b60b3d authored by Max Kellermann's avatar Max Kellermann

fs/Traits: GetParent() returns std::string_view

parent cefc7739
...@@ -169,7 +169,7 @@ handle_read_comments(Client &client, Request args, Response &r) ...@@ -169,7 +169,7 @@ handle_read_comments(Client &client, Request args, Response &r)
* opened file or #nullptr on failure. * opened file or #nullptr on failure.
*/ */
static InputStreamPtr static InputStreamPtr
find_stream_art(const char *directory, Mutex &mutex) find_stream_art(std::string_view directory, Mutex &mutex)
{ {
static constexpr char const * art_names[] = { static constexpr char const * art_names[] = {
"cover.png", "cover.png",
...@@ -195,11 +195,11 @@ find_stream_art(const char *directory, Mutex &mutex) ...@@ -195,11 +195,11 @@ find_stream_art(const char *directory, Mutex &mutex)
static CommandResult static CommandResult
read_stream_art(Response &r, const char *uri, size_t offset) read_stream_art(Response &r, const char *uri, size_t offset)
{ {
std::string art_directory = PathTraitsUTF8::GetParent(uri); const auto art_directory = PathTraitsUTF8::GetParent(uri);
Mutex mutex; Mutex mutex;
InputStreamPtr is = find_stream_art(art_directory.c_str(), mutex); InputStreamPtr is = find_stream_art(art_directory, mutex);
if (is == nullptr) { if (is == nullptr) {
r.Error(ACK_ERROR_NO_EXIST, "No file exists"); r.Error(ACK_ERROR_NO_EXIST, "No file exists");
......
...@@ -64,7 +64,7 @@ GetBasePathImpl(typename Traits::const_pointer p) noexcept ...@@ -64,7 +64,7 @@ GetBasePathImpl(typename Traits::const_pointer p) noexcept
} }
template<typename Traits> template<typename Traits>
typename Traits::string typename Traits::string_view
GetParentPathImpl(typename Traits::const_pointer p) noexcept GetParentPathImpl(typename Traits::const_pointer p) noexcept
{ {
#if !CLANG_CHECK_VERSION(3,6) #if !CLANG_CHECK_VERSION(3,6)
...@@ -81,7 +81,7 @@ GetParentPathImpl(typename Traits::const_pointer p) noexcept ...@@ -81,7 +81,7 @@ GetParentPathImpl(typename Traits::const_pointer p) noexcept
if (Traits::IsDrive(p) && sep == p + 2) if (Traits::IsDrive(p) && sep == p + 2)
return {p, 3u}; return {p, 3u};
#endif #endif
return {p, sep}; return {p, size_t(sep - p)};
} }
template<typename Traits> template<typename Traits>
...@@ -130,7 +130,7 @@ PathTraitsFS::GetBase(PathTraitsFS::const_pointer p) noexcept ...@@ -130,7 +130,7 @@ PathTraitsFS::GetBase(PathTraitsFS::const_pointer p) noexcept
return GetBasePathImpl<PathTraitsFS>(p); return GetBasePathImpl<PathTraitsFS>(p);
} }
PathTraitsFS::string PathTraitsFS::string_view
PathTraitsFS::GetParent(PathTraitsFS::const_pointer p) noexcept PathTraitsFS::GetParent(PathTraitsFS::const_pointer p) noexcept
{ {
return GetParentPathImpl<PathTraitsFS>(p); return GetParentPathImpl<PathTraitsFS>(p);
...@@ -168,7 +168,7 @@ PathTraitsUTF8::GetBase(const_pointer p) noexcept ...@@ -168,7 +168,7 @@ PathTraitsUTF8::GetBase(const_pointer p) noexcept
return GetBasePathImpl<PathTraitsUTF8>(p); return GetBasePathImpl<PathTraitsUTF8>(p);
} }
PathTraitsUTF8::string PathTraitsUTF8::string_view
PathTraitsUTF8::GetParent(const_pointer p) noexcept PathTraitsUTF8::GetParent(const_pointer p) noexcept
{ {
return GetParentPathImpl<PathTraitsUTF8>(p); return GetParentPathImpl<PathTraitsUTF8>(p);
......
...@@ -138,7 +138,7 @@ struct PathTraitsFS { ...@@ -138,7 +138,7 @@ struct PathTraitsFS {
* separator in the given input string. * separator in the given input string.
*/ */
gcc_pure gcc_nonnull_all gcc_pure gcc_nonnull_all
static string GetParent(const_pointer p) noexcept; static string_view GetParent(const_pointer p) noexcept;
/** /**
* Determine the relative part of the given path to this * Determine the relative part of the given path to this
...@@ -247,7 +247,7 @@ struct PathTraitsUTF8 { ...@@ -247,7 +247,7 @@ struct PathTraitsUTF8 {
* separator in the given input string. * separator in the given input string.
*/ */
gcc_pure gcc_nonnull_all gcc_pure gcc_nonnull_all
static string GetParent(const_pointer p) noexcept; static string_view GetParent(const_pointer p) noexcept;
/** /**
* Determine the relative part of the given path to this * Determine the relative part of the given path to this
......
...@@ -41,9 +41,9 @@ playlist_load_into_queue(const char *uri, SongEnumerator &e, ...@@ -41,9 +41,9 @@ playlist_load_into_queue(const char *uri, SongEnumerator &e,
playlist &dest, PlayerControl &pc, playlist &dest, PlayerControl &pc,
const SongLoader &loader) const SongLoader &loader)
{ {
const std::string base_uri = uri != nullptr const auto base_uri = uri != nullptr
? PathTraitsUTF8::GetParent(uri) ? PathTraitsUTF8::GetParent(uri)
: std::string("."); : ".";
std::unique_ptr<DetachedSong> song; std::unique_ptr<DetachedSong> song;
for (unsigned i = 0; for (unsigned i = 0;
...@@ -54,7 +54,7 @@ playlist_load_into_queue(const char *uri, SongEnumerator &e, ...@@ -54,7 +54,7 @@ playlist_load_into_queue(const char *uri, SongEnumerator &e,
continue; continue;
} }
if (!playlist_check_translate_song(*song, base_uri.c_str(), if (!playlist_check_translate_song(*song, base_uri,
loader)) { loader)) {
continue; continue;
} }
......
...@@ -36,13 +36,13 @@ playlist_provider_print(Response &r, ...@@ -36,13 +36,13 @@ playlist_provider_print(Response &r,
const char *uri, const char *uri,
SongEnumerator &e, bool detail) noexcept SongEnumerator &e, bool detail) noexcept
{ {
const std::string base_uri = uri != nullptr const auto base_uri = uri != nullptr
? PathTraitsUTF8::GetParent(uri) ? PathTraitsUTF8::GetParent(uri)
: std::string("."); : ".";
std::unique_ptr<DetachedSong> song; std::unique_ptr<DetachedSong> song;
while ((song = e.NextSong()) != nullptr) { while ((song = e.NextSong()) != nullptr) {
if (playlist_check_translate_song(*song, base_uri.c_str(), if (playlist_check_translate_song(*song, base_uri,
loader) && loader) &&
detail) detail)
song_print_info(r, *song); song_print_info(r, *song);
......
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