This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi, This patch allows basic_filebuf::underflow to handle stateless variable-width encodings (such as UTF-8) correctly. codecvt_base::partial is handled by keeping a permanent buffer of unconverted bytes (_M_ext_buf). Bytes that are not converted during one call to underflow are converted during the next one. The external buffer is delimited by three pointers; _M_ext_buf, _M_ext_next and _M_ext_end. The range [_M_ext_buf, _M_ext_next) corresponds to [ebase(), egptr()) and the range [_M_ext_next, _M_ext_end) contains bytes that have not been converted. The position in the external buffer that matches eptr() is thus _M_ext_buf + codecvt::length(state, _M_ext_buf, _M_ext_next, eptr() - ebase()) This should make it easy to implement seekoff. Tested on i686-pc-linux-gnu. Regards, Petur 2003-09-04 Petur Runolfsson <peturr02@ru.is> PR libstdc++/9028 * include/bits/fstream.tcc (basic_filebuf::_M_destroy_internal_buffer): Destroy _M_ext_buf. (basic_filebuf::basic_filebuf): Initialize _M_ext_buf, _M_ext_buf_size, _M_ext_next and _M_ext_end. (basic_filebuf::underflow): Handle variable-width stateless encodings (codecvt::encoding() == 0), including UTF-8. * include/std/std_fstream.h (basic_filebuf): Declare _M_ext_buf, _M_ext_buf_size, _M_ext_next, _M_ext_end. * testsuite/27_io/basic_filebuf/underflow/wchar_t/1.cc: New test. * testsuite/27_io/basic_filebuf/underflow/wchar_t/2.cc: New test. * testsuite/27_io/basic_filebuf/underflow/wchar_t/3.cc: New test. * testsuite/27_io/basic_filebuf/underflow/wchar_t/4.cc: New test. * testsuite/27_io/basic_filebuf/underflow/wchar_t/5.cc: New test. * testsuite/27_io/objects/wchar_t/12.cc: New test. * testsuite/27_io/objects/wchar_t/13.cc: New test.
Attachment:
utf8.diff
Description: utf8.diff
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |