lib/icu/CaseFold: disable broken strxfrm() callback

This commit is contained in:
Max Kellermann 2017-09-20 23:53:03 +02:00
parent 1295a1272a
commit 828f5f8384
2 changed files with 10 additions and 17 deletions

View File

@ -19,6 +19,9 @@
#include "config.h" #include "config.h"
#include "CaseFold.hxx" #include "CaseFold.hxx"
#ifdef HAVE_ICU_CASE_FOLD
#include "util/AllocatedString.hxx" #include "util/AllocatedString.hxx"
#ifdef HAVE_ICU #ifdef HAVE_ICU
@ -90,22 +93,10 @@ try {
return WideCharToMultiByte(CP_UTF8, buffer.get()); return WideCharToMultiByte(CP_UTF8, buffer.get());
#else #else
size_t size = strlen(src) + 1; #error not implemented
std::unique_ptr<char[]> buffer(new char[size]);
size_t nbytes = strxfrm(buffer.get(), src, size);
if (nbytes >= size) {
/* buffer too small - reallocate and try again */
buffer.reset();
size = nbytes + 1;
buffer.reset(new char[size]);
nbytes = strxfrm(buffer.get(), src, size);
}
assert(nbytes < size);
assert(buffer[nbytes] == 0);
return AllocatedString<>::Donate(buffer.release());
#endif #endif
} catch (const std::runtime_error &) { } catch (const std::runtime_error &) {
return AllocatedString<>::Duplicate(src); return AllocatedString<>::Duplicate(src);
} }
#endif /* HAVE_ICU_CASE_FOLD */

View File

@ -21,11 +21,11 @@
#define MPD_ICU_CASE_FOLD_HXX #define MPD_ICU_CASE_FOLD_HXX
#include "check.h" #include "check.h"
#include "Compiler.h"
#if defined(HAVE_ICU) || defined(_WIN32) #if defined(HAVE_ICU) || defined(_WIN32)
#define HAVE_ICU_CASE_FOLD #define HAVE_ICU_CASE_FOLD
#endif
#include "Compiler.h"
template<typename T> class AllocatedString; template<typename T> class AllocatedString;
@ -34,3 +34,5 @@ AllocatedString<char>
IcuCaseFold(const char *src) noexcept; IcuCaseFold(const char *src) noexcept;
#endif #endif
#endif