locale_classes.h (locale::_Impl): Change _M_names from fixed size array.
2003-04-27 Benjamin Kosnik <bkoz@redhat.com> * include/bits/locale_classes.h (locale::_Impl): Change _M_names from fixed size array. (locale): Change _S_categories as well. Formatting tweaks. * include/bits/locale_facets.tcc: Tweak. * config/locale/gnu/c_locale.cc: Assign _S_categories. * config/locale/generic/c_locale.cc: Same. * src/locale.cc: Tweak. * src/globals.cc: Change facet_name to name_vec, add names_c. * src/localename.cc: Use them. (locale::_Impl::~_Impl): Destroy _M_names. (locale::_Impl::_Impl): Create _M_names. From-SVN: r66147
This commit is contained in:
parent
0c227849f6
commit
73c4dcc675
|
@ -1,3 +1,18 @@
|
||||||
|
2003-04-27 Benjamin Kosnik <bkoz@redhat.com>
|
||||||
|
|
||||||
|
* include/bits/locale_classes.h (locale::_Impl): Change _M_names
|
||||||
|
from fixed size array.
|
||||||
|
(locale): Change _S_categories as well.
|
||||||
|
Formatting tweaks.
|
||||||
|
* include/bits/locale_facets.tcc: Tweak.
|
||||||
|
* config/locale/gnu/c_locale.cc: Assign _S_categories.
|
||||||
|
* config/locale/generic/c_locale.cc: Same.
|
||||||
|
* src/locale.cc: Tweak.
|
||||||
|
* src/globals.cc: Change facet_name to name_vec, add names_c.
|
||||||
|
* src/localename.cc: Use them.
|
||||||
|
(locale::_Impl::~_Impl): Destroy _M_names.
|
||||||
|
(locale::_Impl::_Impl): Create _M_names.
|
||||||
|
|
||||||
2003-04-27 Andreas Schwab <schwab@suse.de>
|
2003-04-27 Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
* config/locale/ieee_1003.1-2001/codecvt_specializations.h
|
* config/locale/ieee_1003.1-2001/codecvt_specializations.h
|
||||||
|
|
|
@ -227,8 +227,11 @@ namespace std
|
||||||
__c_locale
|
__c_locale
|
||||||
locale::facet::_S_clone_c_locale(__c_locale&)
|
locale::facet::_S_clone_c_locale(__c_locale&)
|
||||||
{ return __c_locale(); }
|
{ return __c_locale(); }
|
||||||
|
} // namespace std
|
||||||
|
|
||||||
const char* locale::_S_categories[_S_categories_size] =
|
namespace __gnu_cxx
|
||||||
|
{
|
||||||
|
const char* category_names[6 + _GLIBCPP_NUM_CATEGORIES] =
|
||||||
{
|
{
|
||||||
"LC_CTYPE",
|
"LC_CTYPE",
|
||||||
"LC_NUMERIC",
|
"LC_NUMERIC",
|
||||||
|
@ -237,4 +240,9 @@ namespace std
|
||||||
"LC_MONETARY",
|
"LC_MONETARY",
|
||||||
"LC_MESSAGES"
|
"LC_MESSAGES"
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
const char** locale::_S_categories = __gnu_cxx::category_names;
|
||||||
} // namespace std
|
} // namespace std
|
||||||
|
|
|
@ -186,8 +186,11 @@ namespace std
|
||||||
__c_locale
|
__c_locale
|
||||||
locale::facet::_S_clone_c_locale(__c_locale& __cloc)
|
locale::facet::_S_clone_c_locale(__c_locale& __cloc)
|
||||||
{ return __duplocale(__cloc); }
|
{ return __duplocale(__cloc); }
|
||||||
|
} // namespace std
|
||||||
|
|
||||||
const char* locale::_S_categories[_S_categories_size] =
|
namespace __gnu_cxx
|
||||||
|
{
|
||||||
|
const char* category_names[6 + _GLIBCPP_NUM_CATEGORIES] =
|
||||||
{
|
{
|
||||||
"LC_CTYPE",
|
"LC_CTYPE",
|
||||||
"LC_NUMERIC",
|
"LC_NUMERIC",
|
||||||
|
@ -202,4 +205,9 @@ namespace std
|
||||||
"LC_MEASUREMENT",
|
"LC_MEASUREMENT",
|
||||||
"LC_IDENTIFICATION"
|
"LC_IDENTIFICATION"
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
const char** locale::_S_categories = __gnu_cxx::category_names;
|
||||||
} // namespace std
|
} // namespace std
|
||||||
|
|
|
@ -157,7 +157,7 @@ namespace std
|
||||||
// NB: locale::global() has to know how to modify all the
|
// NB: locale::global() has to know how to modify all the
|
||||||
// underlying categories, not just the ones required by the C++
|
// underlying categories, not just the ones required by the C++
|
||||||
// standard.
|
// standard.
|
||||||
static const char* _S_categories[_S_categories_size];
|
static const char** _S_categories;
|
||||||
|
|
||||||
explicit
|
explicit
|
||||||
locale(_Impl*) throw();
|
locale(_Impl*) throw();
|
||||||
|
@ -198,7 +198,7 @@ namespace std
|
||||||
_Atomic_word _M_references;
|
_Atomic_word _M_references;
|
||||||
const facet** _M_facets;
|
const facet** _M_facets;
|
||||||
size_t _M_facets_size;
|
size_t _M_facets_size;
|
||||||
char* _M_names[_S_categories_size];
|
char** _M_names;
|
||||||
static const locale::id* const _S_id_ctype[];
|
static const locale::id* const _S_id_ctype[];
|
||||||
static const locale::id* const _S_id_numeric[];
|
static const locale::id* const _S_id_numeric[];
|
||||||
static const locale::id* const _S_id_collate[];
|
static const locale::id* const _S_id_collate[];
|
||||||
|
@ -266,7 +266,7 @@ namespace std
|
||||||
{
|
{
|
||||||
_M_impl = new _Impl(*__other._M_impl, 1);
|
_M_impl = new _Impl(*__other._M_impl, 1);
|
||||||
_M_impl->_M_install_facet(&_Facet::id, __f);
|
_M_impl->_M_install_facet(&_Facet::id, __f);
|
||||||
for (size_t __i = 0; __i < _S_categories_size ; ++__i)
|
for (size_t __i = 0; __i < _S_categories_size; ++__i)
|
||||||
{
|
{
|
||||||
delete [] _M_impl->_M_names[__i];
|
delete [] _M_impl->_M_names[__i];
|
||||||
char* __new = new char[2];
|
char* __new = new char[2];
|
||||||
|
|
|
@ -2279,7 +2279,7 @@ namespace std
|
||||||
}
|
}
|
||||||
if (__builtin_expect(has_facet<ctype<_CharT> >(__loc), true))
|
if (__builtin_expect(has_facet<ctype<_CharT> >(__loc), true))
|
||||||
{
|
{
|
||||||
const ctype<_CharT>& __ct = use_facet< ctype<_CharT> >(__loc);
|
const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc);
|
||||||
__ct.widen(__num_base::_S_atoms_out,
|
__ct.widen(__num_base::_S_atoms_out,
|
||||||
__num_base::_S_atoms_out + __num_base::_S_end,
|
__num_base::_S_atoms_out + __num_base::_S_end,
|
||||||
_M_literals);
|
_M_literals);
|
||||||
|
|
|
@ -95,10 +95,6 @@ namespace __gnu_cxx
|
||||||
fake_wfilebuf buf_wcerr;
|
fake_wfilebuf buf_wcerr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef char fake_facet_name[sizeof(char*)]
|
|
||||||
__attribute__ ((aligned(__alignof__(char*))));
|
|
||||||
fake_facet_name facet_name[6 + _GLIBCPP_NUM_CATEGORIES];
|
|
||||||
|
|
||||||
typedef char fake_locale_Impl[sizeof(locale::_Impl)]
|
typedef char fake_locale_Impl[sizeof(locale::_Impl)]
|
||||||
__attribute__ ((aligned(__alignof__(locale::_Impl))));
|
__attribute__ ((aligned(__alignof__(locale::_Impl))));
|
||||||
fake_locale_Impl c_locale_impl;
|
fake_locale_Impl c_locale_impl;
|
||||||
|
@ -107,6 +103,14 @@ namespace __gnu_cxx
|
||||||
__attribute__ ((aligned(__alignof__(locale))));
|
__attribute__ ((aligned(__alignof__(locale))));
|
||||||
fake_locale c_locale;
|
fake_locale c_locale;
|
||||||
|
|
||||||
|
typedef char fake_name_vec[sizeof(char*)]
|
||||||
|
__attribute__ ((aligned(__alignof__(char*))));
|
||||||
|
fake_name_vec name_vec[6 + _GLIBCPP_NUM_CATEGORIES];
|
||||||
|
|
||||||
|
typedef char fake_names[sizeof(char[2])]
|
||||||
|
__attribute__ ((aligned(__alignof__(char[2]))));
|
||||||
|
fake_names name_c[6 + _GLIBCPP_NUM_CATEGORIES];
|
||||||
|
|
||||||
typedef char fake_facet_vec[sizeof(locale::facet*)]
|
typedef char fake_facet_vec[sizeof(locale::facet*)]
|
||||||
__attribute__ ((aligned(__alignof__(locale::facet*))));
|
__attribute__ ((aligned(__alignof__(locale::facet*))));
|
||||||
fake_facet_vec facet_vec[_GLIBCPP_NUM_FACETS];
|
fake_facet_vec facet_vec[_GLIBCPP_NUM_FACETS];
|
||||||
|
|
|
@ -207,7 +207,7 @@ namespace std
|
||||||
// different from LANG.
|
// different from LANG.
|
||||||
size_t __i = 0;
|
size_t __i = 0;
|
||||||
if (strcmp(__res, "C") == 0)
|
if (strcmp(__res, "C") == 0)
|
||||||
for (; __i < _S_categories_size ; ++__i)
|
for (; __i < _S_categories_size; ++__i)
|
||||||
{
|
{
|
||||||
__env = getenv(_S_categories[__i]);
|
__env = getenv(_S_categories[__i]);
|
||||||
if (__env && strcmp(__env, "") != 0
|
if (__env && strcmp(__env, "") != 0
|
||||||
|
@ -216,7 +216,7 @@ namespace std
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
for (; __i < _S_categories_size ; ++__i)
|
for (; __i < _S_categories_size; ++__i)
|
||||||
{
|
{
|
||||||
__env = getenv(_S_categories[__i]);
|
__env = getenv(_S_categories[__i]);
|
||||||
if (__env && strcmp(__env, "") != 0
|
if (__env && strcmp(__env, "") != 0
|
||||||
|
@ -241,7 +241,7 @@ namespace std
|
||||||
__str += __env;
|
__str += __env;
|
||||||
__str += ';';
|
__str += ';';
|
||||||
__i++;
|
__i++;
|
||||||
for (; __i < _S_categories_size ; ++__i)
|
for (; __i < _S_categories_size; ++__i)
|
||||||
{
|
{
|
||||||
__env = getenv(_S_categories[__i]);
|
__env = getenv(_S_categories[__i]);
|
||||||
if (!__env || strcmp(__env, "") == 0)
|
if (!__env || strcmp(__env, "") == 0)
|
||||||
|
@ -345,7 +345,7 @@ namespace std
|
||||||
__ret += _S_categories[0];
|
__ret += _S_categories[0];
|
||||||
__ret += '=';
|
__ret += '=';
|
||||||
__ret += _M_impl->_M_names[0];
|
__ret += _M_impl->_M_names[0];
|
||||||
for (size_t __i = 1; __i < _S_categories_size ; ++__i)
|
for (size_t __i = 1; __i < _S_categories_size; ++__i)
|
||||||
{
|
{
|
||||||
__ret += ';';
|
__ret += ';';
|
||||||
__ret += _S_categories[__i];
|
__ret += _S_categories[__i];
|
||||||
|
|
|
@ -36,7 +36,8 @@ namespace __gnu_cxx
|
||||||
|
|
||||||
// Defined in globals.cc.
|
// Defined in globals.cc.
|
||||||
extern locale::facet* facet_vec[_GLIBCPP_NUM_FACETS];
|
extern locale::facet* facet_vec[_GLIBCPP_NUM_FACETS];
|
||||||
extern char* facet_name[6 + _GLIBCPP_NUM_CATEGORIES];
|
extern char* name_vec[6 + _GLIBCPP_NUM_CATEGORIES];
|
||||||
|
extern char name_c[6 + _GLIBCPP_NUM_CATEGORIES][2];
|
||||||
|
|
||||||
extern std::ctype<char> ctype_c;
|
extern std::ctype<char> ctype_c;
|
||||||
extern std::collate<char> collate_c;
|
extern std::collate<char> collate_c;
|
||||||
|
@ -82,8 +83,9 @@ namespace std
|
||||||
_M_facets[__i]->_M_remove_reference();
|
_M_facets[__i]->_M_remove_reference();
|
||||||
delete [] _M_facets;
|
delete [] _M_facets;
|
||||||
|
|
||||||
for (size_t __i = 0; __i < _S_categories_size ; ++__i)
|
for (size_t __i = 0; __i < _S_categories_size; ++__i)
|
||||||
delete [] _M_names[__i];
|
delete [] _M_names[__i];
|
||||||
|
delete [] _M_names;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clone existing _Impl object.
|
// Clone existing _Impl object.
|
||||||
|
@ -108,7 +110,17 @@ namespace std
|
||||||
if (_M_facets[__i])
|
if (_M_facets[__i])
|
||||||
_M_facets[__i]->_M_add_reference();
|
_M_facets[__i]->_M_add_reference();
|
||||||
}
|
}
|
||||||
for (size_t __i = 0; __i < _S_categories_size ; ++__i)
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_M_names = new char*[_S_categories_size];
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
delete [] _M_names;
|
||||||
|
__throw_exception_again;
|
||||||
|
}
|
||||||
|
for (size_t __i = 0; __i < _S_categories_size; ++__i)
|
||||||
{
|
{
|
||||||
char* __new = new char[strlen(__imp._M_names[__i]) + 1];
|
char* __new = new char[strlen(__imp._M_names[__i]) + 1];
|
||||||
strcpy(__new, __imp._M_names[__i]);
|
strcpy(__new, __imp._M_names[__i]);
|
||||||
|
@ -139,10 +151,19 @@ namespace std
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name all the categories.
|
// Name all the categories.
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_M_names = new char*[_S_categories_size];
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
delete [] _M_names;
|
||||||
|
__throw_exception_again;
|
||||||
|
}
|
||||||
size_t __len = strlen(__s);
|
size_t __len = strlen(__s);
|
||||||
if (!strchr(__s, ';'))
|
if (!strchr(__s, ';'))
|
||||||
{
|
{
|
||||||
for (size_t __i = 0; __i < _S_categories_size ; ++__i)
|
for (size_t __i = 0; __i < _S_categories_size; ++__i)
|
||||||
{
|
{
|
||||||
_M_names[__i] = new char[__len + 1];
|
_M_names[__i] = new char[__len + 1];
|
||||||
strcpy(_M_names[__i], __s);
|
strcpy(_M_names[__i], __s);
|
||||||
|
@ -151,7 +172,7 @@ namespace std
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const char* __beg = __s;
|
const char* __beg = __s;
|
||||||
for (size_t __i = 0; __i < _S_categories_size ; ++__i)
|
for (size_t __i = 0; __i < _S_categories_size; ++__i)
|
||||||
{
|
{
|
||||||
__beg = strchr(__beg, '=') + 1;
|
__beg = strchr(__beg, '=') + 1;
|
||||||
const char* __end = strchr(__beg, ';');
|
const char* __end = strchr(__beg, ';');
|
||||||
|
@ -210,14 +231,15 @@ namespace std
|
||||||
locale::facet::_S_create_c_locale(locale::facet::_S_c_locale,
|
locale::facet::_S_create_c_locale(locale::facet::_S_c_locale,
|
||||||
locale::facet::_S_c_name);
|
locale::facet::_S_c_name);
|
||||||
|
|
||||||
_M_facets = new(&facet_vec) const facet*[_M_facets_size];
|
_M_facets = new (&facet_vec) const facet*[_M_facets_size];
|
||||||
for (size_t __i = 0; __i < _M_facets_size; ++__i)
|
for (size_t __i = 0; __i < _M_facets_size; ++__i)
|
||||||
_M_facets[__i] = 0;
|
_M_facets[__i] = 0;
|
||||||
|
|
||||||
// Name all the categories.
|
// Name all the categories.
|
||||||
for (size_t __i = 0; __i < _S_categories_size ; ++__i)
|
_M_names = new (&name_vec) char*[_S_categories_size];
|
||||||
|
for (size_t __i = 0; __i < _S_categories_size; ++__i)
|
||||||
{
|
{
|
||||||
_M_names[__i] = new (&facet_name[__i]) char[2];
|
_M_names[__i] = new (&name_c[__i]) char[2];
|
||||||
strcpy(_M_names[__i], locale::facet::_S_c_name);
|
strcpy(_M_names[__i], locale::facet::_S_c_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue