diff options
41 files changed, 254 insertions, 117 deletions
@@ -1,3 +1,55 @@ +2000-06-15 Ulrich Drepper <drepper@redhat.com> + + * iconv/gconv.h (__gconv_fct): Change type of fifth parameter to + unsigned char **. + (__gconv_init_fct): Remove two parameters. + * iconv/gconv_int.h (__gconv_transliterate): Renamed from + gconv_transliterate. Remove two parameters. + Change prototypes of builtin functions according to __gconv_fct change. + * iconv/skeleton.c: Change type of fifth parameter. make sure it is + != NULL only during error handling. Stop in this case after the + conversion. + * iconv/gconv_trans.c: Replace with real implementation for + __gconv_transliterate. + * iconv/gconv_open.c: Adjust for renaming of __gconv_transliterate. + * iconv/gconv.c: Change calls to downstream functions once again. + Use NULL for the fifth parameter instead of pointer to output buffer. + * libio/iofwide.c: Likewise. + * wcsmbs/btowc.c: Likewise. + * wcsmbs/mbrtowc.c: Likewise. + * wcsmbs/mbsnrtowcs.c: Likewise. + * wcsmbs/mbsrtowcs.c: Likewise. + * wcsmbs/wcrtomb.c: Likewise. + * wcsmbs/wcsnrtombs.c: Likewise. + * wcsmbs/wcsrtombs.c: Likewise. + * wcsmbs/wctob.c: Likewise. + * iconv/gconv_simple.c: Remove two parameters from error handling + function call. + * iconvdata/8bit-gap.c: Likewise. + * iconvdata/8bit-generic.c: Likewise. + * iconvdata/ansi_x3.110.c: Likewise. + * iconvdata/big5.c: Likewise. + * iconvdata/big5hkscs.c: Likewise. + * iconvdata/euc-cn.c: Likewise. + * iconvdata/euc-jp.c: Likewise. + * iconvdata/euc-kr.c: Likewise. + * iconvdata/euc-tw.c: Likewise. + * iconvdata/gbgbk.c: Likewise. + * iconvdata/gbk.c: Likewise. + * iconvdata/iso-2022-cn.c: Likewise. + * iconvdata/iso-2022-jp.c: Likewise. + * iconvdata/iso-2022-kr.c: Likewise. + * iconvdata/iso646.c: Likewise. + * iconvdata/iso8859-1.c: Likewise. + * iconvdata/iso_6937-2.c: Likewise. + * iconvdata/iso_6937.c: Likewise. + * iconvdata/johab.c: Likewise. + * iconvdata/sjis.c: Likewise. + * iconvdata/t.61.c: Likewise. + * iconvdata/uhc.c: Likewise. + * iconvdata/unicode.c: Likewise. + * iconvdata/utf-16.c: Likewise. + 2000-06-15 Greg McGary <greg@mcgary.org> * sysdeps/unix/make-syscalls.sh: Strip leading whitespace from lhs diff --git a/iconv/gconv.c b/iconv/gconv.c index 19f95622a2..0b7b917b6a 100644 --- a/iconv/gconv.c +++ b/iconv/gconv.c @@ -46,8 +46,8 @@ __gconv (__gconv_t cd, const unsigned char **inbuf, if (inbuf == NULL || *inbuf == NULL) /* We just flush. */ result = DL_CALL_FCT (cd->__steps->__fct, - (cd->__steps, cd->__data, NULL, NULL, - cd->__data[0].__outbuf, irreversible, 1, 0)); + (cd->__steps, cd->__data, NULL, NULL, NULL, + irreversible, 1, 0)); else { const unsigned char *last_start; @@ -59,7 +59,7 @@ __gconv (__gconv_t cd, const unsigned char **inbuf, last_start = *inbuf; result = DL_CALL_FCT (cd->__steps->__fct, (cd->__steps, cd->__data, inbuf, inbufend, - cd->__data[0].__outbuf, irreversible, 0, 0)); + NULL, irreversible, 0, 0)); } while (result == __GCONV_EMPTY_INPUT && last_start != *inbuf && *inbuf + cd->__steps->__min_needed_from <= inbufend); diff --git a/iconv/gconv.h b/iconv/gconv.h index 2bba133d0c..0164b62c8b 100644 --- a/iconv/gconv.h +++ b/iconv/gconv.h @@ -68,7 +68,7 @@ struct __gconv_trans_data; /* Type of a conversion function. */ typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *, __const unsigned char **, __const unsigned char *, - unsigned char *, size_t *, int, int); + unsigned char **, size_t *, int, int); /* Constructor and destructor for local data for conversion step. */ typedef int (*__gconv_init_fct) (struct __gconv_step *); @@ -80,8 +80,8 @@ typedef int (*__gconv_trans_fct) (struct __gconv_step *step, struct __gconv_step_data *step_data, __const unsigned char *, __const unsigned char **, - __const unsigned char *, unsigned char *, - unsigned char **, unsigned char *, size_t *); + __const unsigned char *, unsigned char **, + size_t *); /* Function to call to provide transliteration module with context. */ typedef int (*__gconv_trans_context_fct) (struct __gconv_trans_data *data, diff --git a/iconv/gconv_int.h b/iconv/gconv_int.h index 87287d7b26..34dff7d522 100644 --- a/iconv/gconv_int.h +++ b/iconv/gconv_int.h @@ -181,15 +181,13 @@ extern void __gconv_get_builtin_trans (const char *name, internal_function; /* Transliteration using the locale's data. */ -extern int gconv_transliterate (struct __gconv_step *step, - struct __gconv_step_data *step_data, - __const unsigned char *inbufstart, - __const unsigned char **inbufp, - __const unsigned char *inbufend, - unsigned char *outbufstart, - unsigned char **outbufp, - unsigned char *outbufend, - size_t *irreversible); +extern int __gconv_transliterate (struct __gconv_step *step, + struct __gconv_step_data *step_data, + __const unsigned char *inbufstart, + __const unsigned char **inbufp, + __const unsigned char *inbufend, + unsigned char **outbufstart, + size_t *irreversible); /* Builtin transformations. */ @@ -198,8 +196,9 @@ extern int gconv_transliterate (struct __gconv_step *step, extern int Name (struct __gconv_step *step, \ struct __gconv_step_data *data, \ const unsigned char **inbuf, \ - const unsigned char *inbufend, unsigned char *outbufstart, \ - size_t *irreversible, int do_flush, int consume_incomplete) + const unsigned char *inbufend, \ + unsigned char **outbufstart, size_t *irreversible, \ + int do_flush, int consume_incomplete) __BUILTIN_TRANS (__gconv_transform_ascii_internal); __BUILTIN_TRANS (__gconv_transform_internal_ascii); diff --git a/iconv/gconv_open.c b/iconv/gconv_open.c index 984ca9dc5d..14f1d5e0f9 100644 --- a/iconv/gconv_open.c +++ b/iconv/gconv_open.c @@ -86,7 +86,7 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle, csnames = internal_trans_names; ncsnames = 1; - trans_fct = gconv_transliterate; + trans_fct = __gconv_transliterate; /* No context, init, or end function. */ } else if (strcasecmp (errhand, "WORK AROUND A GCC BUG") == 0) diff --git a/iconv/gconv_simple.c b/iconv/gconv_simple.c index 5033f3ef83..390574582f 100644 --- a/iconv/gconv_simple.c +++ b/iconv/gconv_simple.c @@ -801,7 +801,7 @@ ucs4le_internal_loop_single (struct __gconv_step *step, { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outptr, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -1190,7 +1190,7 @@ ucs4le_internal_loop_single (struct __gconv_step *step, { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outptr, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -1257,7 +1257,7 @@ ucs4le_internal_loop_single (struct __gconv_step *step, { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outptr, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconv/gconv_trans.c b/iconv/gconv_trans.c index 56c3ff6be6..829ff5f981 100644 --- a/iconv/gconv_trans.c +++ b/iconv/gconv_trans.c @@ -18,6 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <dlfcn.h> #include <stdint.h> #include "gconv_int.h" @@ -25,26 +26,121 @@ int -gconv_transliterate (struct __gconv_step *step, - struct __gconv_step_data *step_data, - const unsigned char *inbufstart, - const unsigned char **inbufp, - const unsigned char *inbufend, - unsigned char *outbufstart, - unsigned char **outbufp, unsigned char *outbufend, - size_t *irreversible) +__gconv_transliterate (struct __gconv_step *step, + struct __gconv_step_data *step_data, + const unsigned char *inbufstart, + const unsigned char **inbufp, + const unsigned char *inbufend, + unsigned char **outbufstart, size_t *irreversible) { /* Find out about the locale's transliteration. */ - uint_fast32_t size = _NL_CURRENT_WORD (LC_CTYPE, - _NL_CTYPE_TRANSLIT_HASH_SIZE); - uint_fast32_t layers = _NL_CURRENT_WORD (LC_CTYPE, - _NL_CTYPE_TRANSLIT_HASH_LAYERS); + uint_fast32_t size; + uint_fast32_t layers; + uint32_t *from_idx; + uint32_t *from_tbl; + uint32_t *to_idx; + uint32_t *to_tbl; + uint32_t *winbuf; + uint32_t *winbufend; + uint_fast32_t low; + uint_fast32_t high; /* If there is no transliteration information in the locale don't do anything and return the error. */ + size = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_TRANSLIT_HASH_SIZE); if (size == 0) return __GCONV_ILLEGAL_INPUT; - /* XXX For now we don't do anything. */ + /* Get the rest of the values. */ + layers = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_TRANSLIT_HASH_LAYERS); + from_idx = (uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TRANSLIT_FROM_IDX); + from_tbl = (uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TRANSLIT_FROM_TBL); + to_idx = (uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TRANSLIT_TO_IDX); + to_tbl = (uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TRANSLIT_TO_TBL); + + /* The input buffer. There are actually 4-byte values. */ + winbuf = (uint32_t *) *inbufp; + winbufend = (uint32_t *) inbufend; + + /* Test whether there is enough input. */ + if (winbuf + 1 > winbufend) + return (winbuf == winbufend + ? __GCONV_EMPTY_INPUT : __GCONV_INCOMPLETE_INPUT); + + /* The array starting at FROM_IDX contains indeces to the string table + in FROM_TBL. The indeces are sorted wrt to the strings. I.e., we + are doing binary search. */ + low = 0; + high = size; + while (low < high) + { + uint_fast32_t med = (low + high) / 2; + uint32_t idx; + int cnt; + + /* Compare the string at this index with the string at the current + position in the input buffer. */ + idx = from_idx[med]; + cnt = 0; + do + { + if (from_tbl[idx + cnt] != winbuf[cnt]) + /* Does not match. */ + break; + ++cnt; + } + while (from_tbl[idx + cnt] != L'\0' && winbuf + cnt < winbufend); + + if (cnt > 0 && from_tbl[idx + cnt] == L'\0') + { + /* Found a matching input sequence. Now try to convert the + possible replacements. */ + uint32_t idx2 = to_idx[med]; + + do + { + /* Determine length of replacement. */ + uint_fast32_t len = 0; + int res; + const unsigned char *toinptr; + + while (to_tbl[idx2 + len] != L'\0') + ++len; + + /* Try this input text. */ + toinptr = (const unsigned char *) &to_tbl[idx2]; + res = DL_CALL_FCT (step->__fct, + (step, step_data, &toinptr, + (const unsigned char *) &to_tbl[idx2 + len], + (unsigned char **) outbufstart, + irreversible, 0, 0)); + if (res != __GCONV_ILLEGAL_INPUT) + { + /* If the conversion succeeds we have to increment the + input buffer. */ + if (res == __GCONV_EMPTY_INPUT) + { + *inbufp += cnt * sizeof (uint32_t); + ++*irreversible; + } + + return res; + } + + /* Next replacement. */ + idx2 += len + 1; + } + while (to_tbl[idx2] != L'\0'); + + /* Nothing found, continue searching. */ + } + + if (winbuf + cnt >= winbufend || from_tbl[idx + cnt] < winbuf[cnt]) + low = idx; + else + high = idx; + } + + /* Haven't found a match. */ return __GCONV_ILLEGAL_INPUT; } diff --git a/iconv/skeleton.c b/iconv/skeleton.c index d64d7599b4..8dbebb81ac 100644 --- a/iconv/skeleton.c +++ b/iconv/skeleton.c @@ -271,7 +271,7 @@ gconv_init (struct __gconv_step *step) int FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data, const unsigned char **inptrp, const unsigned char *inend, - unsigned char *outbufstart, size_t *irreversible, int do_flush, + unsigned char **outbufstart, size_t *irreversible, int do_flush, int consume_incomplete) { struct __gconv_step *next_step = step + 1; @@ -288,6 +288,9 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data, { status = __GCONV_OK; + /* This should never happen during error handling. */ + assert (outbufstart == NULL); + #ifdef EMIT_SHIFT_TO_INIT /* Emit the escape sequence to reset the state. */ EMIT_SHIFT_TO_INIT; @@ -296,14 +299,15 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data, successfully emitted the escape sequence. */ if (status == __GCONV_OK && ! (data->__flags & __GCONV_IS_LAST)) status = DL_CALL_FCT (fct, (next_step, next_data, NULL, NULL, - next_data->__outbuf, irreversible, 1, + NULL, irreversible, 1, consume_incomplete)); } else { /* We preserve the initial values of the pointer variables. */ const unsigned char *inptr = *inptrp; - unsigned char *outbuf = outbufstart; + unsigned char *outbuf = (__builtin_expect (outbufstart == NULL, 1) + ? data->__outbuf : *outbufstart); unsigned char *outend = data->__outbufend; unsigned char *outstart; /* This variable is used to count the number of characters we @@ -331,7 +335,10 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data, || (MAX_NEEDED_TO > 1 && !FROM_DIRECTION)) && consume_incomplete && (data->__statep->__count & 7) != 0) { - /* Yep, we have some bytes left over. Process them now. */ + /* Yep, we have some bytes left over. Process them now. + But this must not happen while we are called from an + error handler. */ + assert (outbufstart == NULL); # if MAX_NEEDED_FROM > 1 if (MAX_NEEDED_TO == 1 || FROM_DIRECTION) @@ -412,6 +419,14 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data, } #endif + /* If we were called as part of an error handling module we + don't do anything else here. */ + if (__builtin_expect (outbufstart != NULL, 0)) + { + *outbufstart = outbuf; + return status; + } + /* Give the transliteration module the chance to store the original text and the result in case it needs a context. */ if (data->__trans.__trans_context_fct != NULL) @@ -443,8 +458,7 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data, int result; result = DL_CALL_FCT (fct, (next_step, next_data, &outerr, - outbuf, next_data->__outbuf, - irreversible, 0, + outbuf, NULL, irreversible, 0, consume_incomplete)); if (result != __GCONV_EMPTY_INPUT) diff --git a/iconvdata/8bit-gap.c b/iconvdata/8bit-gap.c index 23a63fd9e4..6394065c56 100644 --- a/iconvdata/8bit-gap.c +++ b/iconvdata/8bit-gap.c @@ -89,7 +89,7 @@ struct gap { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -112,7 +112,7 @@ struct gap { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -137,7 +137,7 @@ struct gap { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/8bit-generic.c b/iconvdata/8bit-generic.c index 62160c6efa..1478c5be59 100644 --- a/iconvdata/8bit-generic.c +++ b/iconvdata/8bit-generic.c @@ -72,7 +72,7 @@ { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/ansi_x3.110.c b/iconvdata/ansi_x3.110.c index f403773d9d..f338055f39 100644 --- a/iconvdata/ansi_x3.110.c +++ b/iconvdata/ansi_x3.110.c @@ -501,8 +501,7 @@ static const char from_ucs4[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -560,8 +559,7 @@ static const char from_ucs4[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -589,8 +587,7 @@ static const char from_ucs4[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/big5.c b/iconvdata/big5.c index 2e039376d0..8cad304c7a 100644 --- a/iconvdata/big5.c +++ b/iconvdata/big5.c @@ -8589,7 +8589,7 @@ static const char from_ucs4_tab13[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/big5hkscs.c b/iconvdata/big5hkscs.c index b5fe9663e5..0859dd8f09 100644 --- a/iconvdata/big5hkscs.c +++ b/iconvdata/big5hkscs.c @@ -12746,7 +12746,7 @@ static const char from_ucs4_tab14[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/euc-cn.c b/iconvdata/euc-cn.c index c7a02c2cd4..075970ce96 100644 --- a/iconvdata/euc-cn.c +++ b/iconvdata/euc-cn.c @@ -145,8 +145,7 @@ { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/euc-jp.c b/iconvdata/euc-jp.c index 6cf89e3aa6..771dc069e8 100644 --- a/iconvdata/euc-jp.c +++ b/iconvdata/euc-jp.c @@ -222,8 +222,7 @@ { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, \ - &inptr, inend, *outptrp, \ - &outptr, outend, \ + &inptr, inend, &outbuf, \ irreversible)); \ if (result != __GCONV_OK) \ break; \ diff --git a/iconvdata/euc-kr.c b/iconvdata/euc-kr.c index 88794f2f02..e953df5dc9 100644 --- a/iconvdata/euc-kr.c +++ b/iconvdata/euc-kr.c @@ -150,7 +150,7 @@ euckr_from_ucs4 (uint32_t ch, unsigned char *cp) { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/euc-tw.c b/iconvdata/euc-tw.c index ee88d4e2a7..f3152478e2 100644 --- a/iconvdata/euc-tw.c +++ b/iconvdata/euc-tw.c @@ -197,8 +197,7 @@ { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/gbgbk.c b/iconvdata/gbgbk.c index c6f2e4e0c2..15e72d9cfb 100644 --- a/iconvdata/gbgbk.c +++ b/iconvdata/gbgbk.c @@ -106,8 +106,7 @@ { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/gbk.c b/iconvdata/gbk.c index f82059195e..669e4a9c9f 100644 --- a/iconvdata/gbk.c +++ b/iconvdata/gbk.c @@ -13456,8 +13456,7 @@ static const char __gbk_from_ucs4_tab12[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, \ - irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/iso-2022-cn.c b/iconvdata/iso-2022-cn.c index af7f92d3ac..818f2a773c 100644 --- a/iconvdata/iso-2022-cn.c +++ b/iconvdata/iso-2022-cn.c @@ -328,8 +328,7 @@ enum { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, \ - &inptr, inend, *outptrp, \ - &outptr, outend, \ + &inptr, inend, &outbuf, \ irreversible)); \ if (result != __GCONV_OK) \ break; \ diff --git a/iconvdata/iso-2022-jp.c b/iconvdata/iso-2022-jp.c index c6a43d121d..b66c9503b5 100644 --- a/iconvdata/iso-2022-jp.c +++ b/iconvdata/iso-2022-jp.c @@ -707,8 +707,7 @@ gconv_end (struct __gconv_step *data) { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, \ - &inptr, inend, *outptrp, \ - &outptr, outend, \ + &inptr, inend, &outbuf, \ irreversible)); \ if (result != __GCONV_OK) \ break; \ @@ -895,8 +894,7 @@ gconv_end (struct __gconv_step *data) result = DL_CALL_FCT \ (step_data->__trans.__trans_fct,\ (step, step_data, *inptrp, \ - &inptr, inend, *outptrp, \ - &outptr, outend, \ + &inptr, inend, &outbuf, \ irreversible)); \ if (result != __GCONV_OK) \ break; \ diff --git a/iconvdata/iso-2022-kr.c b/iconvdata/iso-2022-kr.c index 4601e22e68..d3cca52d05 100644 --- a/iconvdata/iso-2022-kr.c +++ b/iconvdata/iso-2022-kr.c @@ -259,8 +259,7 @@ enum { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/iso646.c b/iconvdata/iso646.c index f39f1b4d6d..df81ee2be6 100644 --- a/iconvdata/iso646.c +++ b/iconvdata/iso646.c @@ -889,7 +889,7 @@ gconv_end (struct __gconv_step *data) { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/iso8859-1.c b/iconvdata/iso8859-1.c index fb1fabc4f6..d69a201fed 100644 --- a/iconvdata/iso8859-1.c +++ b/iconvdata/iso8859-1.c @@ -53,7 +53,7 @@ { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/iso_6937-2.c b/iconvdata/iso_6937-2.c index 4f5a8689b8..536d8965fa 100644 --- a/iconvdata/iso_6937-2.c +++ b/iconvdata/iso_6937-2.c @@ -569,8 +569,7 @@ static const char from_ucs4[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -595,7 +594,7 @@ static const char from_ucs4[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/iso_6937.c b/iconvdata/iso_6937.c index b7ab0841eb..f812ce2c93 100644 --- a/iconvdata/iso_6937.c +++ b/iconvdata/iso_6937.c @@ -546,8 +546,7 @@ static const char from_ucs4[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -572,7 +571,7 @@ static const char from_ucs4[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/johab.c b/iconvdata/johab.c index 7253ff6cb8..ac3bf82b27 100644 --- a/iconvdata/johab.c +++ b/iconvdata/johab.c @@ -400,8 +400,7 @@ johab_sym_hanja_to_ucs (uint_fast32_t idx, uint_fast32_t c1, uint_fast32_t c2) { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -446,8 +445,7 @@ johab_sym_hanja_to_ucs (uint_fast32_t idx, uint_fast32_t c1, uint_fast32_t c2) { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/sjis.c b/iconvdata/sjis.c index 2641b24743..806579b283 100644 --- a/iconvdata/sjis.c +++ b/iconvdata/sjis.c @@ -4472,8 +4472,7 @@ static const char from_ucs4_extra[0x100][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -4501,7 +4500,7 @@ static const char from_ucs4_extra[0x100][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/t.61.c b/iconvdata/t.61.c index 991cce1626..a7d42277c9 100644 --- a/iconvdata/t.61.c +++ b/iconvdata/t.61.c @@ -473,8 +473,7 @@ static const char from_ucs4[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -511,8 +510,7 @@ static const char from_ucs4[][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/uhc.c b/iconvdata/uhc.c index 232e5c8416..9c494ff705 100644 --- a/iconvdata/uhc.c +++ b/iconvdata/uhc.c @@ -3225,8 +3225,7 @@ static const char uhc_hangul_from_ucs[11172][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -3266,8 +3265,7 @@ static const char uhc_hangul_from_ucs[11172][2] = { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/unicode.c b/iconvdata/unicode.c index 438658edb9..e818c54c31 100644 --- a/iconvdata/unicode.c +++ b/iconvdata/unicode.c @@ -156,7 +156,7 @@ gconv_end (struct __gconv_step *data) { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, inend, \ - *outptrp, &outptr, outend, irreversible)); \ + &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/iconvdata/utf-16.c b/iconvdata/utf-16.c index bbb546ef9a..44911feb42 100644 --- a/iconvdata/utf-16.c +++ b/iconvdata/utf-16.c @@ -206,8 +206,7 @@ gconv_end (struct __gconv_step *data) { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ @@ -250,8 +249,7 @@ gconv_end (struct __gconv_step *data) { \ result = DL_CALL_FCT (step_data->__trans.__trans_fct, \ (step, step_data, *inptrp, &inptr, \ - inend, *outptrp, &outptr, outend, \ - irreversible)); \ + inend, &outbuf, irreversible)); \ if (result != __GCONV_OK) \ break; \ } \ diff --git a/libio/iofwide.c b/libio/iofwide.c index bb26dddc85..8ad2129062 100644 --- a/libio/iofwide.c +++ b/libio/iofwide.c @@ -181,7 +181,7 @@ do_out (struct _IO_codecvt *codecvt, __mbstate_t *statep, status = DL_CALL_FCT (gs->__fct, (gs, codecvt->__cd_out.__cd.__data, &from_start_copy, - (const unsigned char *) from_end, to_start, + (const unsigned char *) from_end, NULL, &dummy, 0, 0)); *from_stop = (wchar_t *) from_start_copy; @@ -229,7 +229,7 @@ do_unshift (struct _IO_codecvt *codecvt, __mbstate_t *statep, status = DL_CALL_FCT (gs->__fct, (gs, codecvt->__cd_out.__cd.__data, NULL, NULL, - to_start, &dummy, 1, 0)); + NULL, &dummy, 1, 0)); *to_stop = codecvt->__cd_out.__cd.__data[0].__outbuf; @@ -277,7 +277,7 @@ do_in (struct _IO_codecvt *codecvt, __mbstate_t *statep, status = DL_CALL_FCT (gs->__fct, (gs, codecvt->__cd_in.__cd.__data, &from_start_copy, - from_end, (char *) to_start, &dummy, 0, 0)); + from_end, NULL, &dummy, 0, 0)); *from_stop = from_start_copy; *to_stop = (wchar_t *) codecvt->__cd_in.__cd.__data[0].__outbuf; @@ -354,7 +354,7 @@ do_length (struct _IO_codecvt *codecvt, __mbstate_t *statep, status = DL_CALL_FCT (gs->__fct, (gs, codecvt->__cd_in.__cd.__data, &cp, from_end, - (char *) to_buf, &dummy, 0, 0)); + NULL, &dummy, 0, 0)); result = cp - (const unsigned char *) from_start; #else diff --git a/wcsmbs/btowc.c b/wcsmbs/btowc.c index a6841032f2..cf0ec0825c 100644 --- a/wcsmbs/btowc.c +++ b/wcsmbs/btowc.c @@ -62,7 +62,7 @@ __btowc (c) status = DL_CALL_FCT (__wcsmbs_gconv_fcts.towc->__fct, (__wcsmbs_gconv_fcts.towc, &data, &inptr, inptr + 1, - data.__outbuf, &dummy, 0, 1)); + NULL, &dummy, 0, 1)); /* The conversion failed. */ if (status != __GCONV_OK && status != __GCONV_FULL_OUTPUT && status != __GCONV_EMPTY_INPUT) diff --git a/wcsmbs/mbrtowc.c b/wcsmbs/mbrtowc.c index b67b3f7d34..6f5417980b 100644 --- a/wcsmbs/mbrtowc.c +++ b/wcsmbs/mbrtowc.c @@ -73,7 +73,7 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) inbuf = (const unsigned char *) s; status = DL_CALL_FCT (__wcsmbs_gconv_fcts.towc->__fct, (__wcsmbs_gconv_fcts.towc, &data, &inbuf, inbuf + n, - data.__outbuf, &dummy, 0, 1)); + NULL, &dummy, 0, 1)); /* There must not be any problems with the conversion but illegal input characters. The output buffer must be large enough, otherwise the diff --git a/wcsmbs/mbsnrtowcs.c b/wcsmbs/mbsnrtowcs.c index 51d9cd09f2..0410232187 100644 --- a/wcsmbs/mbsnrtowcs.c +++ b/wcsmbs/mbsnrtowcs.c @@ -82,7 +82,7 @@ __mbsnrtowcs (dst, src, nmc, len, ps) data.__outbuf = (unsigned char *) buf; status = DL_CALL_FCT (towc->__fct, - (towc, &data, &inbuf, srcend, data.__outbuf, + (towc, &data, &inbuf, srcend, NULL, &dummy, 0, 1)); result += (wchar_t *) data.__outbuf - buf; @@ -104,7 +104,7 @@ __mbsnrtowcs (dst, src, nmc, len, ps) status = DL_CALL_FCT (towc->__fct, (towc, &data, (const unsigned char **) src, srcend, - data.__outbuf, &dummy, 0, 1)); + NULL, &dummy, 0, 1)); result = (wchar_t *) data.__outbuf - dst; diff --git a/wcsmbs/mbsrtowcs.c b/wcsmbs/mbsrtowcs.c index 77e631ea46..73a24a7608 100644 --- a/wcsmbs/mbsrtowcs.c +++ b/wcsmbs/mbsrtowcs.c @@ -79,7 +79,7 @@ __mbsrtowcs (dst, src, len, ps) data.__outbuf = (char *) buf; status = DL_CALL_FCT (towc->__fct, - (towc, &data, &inbuf, srcend, data.__outbuf, + (towc, &data, &inbuf, srcend, NULL, &non_reversible, 0, 1)); result += (wchar_t *) data.__outbuf - buf; @@ -110,7 +110,7 @@ __mbsrtowcs (dst, src, len, ps) status = DL_CALL_FCT (towc->__fct, (towc, &data, (const unsigned char **) src, srcend, - data.__outbuf, &non_reversible, 0, 1)); + NULL, &non_reversible, 0, 1)); result = (wchar_t *) data.__outbuf - dst; diff --git a/wcsmbs/wcrtomb.c b/wcsmbs/wcrtomb.c index 375a000072..f7100d4fc7 100644 --- a/wcsmbs/wcrtomb.c +++ b/wcsmbs/wcrtomb.c @@ -75,7 +75,7 @@ __wcrtomb (char *s, wchar_t wc, mbstate_t *ps) { status = DL_CALL_FCT (__wcsmbs_gconv_fcts.tomb->__fct, (__wcsmbs_gconv_fcts.tomb, &data, NULL, NULL, - data.__outbuf, &dummy, 1, 1)); + NULL, &dummy, 1, 1)); if (status == __GCONV_OK || status == __GCONV_EMPTY_INPUT) *data.__outbuf++ = '\0'; @@ -87,8 +87,7 @@ __wcrtomb (char *s, wchar_t wc, mbstate_t *ps) status = DL_CALL_FCT (__wcsmbs_gconv_fcts.tomb->__fct, (__wcsmbs_gconv_fcts.tomb, &data, &inbuf, - inbuf + sizeof (wchar_t), data.__outbuf, &dummy, - 0, 1)); + inbuf + sizeof (wchar_t), NULL, &dummy, 0, 1)); } /* There must not be any problems with the conversion but illegal input diff --git a/wcsmbs/wcsnrtombs.c b/wcsmbs/wcsnrtombs.c index ec87d85a99..f7b4363779 100644 --- a/wcsmbs/wcsnrtombs.c +++ b/wcsmbs/wcsnrtombs.c @@ -83,7 +83,7 @@ __wcsnrtombs (dst, src, nwc, len, ps) status = DL_CALL_FCT (tomb->__fct, (tomb, &data, (const unsigned char **) &inbuf, - (const unsigned char *) srcend, data.__outbuf, + (const unsigned char *) srcend, NULL, &dummy, 0, 1)); /* Count the number of bytes. */ @@ -108,7 +108,7 @@ __wcsnrtombs (dst, src, nwc, len, ps) status = DL_CALL_FCT (tomb->__fct, (tomb, &data, (const unsigned char **) src, - (const unsigned char *) srcend, data.__outbuf, + (const unsigned char *) srcend, NULL, &dummy, 0, 1)); /* Count the number of bytes. */ diff --git a/wcsmbs/wcsrtombs.c b/wcsmbs/wcsrtombs.c index b2e4c18ccc..3c731aaa54 100644 --- a/wcsmbs/wcsrtombs.c +++ b/wcsmbs/wcsrtombs.c @@ -80,7 +80,7 @@ __wcsrtombs (dst, src, len, ps) status = DL_CALL_FCT (tomb->__fct, (tomb, &data, (const unsigned char **) &inbuf, - (const unsigned char *) srcend, data.__outbuf, + (const unsigned char *) srcend, NULL, &dummy, 0, 1)); /* Count the number of bytes. */ @@ -109,7 +109,7 @@ __wcsrtombs (dst, src, len, ps) status = DL_CALL_FCT (tomb->__fct, (tomb, &data, (const unsigned char **) src, - (const unsigned char *) srcend, data.__outbuf, + (const unsigned char *) srcend, NULL, &dummy, 0, 1)); /* Count the number of bytes. */ diff --git a/wcsmbs/wctob.c b/wcsmbs/wctob.c index 800a37e2f8..cee739c251 100644 --- a/wcsmbs/wctob.c +++ b/wcsmbs/wctob.c @@ -58,7 +58,7 @@ wctob (c) (__wcsmbs_gconv_fcts.tomb, &data, (const unsigned char **) &inptr, (const unsigned char *) &inbuf[1], - data.__outbuf, &dummy, 0, 1)); + NULL, &dummy, 0, 1)); /* The conversion failed or the output is too long. */ if ((status != __GCONV_OK && status != __GCONV_FULL_OUTPUT |