From 4f80a129f13daae72e0463923250534e0d437026 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Sun, 30 Nov 2014 00:17:08 +0100
Subject: [PATCH] fs/Charset: return std::string from PathFromUTF8()

Don't expose pointer that requires the caller to invoke g_free(),
because that's GLib-only.
---
 src/fs/AllocatedPath.cxx | 21 +--------------------
 src/fs/AllocatedPath.hxx |  7 -------
 src/fs/Charset.cxx       |  4 ++--
 src/fs/Charset.hxx       |  8 ++++++--
 4 files changed, 9 insertions(+), 31 deletions(-)

diff --git a/src/fs/AllocatedPath.cxx b/src/fs/AllocatedPath.cxx
index 65dcff56f..bd026db74 100644
--- a/src/fs/AllocatedPath.cxx
+++ b/src/fs/AllocatedPath.cxx
@@ -24,21 +24,6 @@
 #include "util/Error.hxx"
 #include "Compiler.h"
 
-#ifdef HAVE_GLIB
-#include <glib.h>
-#endif
-
-#include <string.h>
-
-#ifdef HAVE_GLIB
-
-inline AllocatedPath::AllocatedPath(Donate, pointer _value)
-	:value(_value) {
-	g_free(_value);
-}
-
-#endif
-
 /* no inlining, please */
 AllocatedPath::~AllocatedPath() {}
 
@@ -46,11 +31,7 @@ AllocatedPath
 AllocatedPath::FromUTF8(const char *path_utf8)
 {
 #ifdef HAVE_FS_CHARSET
-	char *path = ::PathFromUTF8(path_utf8);
-	if (path == nullptr)
-		return AllocatedPath::Null();
-
-	return AllocatedPath(Donate(), path);
+	return AllocatedPath(::PathFromUTF8(path_utf8));
 #else
 	return FromFS(path_utf8);
 #endif
diff --git a/src/fs/AllocatedPath.hxx b/src/fs/AllocatedPath.hxx
index c345470c8..73b6891ad 100644
--- a/src/fs/AllocatedPath.hxx
+++ b/src/fs/AllocatedPath.hxx
@@ -44,13 +44,6 @@ class AllocatedPath {
 
 	string value;
 
-	struct Donate {};
-
-	/**
-	 * Donate the allocated pointer to a new #AllocatedPath object.
-	 */
-	AllocatedPath(Donate, pointer _value);
-
 	AllocatedPath(const_pointer _value):value(_value) {}
 
 	AllocatedPath(string &&_value):value(std::move(_value)) {}
diff --git a/src/fs/Charset.cxx b/src/fs/Charset.cxx
index c98170c24..fb7313a35 100644
--- a/src/fs/Charset.cxx
+++ b/src/fs/Charset.cxx
@@ -157,13 +157,13 @@ PathToUTF8(const char *path_fs)
 
 #ifdef HAVE_FS_CHARSET
 
-char *
+std::string
 PathFromUTF8(const char *path_utf8)
 {
 	assert(path_utf8 != nullptr);
 
 	if (fs_charset.empty())
-		return g_strdup(path_utf8);
+		return path_utf8;
 
 	return g_convert(path_utf8, -1,
 			 fs_charset.c_str(), "utf-8",
diff --git a/src/fs/Charset.hxx b/src/fs/Charset.hxx
index 7a5193576..80f510ce0 100644
--- a/src/fs/Charset.hxx
+++ b/src/fs/Charset.hxx
@@ -52,8 +52,12 @@ gcc_pure gcc_nonnull_all
 std::string
 PathToUTF8(const char *path_fs);
 
-gcc_malloc gcc_nonnull_all
-char *
+/**
+ * Convert the path from UTF-8.
+ * Returns empty string on error.
+ */
+gcc_pure gcc_nonnull_all
+std::string
 PathFromUTF8(const char *path_utf8);
 
 #endif