diff options
-rw-r--r-- | src/ExcludeList.cxx | 6 | ||||
-rw-r--r-- | src/fs/Path.cxx | 12 | ||||
-rw-r--r-- | src/fs/Path.hxx | 13 |
3 files changed, 20 insertions, 11 deletions
diff --git a/src/ExcludeList.cxx b/src/ExcludeList.cxx index 69a04d5a8..50cdc1c0e 100644 --- a/src/ExcludeList.cxx +++ b/src/ExcludeList.cxx @@ -37,10 +37,10 @@ ExcludeList::LoadFile(const Path &path_fs) FILE *file = fopen(path_fs.c_str(), "r"); if (file == NULL) { if (errno != ENOENT) { - char *path_utf8 = path_fs.ToUTF8(); + const char *msg = g_strerror(errno); + const auto path_utf8 = path_fs.ToUTF8(); g_debug("Failed to open %s: %s", - path_utf8, g_strerror(errno)); - g_free(path_utf8); + path_utf8.c_str(), msg); } return false; diff --git a/src/fs/Path.cxx b/src/fs/Path.cxx index 80b41cbaa..393cb3038 100644 --- a/src/fs/Path.cxx +++ b/src/fs/Path.cxx @@ -38,6 +38,18 @@ static char *fs_charset; +std::string Path::ToUTF8() const +{ + if (value == nullptr) + return std::string(); + char *path_utf8 = fs_charset_to_utf8(value); + if (path_utf8 == nullptr) + return std::string(); + std::string result = value; + g_free(path_utf8); + return value; +} + char * fs_charset_to_utf8(const char *path_fs) { diff --git a/src/fs/Path.hxx b/src/fs/Path.hxx index 24f1d5e19..926b6eafb 100644 --- a/src/fs/Path.hxx +++ b/src/fs/Path.hxx @@ -26,6 +26,7 @@ #include <glib.h> #include <algorithm> +#include <string> #include <assert.h> #include <string.h> @@ -250,15 +251,11 @@ public: } /** - * Convert the path to UTF-8. The caller is responsible for - * freeing the return value with g_free(). Returns nullptr on - * error. + * Convert the path to UTF-8. + * Returns empty string on error or if this instance is "nulled" + * (#IsNull returns true). */ - char *ToUTF8() const { - return value != nullptr - ? fs_charset_to_utf8(value) - : nullptr; - } + std::string ToUTF8() const; }; #endif |