Commit 1a808622 by Benjamin Kosnik Committed by Benjamin Kosnik

2001-10-26 Benjamin Kosnik <bkoz@redhat.com>

	libstdc++/4503
	* config/locale/codecvt_specializations_ieee_1003.1-200x.h
	(__enc_traits::~__enc_traits): Fix.
	(__enc_traits::_M_init): Add error checking.

From-SVN: r46532
parent f8c8c2ff
2001-10-26 Benjamin Kosnik <bkoz@redhat.com>
libstdc++/4503
* config/locale/codecvt_specializations_ieee_1003.1-200x.h
(__enc_traits::~__enc_traits): Fix.
(__enc_traits::_M_init): Add error checking.
2001-10-25 Benjamin Kosnik <bkoz@redhat.com> 2001-10-25 Benjamin Kosnik <bkoz@redhat.com>
libstdc++/4542 libstdc++/4542
......
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
: _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0) : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
{ {
// __intc_end = whatever we are using internally, which is // __intc_end = whatever we are using internally, which is
// UCS4 (linux) // UCS4 (linux, solaris)
// UCS2 == UNICODE (microsoft, java, aix, whatever...) // UCS2 == UNICODE (microsoft, java, aix, whatever...)
// XXX Currently don't know how to get this data from target system... // XXX Currently don't know how to get this data from target system...
strcpy(_M_int_enc, "UCS4"); strcpy(_M_int_enc, "UCS4");
...@@ -121,27 +121,32 @@ ...@@ -121,27 +121,32 @@
~__enc_traits() ~__enc_traits()
{ {
iconv_close(_M_in_desc); __desc_type __err = reinterpret_cast<iconv_t>(-1);
iconv_close(_M_out_desc); if (_M_in_desc && _M_in_desc != __err)
iconv_close(_M_in_desc);
if (_M_out_desc && _M_out_desc != __err)
iconv_close(_M_out_desc);
} }
// Initializes
void void
_M_init() _M_init()
{ {
__desc_type __err = reinterpret_cast<iconv_t>(-1);
_M_in_desc = iconv_open(_M_int_enc, _M_ext_enc); _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc);
if (_M_in_desc == __err)
__throw_runtime_error("creating iconv input descriptor failed.");
_M_out_desc = iconv_open(_M_ext_enc, _M_int_enc); _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc);
if (_M_out_desc == iconv_t(-1) || _M_in_desc == iconv_t(-1)) if (_M_out_desc == __err)
{ __throw_runtime_error("creating iconv output descriptor failed.");
// XXX Extended error checking.
}
} }
bool bool
_M_good() _M_good()
{ {
return _M_out_desc && _M_in_desc __desc_type __err = reinterpret_cast<iconv_t>(-1);
&& _M_out_desc != iconv_t(-1) && _M_in_desc != iconv_t(-1); bool __test = _M_in_desc && _M_in_desc != __err;
__test &= _M_out_desc && _M_out_desc != __err;
return __test;
} }
const __desc_type* const __desc_type*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment