mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
Redefine _IO_iconv_t to store a single gconv step pointer [BZ #25097]
libio can only deal with gconv conversions which consist of a single step. Not using __gconv_info simplifies the data structures somewhat. This eliminates a new GCC 10 warning about subscribing an inner zero-length array. Tested on x86_64-linux-gnu with mainline GCC. Built with build-many-glibcs.py, also with mainline GCC. Due to GCC PR 92039, there are failures left on 32-bit architectures with float128 support. Change-Id: I8b4c489b619a53154712ff32e1b6f13bb92d4203
This commit is contained in:
@ -331,23 +331,19 @@ _IO_new_file_fopen (FILE *fp, const char *filename, const char *mode,
|
||||
|
||||
cc = fp->_codecvt = &fp->_wide_data->_codecvt;
|
||||
|
||||
cc->__cd_in.__cd.__nsteps = fcts.towc_nsteps;
|
||||
cc->__cd_in.__cd.__steps = fcts.towc;
|
||||
cc->__cd_in.step = fcts.towc;
|
||||
|
||||
cc->__cd_in.__cd.__data[0].__invocation_counter = 0;
|
||||
cc->__cd_in.__cd.__data[0].__internal_use = 1;
|
||||
cc->__cd_in.__cd.__data[0].__flags = __GCONV_IS_LAST;
|
||||
cc->__cd_in.__cd.__data[0].__statep = &result->_wide_data->_IO_state;
|
||||
cc->__cd_in.step_data.__invocation_counter = 0;
|
||||
cc->__cd_in.step_data.__internal_use = 1;
|
||||
cc->__cd_in.step_data.__flags = __GCONV_IS_LAST;
|
||||
cc->__cd_in.step_data.__statep = &result->_wide_data->_IO_state;
|
||||
|
||||
cc->__cd_out.__cd.__nsteps = fcts.tomb_nsteps;
|
||||
cc->__cd_out.__cd.__steps = fcts.tomb;
|
||||
cc->__cd_out.step = fcts.tomb;
|
||||
|
||||
cc->__cd_out.__cd.__data[0].__invocation_counter = 0;
|
||||
cc->__cd_out.__cd.__data[0].__internal_use = 1;
|
||||
cc->__cd_out.__cd.__data[0].__flags
|
||||
= __GCONV_IS_LAST | __GCONV_TRANSLIT;
|
||||
cc->__cd_out.__cd.__data[0].__statep =
|
||||
&result->_wide_data->_IO_state;
|
||||
cc->__cd_out.step_data.__invocation_counter = 0;
|
||||
cc->__cd_out.step_data.__internal_use = 1;
|
||||
cc->__cd_out.step_data.__flags = __GCONV_IS_LAST | __GCONV_TRANSLIT;
|
||||
cc->__cd_out.step_data.__statep = &result->_wide_data->_IO_state;
|
||||
|
||||
/* From now on use the wide character callback functions. */
|
||||
_IO_JUMPS_FILE_plus (fp) = fp->_wide_data->_wide_vtable;
|
||||
|
Reference in New Issue
Block a user