[v3] Fix initialization of _M_grouping
Paolo Carlini
pcarlini@unitus.it
Wed Jan 30 13:16:00 GMT 2002
Hi,
this patch fixes the inizialization od _M_grouping for locales which have
_M_thousands_sep == '\0' (e.g., it_IT, fr_FR, many others). Tested
i686-pc-linux-gnu, reviewed by Benjamin Kosnik, Ulrich Drepper and Nathan Myers
(!) and committed.
Cheers,
Paolo.
//////////
2002-01-30 Paolo Carlini <pcarlini@unitus.it>
* config/locale/numpunct_members_gnu.cc
(numpunct<char, wchar_t>::_M_initialize_numpunct()):
Fix initialization of _M_grouping for locales which have
_M_thousands_sep == '\0'(L'\0', respectively).
* testsuite/22_locale/numpunct_byname.cc (test02): Add test.
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/config/locale/numpunct_members_gnu.cc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- gcc/libstdc++-v3/config/locale/numpunct_members_gnu.cc 2002/01/22
23:08:56 1.3
+++ gcc/libstdc++-v3/config/locale/numpunct_members_gnu.cc 2002/01/30
21:00:40 1.4
@@ -53,7 +53,11 @@
// Named locale.
_M_decimal_point = *(__nl_langinfo_l(RADIXCHAR, __cloc));
_M_thousands_sep = *(__nl_langinfo_l(THOUSEP, __cloc));
- _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
+ // Check for NUL, which implies no grouping.
+ if (_M_thousands_sep == '\0')
+ _M_grouping = "";
+ else
+ _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
}
// NB: There is no way to extact this info from posix locales.
// _M_truename = __nl_langinfo_l(YESSTR, __cloc);
@@ -79,7 +83,10 @@
// Named locale.
_M_decimal_point = static_cast<wchar_t>(((union { const char *__s;
unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC,
__cloc)}).__w);
_M_thousands_sep = static_cast<wchar_t>(((union { const char *__s;
unsigned int __w; }){ __s: __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC,
__cloc)}).__w);
- _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
+ if (_M_thousands_sep == L'\0')
+ _M_grouping = "";
+ else
+ _M_grouping = __nl_langinfo_l(GROUPING, __cloc);
}
// NB: There is no way to extact this info from posix locales.
// _M_truename = __nl_langinfo_l(YESSTR, __cloc);
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/testsuite/22_locale/numpunct_byname.cc,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- gcc/libstdc++-v3/testsuite/22_locale/numpunct_byname.cc 2001/08/24
04:11:23 1.4
+++ gcc/libstdc++-v3/testsuite/22_locale/numpunct_byname.cc 2002/01/30
21:00:40 1.5
@@ -72,9 +72,26 @@
VERIFY( dp1 != dp3 );
}
+void test02()
+{
+ using namespace std;
+
+ bool test = true;
+
+ locale loc_it("it_IT");
+
+ const numpunct<char>& nump_it = use_facet<numpunct<char> >(loc_it);
+
+ string g = nump_it.grouping();
+
+ VERIFY( g == "" );
+}
+
+
int main()
{
test01();
+ test02();
return 0;
}
More information about the Gcc-patches
mailing list