lib/icu/CaseFold: disable broken strxfrm() callback
This commit is contained in:
parent
1295a1272a
commit
828f5f8384
@ -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 */
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user