|
@@ -61,6 +61,20 @@ public:
|
|
: std::moneypunct_byname<wchar_t, true>(nm, refs) {}
|
|
: std::moneypunct_byname<wchar_t, true>(nm, refs) {}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+#if defined(_CS_GNU_LIBC_VERSION)
|
|
|
|
+static bool glibc_version_less_than(char const* version) {
|
|
|
|
+ std::string test_version = std::string("glibc ") + version;
|
|
|
|
+
|
|
|
|
+ size_t n = confstr(_CS_GNU_LIBC_VERSION, nullptr, (size_t)0);
|
|
|
|
+ char *current_version = new char[n];
|
|
|
|
+ confstr(_CS_GNU_LIBC_VERSION, current_version, n);
|
|
|
|
+
|
|
|
|
+ bool result = strverscmp(current_version, test_version.c_str()) < 0;
|
|
|
|
+ delete[] current_version;
|
|
|
|
+ return result;
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
int main()
|
|
int main()
|
|
{
|
|
{
|
|
{
|
|
{
|
|
@@ -116,17 +130,14 @@ int main()
|
|
|
|
|
|
{
|
|
{
|
|
Fnf f(LOCALE_ru_RU_UTF_8, 1);
|
|
Fnf f(LOCALE_ru_RU_UTF_8, 1);
|
|
|
|
+#if defined(_CS_GNU_LIBC_VERSION)
|
|
// GLIBC <= 2.23 uses currency_symbol="<U0440><U0443><U0431>"
|
|
// GLIBC <= 2.23 uses currency_symbol="<U0440><U0443><U0431>"
|
|
// GLIBC >= 2.24 uses currency_symbol="<U20BD>"
|
|
// GLIBC >= 2.24 uses currency_symbol="<U20BD>"
|
|
// See also: http://www.fileformat.info/info/unicode/char/20bd/index.htm
|
|
// See also: http://www.fileformat.info/info/unicode/char/20bd/index.htm
|
|
-#if defined(TEST_GLIBC_PREREQ)
|
|
|
|
- #if TEST_GLIBC_PREREQ(2, 24)
|
|
|
|
- #define TEST_GLIBC_2_24_CURRENCY_SYMBOL
|
|
|
|
- #endif
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-#if defined(TEST_GLIBC_2_24_CURRENCY_SYMBOL)
|
|
|
|
- assert(f.curr_symbol() == " \u20BD");
|
|
|
|
|
|
+ if (!glibc_version_less_than("2.24"))
|
|
|
|
+ assert(f.curr_symbol() == " \u20BD");
|
|
|
|
+ else
|
|
|
|
+ assert(f.curr_symbol() == " \xD1\x80\xD1\x83\xD0\xB1");
|
|
#else
|
|
#else
|
|
assert(f.curr_symbol() == " \xD1\x80\xD1\x83\xD0\xB1");
|
|
assert(f.curr_symbol() == " \xD1\x80\xD1\x83\xD0\xB1");
|
|
#endif
|
|
#endif
|
|
@@ -137,8 +148,11 @@ int main()
|
|
}
|
|
}
|
|
{
|
|
{
|
|
Fwf f(LOCALE_ru_RU_UTF_8, 1);
|
|
Fwf f(LOCALE_ru_RU_UTF_8, 1);
|
|
-#if defined(TEST_GLIBC_2_24_CURRENCY_SYMBOL)
|
|
|
|
- assert(f.curr_symbol() == L" \u20BD");
|
|
|
|
|
|
+#if defined(_CS_GNU_LIBC_VERSION)
|
|
|
|
+ if (!glibc_version_less_than("2.24"))
|
|
|
|
+ assert(f.curr_symbol() == L" \u20BD");
|
|
|
|
+ else
|
|
|
|
+ assert(f.curr_symbol() == L" \x440\x443\x431");
|
|
#else
|
|
#else
|
|
assert(f.curr_symbol() == L" \x440\x443\x431");
|
|
assert(f.curr_symbol() == L" \x440\x443\x431");
|
|
#endif
|
|
#endif
|