From 7a58b8c3e8fef24358eb501da93ec6d2bf2de181 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 3 Apr 2020 15:55:19 +0200 Subject: fs/AllocatedPath: pass std::string_view to FromUTF8() --- src/Mapper.cxx | 2 +- src/db/plugins/simple/SimpleDatabasePlugin.cxx | 2 +- src/db/update/Walk.cxx | 2 +- src/fs/AllocatedPath.cxx | 4 ++-- src/fs/AllocatedPath.hxx | 11 +++++++---- src/fs/Charset.cxx | 9 ++------- src/fs/Charset.hxx | 3 +-- src/storage/plugins/NfsStorage.cxx | 2 +- 8 files changed, 16 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/Mapper.cxx b/src/Mapper.cxx index 099fb92ae..740f9f290 100644 --- a/src/Mapper.cxx +++ b/src/Mapper.cxx @@ -119,7 +119,7 @@ map_spl_utf8_to_fs(const char *name) noexcept filename_utf8.append(PLAYLIST_FILE_SUFFIX); const auto filename_fs = - AllocatedPath::FromUTF8(filename_utf8.c_str()); + AllocatedPath::FromUTF8(filename_utf8); if (filename_fs.IsNull()) return nullptr; diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.cxx b/src/db/plugins/simple/SimpleDatabasePlugin.cxx index 634268954..d0bae6c0c 100644 --- a/src/db/plugins/simple/SimpleDatabasePlugin.cxx +++ b/src/db/plugins/simple/SimpleDatabasePlugin.cxx @@ -436,7 +436,7 @@ SimpleDatabase::Mount(const char *local_uri, const char *storage_uri) std::string name(storage_uri); std::replace_if(name.begin(), name.end(), IsUnsafeChar, '_'); - const auto name_fs = AllocatedPath::FromUTF8Throw(name.c_str()); + const auto name_fs = AllocatedPath::FromUTF8Throw(name); #ifndef ENABLE_ZLIB constexpr bool compress = false; diff --git a/src/db/update/Walk.cxx b/src/db/update/Walk.cxx index ff55be1bc..a1d187933 100644 --- a/src/db/update/Walk.cxx +++ b/src/db/update/Walk.cxx @@ -81,7 +81,7 @@ UpdateWalk::RemoveExcludedFromDirectory(Directory &directory, directory.ForEachSongSafe([&](Song &song){ assert(&song.parent == &directory); - const auto name_fs = AllocatedPath::FromUTF8(song.filename.c_str()); + const auto name_fs = AllocatedPath::FromUTF8(song.filename); if (name_fs.IsNull() || exclude_list.Check(name_fs)) { editor.DeleteSong(directory, &song); modified = true; diff --git a/src/fs/AllocatedPath.cxx b/src/fs/AllocatedPath.cxx index 8f5d064aa..c2969580e 100644 --- a/src/fs/AllocatedPath.cxx +++ b/src/fs/AllocatedPath.cxx @@ -25,7 +25,7 @@ AllocatedPath::~AllocatedPath() noexcept = default; AllocatedPath -AllocatedPath::FromUTF8(const char *path_utf8) noexcept +AllocatedPath::FromUTF8(std::string_view path_utf8) noexcept { #ifdef FS_CHARSET_ALWAYS_UTF8 return FromFS(path_utf8); @@ -39,7 +39,7 @@ AllocatedPath::FromUTF8(const char *path_utf8) noexcept } AllocatedPath -AllocatedPath::FromUTF8Throw(const char *path_utf8) +AllocatedPath::FromUTF8Throw(std::string_view path_utf8) { #ifdef FS_CHARSET_ALWAYS_UTF8 return FromFS(path_utf8); diff --git a/src/fs/AllocatedPath.hxx b/src/fs/AllocatedPath.hxx index 5988acb79..11362ce1b 100644 --- a/src/fs/AllocatedPath.hxx +++ b/src/fs/AllocatedPath.hxx @@ -173,15 +173,18 @@ public: * Convert a UTF-8 C string to an #AllocatedPath instance. * Returns return a "nulled" instance on error. */ - gcc_pure gcc_nonnull_all - static AllocatedPath FromUTF8(const char *path_utf8) noexcept; + gcc_pure + static AllocatedPath FromUTF8(std::string_view path_utf8) noexcept; + + static AllocatedPath FromUTF8(const char *path_utf8) noexcept { + return FromUTF8(std::string_view(path_utf8)); + } /** * Convert a UTF-8 C string to an #AllocatedPath instance. * Throws a std::runtime_error on error. */ - gcc_nonnull_all - static AllocatedPath FromUTF8Throw(const char *path_utf8); + static AllocatedPath FromUTF8Throw(std::string_view path_utf8); /** * Copy an #AllocatedPath object. diff --git a/src/fs/Charset.cxx b/src/fs/Charset.cxx index 6b4ca9f0a..71cd96908 100644 --- a/src/fs/Charset.cxx +++ b/src/fs/Charset.cxx @@ -118,19 +118,14 @@ PathToUTF8(PathTraitsFS::const_pointer path_fs) #if defined(HAVE_FS_CHARSET) || defined(_WIN32) PathTraitsFS::string -PathFromUTF8(PathTraitsUTF8::const_pointer path_utf8) +PathFromUTF8(PathTraitsUTF8::string_view path_utf8) { -#if !CLANG_CHECK_VERSION(3,6) - /* disabled on clang due to -Wtautological-pointer-compare */ - assert(path_utf8 != nullptr); -#endif - #ifdef _WIN32 const auto buffer = MultiByteToWideChar(CP_UTF8, path_utf8); return PathTraitsFS::string(buffer); #else if (fs_converter == nullptr) - return path_utf8; + return PathTraitsFS::string(path_utf8); const auto buffer = fs_converter->FromUTF8(path_utf8); return PathTraitsFS::string(buffer); diff --git a/src/fs/Charset.hxx b/src/fs/Charset.hxx index 7d3ec46e1..f387176f9 100644 --- a/src/fs/Charset.hxx +++ b/src/fs/Charset.hxx @@ -53,8 +53,7 @@ PathToUTF8(PathTraitsFS::const_pointer path_fs); * * Throws std::runtime_error on error. */ -gcc_nonnull_all PathTraitsFS::string -PathFromUTF8(PathTraitsUTF8::const_pointer path_utf8); +PathFromUTF8(PathTraitsUTF8::string_view path_utf8); #endif diff --git a/src/storage/plugins/NfsStorage.cxx b/src/storage/plugins/NfsStorage.cxx index ffcbe13a0..f1bdfa139 100644 --- a/src/storage/plugins/NfsStorage.cxx +++ b/src/storage/plugins/NfsStorage.cxx @@ -228,7 +228,7 @@ UriToNfsPath(const char *_uri_utf8) /* assume UTF-8 when accessing NFS from Windows */ return uri_utf8; #else - return AllocatedPath::FromUTF8Throw(uri_utf8.c_str()).Steal(); + return AllocatedPath::FromUTF8Throw(uri_utf8).Steal(); #endif } -- cgit v1.2.3