1999-09-06  Ulrich Drepper  <drepper@cygnus.com>

	* iconvdata/iso-2022-jp.c: When translating to ISO-2022-JP* write
	escape sequences out even if the character itself does not fit
	into the buffer.

	* iconvdata/jis0201.h (ucs4_to_jisx0201): Correct mapping for U005C.
This commit is contained in:
Ulrich Drepper 1999-09-06 07:55:04 +00:00
parent bd952512ea
commit 07c7a0552a
3 changed files with 79 additions and 10 deletions

View File

@ -1,3 +1,11 @@
1999-09-06 Ulrich Drepper <drepper@cygnus.com>
* iconvdata/iso-2022-jp.c: When translating to ISO-2022-JP* write
escape sequences out even if the character itself does not fit
into the buffer.
* iconvdata/jis0201.h (ucs4_to_jisx0201): Correct mapping for U005C.
1999-08-31 H.J. Lu <hjl@gnu.org> 1999-08-31 H.J. Lu <hjl@gnu.org>
* nscd/nscd_getgr_r.c (nscd_getgr_r): Cleanup the buffer count. * nscd/nscd_getgr_r.c (nscd_getgr_r): Cleanup the buffer count.

View File

@ -470,6 +470,11 @@ gconv_end (struct __gconv_step *data)
if (var == iso2022jp2 && ch == 0x0a) \ if (var == iso2022jp2 && ch == 0x0a) \
set2 = UNSPECIFIED_set; \ set2 = UNSPECIFIED_set; \
} \ } \
/* ISO-2022-JP recommends to encode the newline character always in \
ASCII since this allows a context-free interpretation of the \
characters at the beginning of the next line. Otherwise it would \
have to be known whether the last line ended using ASCII or \
JIS X 0201. */ \
else if (set == JISX0201_Roman_set) \ else if (set == JISX0201_Roman_set) \
{ \ { \
unsigned char buf[2]; \ unsigned char buf[2]; \
@ -576,7 +581,7 @@ gconv_end (struct __gconv_step *data)
{ \ { \
/* We must encode using ASCII. First write out the \ /* We must encode using ASCII. First write out the \
escape sequence. */ \ escape sequence. */ \
if (NEED_LENGTH_TEST && outptr + 4 > outend) \ if (NEED_LENGTH_TEST && outptr + 3 > outend) \
{ \ { \
result = __GCONV_FULL_OUTPUT; \ result = __GCONV_FULL_OUTPUT; \
break; \ break; \
@ -586,6 +591,12 @@ gconv_end (struct __gconv_step *data)
*outptr++ = '('; \ *outptr++ = '('; \
*outptr++ = 'B'; \ *outptr++ = 'B'; \
set = ASCII_set; \ set = ASCII_set; \
\
if (NEED_LENGTH_TEST && outptr + 1 > outend) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
*outptr++ = ch; \ *outptr++ = ch; \
\ \
/* At the beginning of a line, G2 designation is cleared. */ \ /* At the beginning of a line, G2 designation is cleared. */ \
@ -605,7 +616,7 @@ gconv_end (struct __gconv_step *data)
if (written != __UNKNOWN_10646_CHAR && buf[0] < 0x80) \ if (written != __UNKNOWN_10646_CHAR && buf[0] < 0x80) \
{ \ { \
/* We use JIS X 0201. */ \ /* We use JIS X 0201. */ \
if (NEED_LENGTH_TEST && outptr + 4 > outend) \ if (NEED_LENGTH_TEST && outptr + 3 > outend) \
{ \ { \
result = __GCONV_FULL_OUTPUT; \ result = __GCONV_FULL_OUTPUT; \
break; \ break; \
@ -615,6 +626,12 @@ gconv_end (struct __gconv_step *data)
*outptr++ = '('; \ *outptr++ = '('; \
*outptr++ = 'J'; \ *outptr++ = 'J'; \
set = JISX0201_Roman_set; \ set = JISX0201_Roman_set; \
\
if (NEED_LENGTH_TEST && outptr + 1 > outend) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
*outptr++ = buf[0]; \ *outptr++ = buf[0]; \
} \ } \
else \ else \
@ -623,7 +640,7 @@ gconv_end (struct __gconv_step *data)
if (written != __UNKNOWN_10646_CHAR) \ if (written != __UNKNOWN_10646_CHAR) \
{ \ { \
/* We use JIS X 0208. */ \ /* We use JIS X 0208. */ \
if (NEED_LENGTH_TEST && outptr + 5 > outend) \ if (NEED_LENGTH_TEST && outptr + 3 > outend) \
{ \ { \
result = __GCONV_FULL_OUTPUT; \ result = __GCONV_FULL_OUTPUT; \
break; \ break; \
@ -633,6 +650,12 @@ gconv_end (struct __gconv_step *data)
*outptr++ = '$'; \ *outptr++ = '$'; \
*outptr++ = 'B'; \ *outptr++ = 'B'; \
set = JISX0208_1983_set; \ set = JISX0208_1983_set; \
\
if (NEED_LENGTH_TEST && outptr + 2 > outend) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
*outptr++ = buf[0]; \ *outptr++ = buf[0]; \
*outptr++ = buf[1]; \ *outptr++ = buf[1]; \
} \ } \
@ -648,7 +671,7 @@ gconv_end (struct __gconv_step *data)
if (written != __UNKNOWN_10646_CHAR) \ if (written != __UNKNOWN_10646_CHAR) \
{ \ { \
/* We use JIS X 0212. */ \ /* We use JIS X 0212. */ \
if (NEED_LENGTH_TEST && outptr + 6 > outend) \ if (NEED_LENGTH_TEST && outptr + 4 > outend) \
{ \ { \
result = __GCONV_FULL_OUTPUT; \ result = __GCONV_FULL_OUTPUT; \
break; \ break; \
@ -658,6 +681,12 @@ gconv_end (struct __gconv_step *data)
*outptr++ = '('; \ *outptr++ = '('; \
*outptr++ = 'D'; \ *outptr++ = 'D'; \
set = JISX0212_set; \ set = JISX0212_set; \
\
if (NEED_LENGTH_TEST && outptr + 2 > outend) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
*outptr++ = buf[0]; \ *outptr++ = buf[0]; \
*outptr++ = buf[1]; \ *outptr++ = buf[1]; \
} \ } \
@ -668,7 +697,7 @@ gconv_end (struct __gconv_step *data)
&& buf[0] >= 0x80) \ && buf[0] >= 0x80) \
{ \ { \
/* We use JIS X 0201. */ \ /* We use JIS X 0201. */ \
if (NEED_LENGTH_TEST && outptr + 4 > outend) \ if (NEED_LENGTH_TEST && outptr + 3 > outend) \
{ \ { \
result = __GCONV_FULL_OUTPUT; \ result = __GCONV_FULL_OUTPUT; \
break; \ break; \
@ -678,12 +707,18 @@ gconv_end (struct __gconv_step *data)
*outptr++ = '('; \ *outptr++ = '('; \
*outptr++ = 'I'; \ *outptr++ = 'I'; \
set = JISX0201_Kana_set; \ set = JISX0201_Kana_set; \
\
if (NEED_LENGTH_TEST && outptr + 1 > outend) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
*outptr++ = buf[0] - 0x80; \ *outptr++ = buf[0] - 0x80; \
} \ } \
else if (ch != 0xa5 && ch >= 0x80 && ch <= 0xff) \ else if (ch != 0xa5 && ch >= 0x80 && ch <= 0xff) \
{ \ { \
/* ISO 8859-1 upper half. */ \ /* ISO 8859-1 upper half. */ \
if (NEED_LENGTH_TEST && outptr + 6 > outend) \ if (NEED_LENGTH_TEST && outptr + 3 > outend) \
{ \ { \
result = __GCONV_FULL_OUTPUT; \ result = __GCONV_FULL_OUTPUT; \
break; \ break; \
@ -693,6 +728,12 @@ gconv_end (struct __gconv_step *data)
*outptr++ = '.'; \ *outptr++ = '.'; \
*outptr++ = 'A'; \ *outptr++ = 'A'; \
set2 = ISO88591_set; \ set2 = ISO88591_set; \
\
if (NEED_LENGTH_TEST && outptr + 3 > outend) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
*outptr++ = ESC; \ *outptr++ = ESC; \
*outptr++ = 'N'; \ *outptr++ = 'N'; \
*outptr++ = ch; \ *outptr++ = ch; \
@ -703,7 +744,7 @@ gconv_end (struct __gconv_step *data)
if (written != __UNKNOWN_10646_CHAR) \ if (written != __UNKNOWN_10646_CHAR) \
{ \ { \
/* We use GB 2312. */ \ /* We use GB 2312. */ \
if (NEED_LENGTH_TEST && outptr + 5 > outend) \ if (NEED_LENGTH_TEST && outptr + 3 > outend) \
{ \ { \
result = __GCONV_FULL_OUTPUT; \ result = __GCONV_FULL_OUTPUT; \
break; \ break; \
@ -713,6 +754,12 @@ gconv_end (struct __gconv_step *data)
*outptr++ = '$'; \ *outptr++ = '$'; \
*outptr++ = 'A'; \ *outptr++ = 'A'; \
set = GB2312_set; \ set = GB2312_set; \
\
if (NEED_LENGTH_TEST && outptr + 2 > outend) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
*outptr++ = buf[0]; \ *outptr++ = buf[0]; \
*outptr++ = buf[1]; \ *outptr++ = buf[1]; \
} \ } \
@ -723,7 +770,7 @@ gconv_end (struct __gconv_step *data)
{ \ { \
/* We use KSC 5601. */ \ /* We use KSC 5601. */ \
if (NEED_LENGTH_TEST \ if (NEED_LENGTH_TEST \
&& outptr + 6 > outend) \ && outptr + 4 > outend) \
{ \ { \
result = __GCONV_FULL_OUTPUT; \ result = __GCONV_FULL_OUTPUT; \
break; \ break; \
@ -733,6 +780,13 @@ gconv_end (struct __gconv_step *data)
*outptr++ = '('; \ *outptr++ = '('; \
*outptr++ = 'C'; \ *outptr++ = 'C'; \
set = KSC5601_set; \ set = KSC5601_set; \
\
if (NEED_LENGTH_TEST \
&& outptr + 2 > outend) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
*outptr++ = buf[0]; \ *outptr++ = buf[0]; \
*outptr++ = buf[1]; \ *outptr++ = buf[1]; \
} \ } \
@ -753,7 +807,7 @@ gconv_end (struct __gconv_step *data)
{ \ { \
/* We use ISO 8859-7 greek. */ \ /* We use ISO 8859-7 greek. */ \
if (NEED_LENGTH_TEST \ if (NEED_LENGTH_TEST \
&& outptr + 6 > outend) \ && outptr + 3 > outend) \
{ \ { \
result = __GCONV_FULL_OUTPUT; \ result = __GCONV_FULL_OUTPUT; \
break; \ break; \
@ -762,6 +816,13 @@ gconv_end (struct __gconv_step *data)
*outptr++ = '.'; \ *outptr++ = '.'; \
*outptr++ = 'F'; \ *outptr++ = 'F'; \
set2 = ISO88597_set; \ set2 = ISO88597_set; \
\
if (NEED_LENGTH_TEST \
&& outptr + 3 > outend) \
{ \
result = __GCONV_FULL_OUTPUT; \
break; \
} \
*outptr++ = ESC; \ *outptr++ = ESC; \
*outptr++ = 'N'; \ *outptr++ = 'N'; \
*outptr++ = gch; \ *outptr++ = gch; \

View File

@ -46,7 +46,7 @@ ucs4_to_jisx0201 (uint32_t wch, char *s)
ch = '\x5c'; ch = '\x5c';
else if (wch == 0x203e) else if (wch == 0x203e)
ch = '\x7e'; ch = '\x7e';
else if (wch < 0x7e) else if (wch < 0x7e && wch != 0x5c)
ch = wch; ch = wch;
else if (wch >= 0xff61 && wch <= 0xff9f) else if (wch >= 0xff61 && wch <= 0xff9f)
ch = wch - 0xfec0; ch = wch - 0xfec0;