[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