diff --git a/ChangeLog b/ChangeLog index 0bd8ce7a60..43517638e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +1999-11-25 Ulrich Drepper + + * iconv/gconv.c (__gconv): Always initialize + cd->__data[last_step].__outbuf and cd->__data[last_step].__outbufend. + + * iconvdata/iso-2022-kr.c (EMIT_SHIFT_TO_INIT): Update number of + written bytes. + * iconvdata/iso-2022-jp.c: Likewise. + 1999-11-25 H.J. Lu * stdlib/exit.c (exit): Run funtions only if diff --git a/iconv/gconv.c b/iconv/gconv.c index f51af4a4d8..6e3080b0e9 100644 --- a/iconv/gconv.c +++ b/iconv/gconv.c @@ -39,6 +39,9 @@ __gconv (__gconv_t cd, const unsigned char **inbuf, assert (converted != NULL); *converted = 0; + cd->__data[last_step].__outbuf = *outbuf; + cd->__data[last_step].__outbufend = outbufend; + if (inbuf == NULL || *inbuf == NULL) /* We just flush. */ result = DL_CALL_FCT (cd->__steps->__fct, @@ -49,8 +52,6 @@ __gconv (__gconv_t cd, const unsigned char **inbuf, const unsigned char *last_start; assert (outbuf != NULL && *outbuf != NULL); - cd->__data[last_step].__outbuf = *outbuf; - cd->__data[last_step].__outbufend = outbufend; do { diff --git a/iconvdata/iso-2022-jp.c b/iconvdata/iso-2022-jp.c index 669b65afae..a3c9f7d354 100644 --- a/iconvdata/iso-2022-jp.c +++ b/iconvdata/iso-2022-jp.c @@ -212,6 +212,8 @@ gconv_end (struct __gconv_step *data) *outbuf++ = ESC; \ *outbuf++ = '('; \ *outbuf++ = 'B'; \ + if (data->__is_last) \ + *written += 3; \ data->__outbuf = outbuf; \ /* Note that this also clears the G2 designation. */ \ data->__statep->count = ASCII_set; \ diff --git a/iconvdata/iso-2022-kr.c b/iconvdata/iso-2022-kr.c index 178753f5c8..8c1d88b12c 100644 --- a/iconvdata/iso-2022-kr.c +++ b/iconvdata/iso-2022-kr.c @@ -92,6 +92,8 @@ enum { \ /* Write out the shift sequence. */ \ *outbuf++ = SI; \ + if (data->__is_last) \ + *written += 1; \ data->__outbuf = outbuf; \ data->__statep->count = ASCII_set; \ } \