fs/Charset: return std::string from PathFromUTF8()

Don't expose pointer that requires the caller to invoke g_free(),
because that's GLib-only.
This commit is contained in:
Max Kellermann 2014-11-30 00:17:08 +01:00
parent 6987f2ba82
commit 4f80a129f1
4 changed files with 9 additions and 31 deletions

View File

@ -24,21 +24,6 @@
#include "util/Error.hxx" #include "util/Error.hxx"
#include "Compiler.h" #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 */ /* no inlining, please */
AllocatedPath::~AllocatedPath() {} AllocatedPath::~AllocatedPath() {}
@ -46,11 +31,7 @@ AllocatedPath
AllocatedPath::FromUTF8(const char *path_utf8) AllocatedPath::FromUTF8(const char *path_utf8)
{ {
#ifdef HAVE_FS_CHARSET #ifdef HAVE_FS_CHARSET
char *path = ::PathFromUTF8(path_utf8); return AllocatedPath(::PathFromUTF8(path_utf8));
if (path == nullptr)
return AllocatedPath::Null();
return AllocatedPath(Donate(), path);
#else #else
return FromFS(path_utf8); return FromFS(path_utf8);
#endif #endif

View File

@ -44,13 +44,6 @@ class AllocatedPath {
string value; string value;
struct Donate {};
/**
* Donate the allocated pointer to a new #AllocatedPath object.
*/
AllocatedPath(Donate, pointer _value);
AllocatedPath(const_pointer _value):value(_value) {} AllocatedPath(const_pointer _value):value(_value) {}
AllocatedPath(string &&_value):value(std::move(_value)) {} AllocatedPath(string &&_value):value(std::move(_value)) {}

View File

@ -157,13 +157,13 @@ PathToUTF8(const char *path_fs)
#ifdef HAVE_FS_CHARSET #ifdef HAVE_FS_CHARSET
char * std::string
PathFromUTF8(const char *path_utf8) PathFromUTF8(const char *path_utf8)
{ {
assert(path_utf8 != nullptr); assert(path_utf8 != nullptr);
if (fs_charset.empty()) if (fs_charset.empty())
return g_strdup(path_utf8); return path_utf8;
return g_convert(path_utf8, -1, return g_convert(path_utf8, -1,
fs_charset.c_str(), "utf-8", fs_charset.c_str(), "utf-8",

View File

@ -52,8 +52,12 @@ gcc_pure gcc_nonnull_all
std::string std::string
PathToUTF8(const char *path_fs); 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); PathFromUTF8(const char *path_utf8);
#endif #endif