aboutsummaryrefslogtreecommitdiffstats
path: root/src/fs/Charset.cxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2015-06-23 12:47:35 +0200
committerMax Kellermann <max@duempel.org>2015-06-23 13:20:11 +0200
commitaecfcaa8a2b646f6a2503ba5b2b647c89d53e405 (patch)
treef31092206740253f6a84e66df1bd2c2a71ec3660 /src/fs/Charset.cxx
parent61a3028788186c36708234b03a8eca8d5e009515 (diff)
downloadmpd-aecfcaa8a2b646f6a2503ba5b2b647c89d53e405.tar.gz
mpd-aecfcaa8a2b646f6a2503ba5b2b647c89d53e405.tar.xz
mpd-aecfcaa8a2b646f6a2503ba5b2b647c89d53e405.zip
lib/icu/Win32: wrappers for WideCharToMultiByte(), MultiByteToWideChar()
Diffstat (limited to 'src/fs/Charset.cxx')
-rw-r--r--src/fs/Charset.cxx36
1 files changed, 8 insertions, 28 deletions
diff --git a/src/fs/Charset.cxx b/src/fs/Charset.cxx
index 186670ff8..b478959d0 100644
--- a/src/fs/Charset.cxx
+++ b/src/fs/Charset.cxx
@@ -24,8 +24,10 @@
#include "Log.hxx"
#include "lib/icu/Converter.hxx"
#include "util/Error.hxx"
+#include "util/AllocatedString.hxx"
#ifdef WIN32
+#include "lib/icu/Win32.hxx"
#include <windows.h>
#endif
@@ -102,22 +104,11 @@ PathToUTF8(PathTraitsFS::const_pointer path_fs)
#endif
#ifdef WIN32
- int length = WideCharToMultiByte(CP_UTF8, 0, path_fs, -1, nullptr, 0,
- nullptr, nullptr);
- if (length <= 0)
+ const auto buffer = WideCharToMultiByte(CP_UTF8, path_fs);
+ if (buffer.IsNull())
return PathTraitsUTF8::string();
- char *buffer = new char[length];
- length = WideCharToMultiByte(CP_UTF8, 0, path_fs, -1, buffer, length,
- nullptr, nullptr);
- if (length <= 0) {
- delete[] buffer;
- return PathTraitsUTF8::string();
- }
-
- PathTraitsUTF8::string result(buffer);
- delete[] buffer;
- return FixSeparators(std::move(result));
+ return FixSeparators(PathTraitsUTF8::string(buffer.c_str()));
#else
#ifdef HAVE_FS_CHARSET
if (fs_converter == nullptr)
@@ -141,22 +132,11 @@ PathFromUTF8(PathTraitsUTF8::const_pointer path_utf8)
#endif
#ifdef WIN32
- int length = MultiByteToWideChar(CP_UTF8, 0, path_utf8, -1,
- nullptr, 0);
- if (length <= 0)
- return PathTraitsFS::string();
-
- wchar_t *buffer = new wchar_t[length];
- length = MultiByteToWideChar(CP_UTF8, 0, path_utf8, -1,
- buffer, length);
- if (length <= 0) {
- delete[] buffer;
+ const auto buffer = MultiByteToWideChar(CP_UTF8, path_utf8);
+ if (buffer.IsNull())
return PathTraitsFS::string();
- }
- PathTraitsFS::string result(buffer);
- delete[] buffer;
- return std::move(result);
+ return PathTraitsFS::string(buffer.c_str());
#else
if (fs_converter == nullptr)
return path_utf8;