diff options
author | Max Kellermann <max@duempel.org> | 2015-06-25 22:43:55 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-06-25 23:44:16 +0200 |
commit | 8d11577ff2b7caf846a31cbb57b2cf9eb3515961 (patch) | |
tree | 8e1173e9bdb131ddba5e5166b96ee4681bc00d53 /src/lib/icu/Converter.cxx | |
parent | 037d1d9ad14969947b1a9456dc716b6a22021d29 (diff) | |
download | mpd-8d11577ff2b7caf846a31cbb57b2cf9eb3515961.tar.gz mpd-8d11577ff2b7caf846a31cbb57b2cf9eb3515961.tar.xz mpd-8d11577ff2b7caf846a31cbb57b2cf9eb3515961.zip |
lib/icu/{Converter,Collate}: return AllocatedString
Diffstat (limited to 'src/lib/icu/Converter.cxx')
-rw-r--r-- | src/lib/icu/Converter.cxx | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/src/lib/icu/Converter.cxx b/src/lib/icu/Converter.cxx index ea10a9a03..fad1f4d66 100644 --- a/src/lib/icu/Converter.cxx +++ b/src/lib/icu/Converter.cxx @@ -22,6 +22,7 @@ #include "Error.hxx" #include "util/Error.hxx" #include "util/Macros.hxx" +#include "util/AllocatedString.hxx" #include "util/WritableBuffer.hxx" #include "util/ConstBuffer.hxx" @@ -80,7 +81,7 @@ IcuConverter::Create(const char *charset, Error &error) #ifdef HAVE_ICU #elif defined(HAVE_GLIB) -static std::string +static AllocatedString<char> DoConvert(GIConv conv, const char *src) { // TODO: dynamic buffer? @@ -93,14 +94,14 @@ DoConvert(GIConv conv, const char *src) size_t n = g_iconv(conv, &in, &in_left, &out, &out_left); if (n == static_cast<size_t>(-1) || in_left > 0) - return std::string(); + return nullptr; - return std::string(buffer, sizeof(buffer) - out_left); + return AllocatedString::Duplicate(buffer, sizeof(buffer) - out_left); } #endif -std::string +AllocatedString<char> IcuConverter::ToUTF8(const char *s) const { #ifdef HAVE_ICU @@ -118,23 +119,16 @@ IcuConverter::ToUTF8(const char *s) const &source, source + strlen(source), nullptr, true, &code); if (code != U_ZERO_ERROR) - return std::string(); + return nullptr; const size_t target_length = target - buffer; - const auto u = UCharToUTF8({buffer, target_length}); - if (u.IsNull()) - return std::string(); - - std::string result(u.data, u.size); - delete[] u.data; - return result; - + return UCharToUTF8({buffer, target_length}); #elif defined(HAVE_GLIB) return DoConvert(to_utf8, s); #endif } -std::string +AllocatedString<char> IcuConverter::FromUTF8(const char *s) const { #ifdef HAVE_ICU @@ -142,7 +136,7 @@ IcuConverter::FromUTF8(const char *s) const const auto u = UCharFromUTF8(s); if (u.IsNull()) - return std::string(); + return nullptr; ucnv_resetFromUnicode(converter); @@ -157,9 +151,9 @@ IcuConverter::FromUTF8(const char *s) const delete[] u.data; if (code != U_ZERO_ERROR) - return std::string(); + return nullptr; - return std::string(buffer, target); + return AllocatedString<>::Duplicate(buffer, target); #elif defined(HAVE_GLIB) return DoConvert(from_utf8, s); |