mirror of git://sourceware.org/git/glibc.git
Update.
* iconvdata/iso-2022-jp.c: Correct handling of G2 set. Patch by Shinya Hanataka <hanataka@abyss.rim.or.jp>.
This commit is contained in:
parent
482eec0d11
commit
70e57b1382
|
|
@ -1,5 +1,8 @@
|
||||||
1999-01-16 Ulrich Drepper <drepper@cygnus.com>
|
1999-01-16 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* iconvdata/iso-2022-jp.c: Correct handling of G2 set.
|
||||||
|
Patch by Shinya Hanataka <hanataka@abyss.rim.or.jp>.
|
||||||
|
|
||||||
* elf/Makefile (tests): Add loadtest.
|
* elf/Makefile (tests): Add loadtest.
|
||||||
Add rules to generate test modules.
|
Add rules to generate test modules.
|
||||||
* Makeconfig (+link): Add $(LDFLAGS-$(@F)) to command line.
|
* Makeconfig (+link): Add $(LDFLAGS-$(@F)) to command line.
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,14 @@ enum
|
||||||
JISX0201_Kana_set,
|
JISX0201_Kana_set,
|
||||||
GB2312_set,
|
GB2312_set,
|
||||||
KSC5601_set,
|
KSC5601_set,
|
||||||
JISX0212_set,
|
JISX0212_set
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The second value stored is the designation of the G2 set. The following
|
||||||
|
values are possible: */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
UNSPECIFIED_set = 0,
|
||||||
ISO88591_set,
|
ISO88591_set,
|
||||||
ISO88597_set
|
ISO88597_set
|
||||||
};
|
};
|
||||||
|
|
@ -187,12 +194,13 @@ gconv_end (struct gconv_step *data)
|
||||||
\
|
\
|
||||||
if (dir == from_iso2022jp) \
|
if (dir == from_iso2022jp) \
|
||||||
/* It's easy, we don't have to emit anything, we just reset the \
|
/* It's easy, we don't have to emit anything, we just reset the \
|
||||||
state for the input. */ \
|
state for the input. Note that this also clears the G2 \
|
||||||
|
designation. */ \
|
||||||
data->statep->count = ASCII_set; \
|
data->statep->count = ASCII_set; \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
char *outbuf = data->outbuf; \
|
char *outbuf = data->outbuf; \
|
||||||
\
|
\
|
||||||
/* We are not in the initial state. To switch back we have \
|
/* We are not in the initial state. To switch back we have \
|
||||||
to emit the sequence `Esc ( B'. */ \
|
to emit the sequence `Esc ( B'. */ \
|
||||||
if (outbuf + 3 > data->outbufend) \
|
if (outbuf + 3 > data->outbufend) \
|
||||||
|
|
@ -205,6 +213,7 @@ gconv_end (struct gconv_step *data)
|
||||||
*outbuf++ = '('; \
|
*outbuf++ = '('; \
|
||||||
*outbuf++ = 'B'; \
|
*outbuf++ = 'B'; \
|
||||||
data->outbuf = outbuf; \
|
data->outbuf = outbuf; \
|
||||||
|
/* Note that this also clears the G2 designation. */ \
|
||||||
data->statep->count = ASCII_set; \
|
data->statep->count = ASCII_set; \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
|
|
@ -319,23 +328,50 @@ gconv_end (struct gconv_step *data)
|
||||||
if (inptr[2] == 'A') \
|
if (inptr[2] == 'A') \
|
||||||
{ \
|
{ \
|
||||||
/* ISO 8859-1-GR selected. */ \
|
/* ISO 8859-1-GR selected. */ \
|
||||||
set = ISO88591_set; \
|
set2 = ISO88591_set; \
|
||||||
inptr += 3; \
|
inptr += 3; \
|
||||||
continue; \
|
continue; \
|
||||||
} \
|
} \
|
||||||
else if (inptr[2] == 'F') \
|
else if (inptr[2] == 'F') \
|
||||||
{ \
|
{ \
|
||||||
/* ISO 8859-7-GR selected. */ \
|
/* ISO 8859-7-GR selected. */ \
|
||||||
set = ISO88597_set; \
|
set2 = ISO88597_set; \
|
||||||
inptr += 3; \
|
inptr += 3; \
|
||||||
continue; \
|
continue; \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
if (set == ASCII_set \
|
if (ch == ESC && var == iso2022jp2 && inptr[1] == 'N') \
|
||||||
|| (var < ISO88591_set && (ch < 0x21 || ch == 0x7f)) \
|
{ \
|
||||||
|| (var >= ISO88591_set && ch < 0x20)) \
|
if (set2 == ISO88591_set) \
|
||||||
|
{ \
|
||||||
|
ch = inptr[2] | 0x80; \
|
||||||
|
inptr += 3; \
|
||||||
|
} \
|
||||||
|
else if (set2 == ISO88597_set) \
|
||||||
|
{ \
|
||||||
|
/* We use the table from the ISO 8859-7 module. */ \
|
||||||
|
if (inptr[2] < 0x20 || inptr[2] > 0x80) \
|
||||||
|
{ \
|
||||||
|
result = GCONV_ILLEGAL_INPUT; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
ch = iso88597_to_ucs4[inptr[2] - 0x20]; \
|
||||||
|
if (ch == 0) \
|
||||||
|
{ \
|
||||||
|
result = GCONV_ILLEGAL_INPUT; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
inptr += 3; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
result = GCONV_ILLEGAL_INPUT; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
else if (set == ASCII_set || (ch < 0x21 || ch == 0x7f)) \
|
||||||
/* Almost done, just advance the input pointer. */ \
|
/* Almost done, just advance the input pointer. */ \
|
||||||
++inptr; \
|
++inptr; \
|
||||||
else if (set == JISX0201_Roman_set) \
|
else if (set == JISX0201_Roman_set) \
|
||||||
|
|
@ -360,24 +396,6 @@ gconv_end (struct gconv_step *data)
|
||||||
} \
|
} \
|
||||||
++inptr; \
|
++inptr; \
|
||||||
} \
|
} \
|
||||||
else if (set == ISO88591_set) \
|
|
||||||
{ \
|
|
||||||
/* This is quite easy. All characters are defined and the \
|
|
||||||
ISO 10646 value is computed by adding 0x80. */ \
|
|
||||||
ch |= 0x80; \
|
|
||||||
++inptr; \
|
|
||||||
} \
|
|
||||||
else if (set == ISO88597_set) \
|
|
||||||
{ \
|
|
||||||
/* We use the table from the ISO 8859-7 module. */ \
|
|
||||||
ch = iso88597_to_ucs4[(ch & 0x7f) - 0x20]; \
|
|
||||||
if (ch == 0) \
|
|
||||||
{ \
|
|
||||||
result = GCONV_ILLEGAL_INPUT; \
|
|
||||||
break; \
|
|
||||||
} \
|
|
||||||
++inptr; \
|
|
||||||
} \
|
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
if (set == JISX0208_1978_set || set == JISX0208_1983_set) \
|
if (set == JISX0208_1978_set || set == JISX0208_1983_set) \
|
||||||
|
|
@ -419,8 +437,8 @@ gconv_end (struct gconv_step *data)
|
||||||
*((uint32_t *) outptr)++ = ch; \
|
*((uint32_t *) outptr)++ = ch; \
|
||||||
}
|
}
|
||||||
#define EXTRA_LOOP_DECLS , enum variant var, int *setp
|
#define EXTRA_LOOP_DECLS , enum variant var, int *setp
|
||||||
#define INIT_PARAMS int set = *setp
|
#define INIT_PARAMS int set = *setp % 0x100, set2 = *setp / 0x100
|
||||||
#define UPDATE_PARAMS *setp = set
|
#define UPDATE_PARAMS *setp = (set2 << 8) + set
|
||||||
#include <iconv/loop.c>
|
#include <iconv/loop.c>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -448,6 +466,9 @@ gconv_end (struct gconv_step *data)
|
||||||
*outptr++ = ch; \
|
*outptr++ = ch; \
|
||||||
written = 1; \
|
written = 1; \
|
||||||
} \
|
} \
|
||||||
|
/* At the beginning of a line, G2 designation is cleared. */ \
|
||||||
|
if (var == iso2022jp2 && ch == 0x0a) \
|
||||||
|
set2 = UNSPECIFIED_set; \
|
||||||
} \
|
} \
|
||||||
else if (set == JISX0201_Roman_set) \
|
else if (set == JISX0201_Roman_set) \
|
||||||
{ \
|
{ \
|
||||||
|
|
@ -473,30 +494,6 @@ gconv_end (struct gconv_step *data)
|
||||||
else \
|
else \
|
||||||
written = UNKNOWN_10646_CHAR; \
|
written = UNKNOWN_10646_CHAR; \
|
||||||
} \
|
} \
|
||||||
else if (set == ISO88591_set) \
|
|
||||||
{ \
|
|
||||||
if (ch >= 0x80 && ch <= 0xff) \
|
|
||||||
{ \
|
|
||||||
*outptr++ = ch; \
|
|
||||||
written = 1; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
else if (set == ISO88597_set) \
|
|
||||||
{ \
|
|
||||||
const struct gap *rp = from_idx; \
|
|
||||||
\
|
|
||||||
while (ch > rp->end) \
|
|
||||||
++rp; \
|
|
||||||
if (ch >= rp->start) \
|
|
||||||
{ \
|
|
||||||
unsigned char res = iso88597_from_ucs4[ch + rp->idx]; \
|
|
||||||
if (res != '\0') \
|
|
||||||
{ \
|
|
||||||
*outptr++ = res | 0x80; \
|
|
||||||
written = 1; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
if (set == JISX0208_1978_set || set == JISX0208_1983_set) \
|
if (set == JISX0208_1978_set || set == JISX0208_1983_set) \
|
||||||
|
|
@ -528,6 +525,38 @@ gconv_end (struct gconv_step *data)
|
||||||
outptr += written; \
|
outptr += written; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
if (written == UNKNOWN_10646_CHAR || written == 0) \
|
||||||
|
{ \
|
||||||
|
if (set2 == ISO88591_set) \
|
||||||
|
{ \
|
||||||
|
if (ch >= 0x80 && ch <= 0xff) \
|
||||||
|
{ \
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = 'N'; \
|
||||||
|
*outptr++ = ch & 0x7f; \
|
||||||
|
written = 3; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
else if (set2 == ISO88597_set) \
|
||||||
|
{ \
|
||||||
|
const struct gap *rp = from_idx; \
|
||||||
|
\
|
||||||
|
while (ch > rp->end) \
|
||||||
|
++rp; \
|
||||||
|
if (ch >= rp->start) \
|
||||||
|
{ \
|
||||||
|
unsigned char res = iso88597_from_ucs4[ch - 0xa0 + rp->idx]; \
|
||||||
|
if (res != '\0') \
|
||||||
|
{ \
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = 'N'; \
|
||||||
|
*outptr++ = res; \
|
||||||
|
written = 3; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
\
|
||||||
if (written == UNKNOWN_10646_CHAR || written == 0) \
|
if (written == UNKNOWN_10646_CHAR || written == 0) \
|
||||||
{ \
|
{ \
|
||||||
/* Either this is an unknown character or we have to switch \
|
/* Either this is an unknown character or we have to switch \
|
||||||
|
|
@ -541,31 +570,25 @@ gconv_end (struct gconv_step *data)
|
||||||
later and now simply use a fixed order in which we test for \
|
later and now simply use a fixed order in which we test for \
|
||||||
availability */ \
|
availability */ \
|
||||||
\
|
\
|
||||||
/* First test whether we have at least three more bytes for \
|
|
||||||
the escape sequence. The two charsets which require four \
|
|
||||||
bytes will be handled later. */ \
|
|
||||||
if (NEED_LENGTH_TEST && outptr + 3 > outend) \
|
|
||||||
{ \
|
|
||||||
result = GCONV_FULL_OUTPUT; \
|
|
||||||
break; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
if (ch <= 0x7f) \
|
if (ch <= 0x7f) \
|
||||||
{ \
|
{ \
|
||||||
/* We must encode using ASCII. First write out the \
|
/* We must encode using ASCII. First write out the \
|
||||||
escape sequence. */ \
|
escape sequence. */ \
|
||||||
*outptr++ = ESC; \
|
if (NEED_LENGTH_TEST && outptr + 4 > outend) \
|
||||||
*outptr++ = '('; \
|
|
||||||
*outptr++ = 'B'; \
|
|
||||||
set = ASCII_set; \
|
|
||||||
\
|
|
||||||
if (NEED_LENGTH_TEST && outptr == outend) \
|
|
||||||
{ \
|
{ \
|
||||||
result = GCONV_FULL_OUTPUT; \
|
result = GCONV_FULL_OUTPUT; \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = '('; \
|
||||||
|
*outptr++ = 'B'; \
|
||||||
|
set = ASCII_set; \
|
||||||
*outptr++ = ch; \
|
*outptr++ = ch; \
|
||||||
|
\
|
||||||
|
/* At the beginning of a line, G2 designation is cleared. */ \
|
||||||
|
if (var == iso2022jp2 && ch == 0x0a) \
|
||||||
|
set2 = UNSPECIFIED_set; \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
|
|
@ -580,17 +603,16 @@ 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. */ \
|
||||||
*outptr++ = ESC; \
|
if (NEED_LENGTH_TEST && outptr + 4 > outend) \
|
||||||
*outptr++ = '('; \
|
|
||||||
*outptr++ = 'J'; \
|
|
||||||
set = JISX0201_Roman_set; \
|
|
||||||
\
|
|
||||||
if (NEED_LENGTH_TEST && outptr == outend) \
|
|
||||||
{ \
|
{ \
|
||||||
result = GCONV_FULL_OUTPUT; \
|
result = GCONV_FULL_OUTPUT; \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = '('; \
|
||||||
|
*outptr++ = 'J'; \
|
||||||
|
set = JISX0201_Roman_set; \
|
||||||
*outptr++ = buf[0]; \
|
*outptr++ = buf[0]; \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
|
|
@ -599,17 +621,16 @@ 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. */ \
|
||||||
*outptr++ = ESC; \
|
if (NEED_LENGTH_TEST && outptr + 5 > outend) \
|
||||||
*outptr++ = '$'; \
|
|
||||||
*outptr++ = 'B'; \
|
|
||||||
set = JISX0208_1983_set; \
|
|
||||||
\
|
|
||||||
if (NEED_LENGTH_TEST && outptr + 2 > outend) \
|
|
||||||
{ \
|
{ \
|
||||||
result = GCONV_FULL_OUTPUT; \
|
result = GCONV_FULL_OUTPUT; \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = '$'; \
|
||||||
|
*outptr++ = 'B'; \
|
||||||
|
set = JISX0208_1983_set; \
|
||||||
*outptr++ = buf[0]; \
|
*outptr++ = buf[0]; \
|
||||||
*outptr++ = buf[1]; \
|
*outptr++ = buf[1]; \
|
||||||
} \
|
} \
|
||||||
|
|
@ -625,7 +646,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 + 4 > outend) \
|
if (NEED_LENGTH_TEST && outptr + 6 > outend) \
|
||||||
{ \
|
{ \
|
||||||
result = GCONV_FULL_OUTPUT; \
|
result = GCONV_FULL_OUTPUT; \
|
||||||
break; \
|
break; \
|
||||||
|
|
@ -635,13 +656,6 @@ 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]; \
|
||||||
} \
|
} \
|
||||||
|
|
@ -651,33 +665,33 @@ 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. */ \
|
||||||
*outptr++ = ESC; \
|
if (NEED_LENGTH_TEST && outptr + 4 > outend) \
|
||||||
*outptr++ = '('; \
|
|
||||||
*outptr++ = 'I'; \
|
|
||||||
set = JISX0201_Kana_set; \
|
|
||||||
\
|
|
||||||
if (NEED_LENGTH_TEST && outptr == outend) \
|
|
||||||
{ \
|
{ \
|
||||||
result = GCONV_FULL_OUTPUT; \
|
result = GCONV_FULL_OUTPUT; \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = '('; \
|
||||||
|
*outptr++ = 'I'; \
|
||||||
|
set = JISX0201_Kana_set; \
|
||||||
*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. */ \
|
||||||
*outptr++ = ESC; \
|
if (NEED_LENGTH_TEST && outptr + 6 > outend) \
|
||||||
*outptr++ = '.'; \
|
|
||||||
*outptr++ = 'A'; \
|
|
||||||
set = ISO88591_set; \
|
|
||||||
\
|
|
||||||
if (NEED_LENGTH_TEST && outptr == outend) \
|
|
||||||
{ \
|
{ \
|
||||||
result = GCONV_FULL_OUTPUT; \
|
result = GCONV_FULL_OUTPUT; \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = '.'; \
|
||||||
|
*outptr++ = 'A'; \
|
||||||
|
set2 = ISO88591_set; \
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = 'N'; \
|
||||||
*outptr++ = ch; \
|
*outptr++ = ch; \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
|
|
@ -686,28 +700,27 @@ gconv_end (struct gconv_step *data)
|
||||||
if (written != UNKNOWN_10646_CHAR) \
|
if (written != UNKNOWN_10646_CHAR) \
|
||||||
{ \
|
{ \
|
||||||
/* We use GB 2312. */ \
|
/* We use GB 2312. */ \
|
||||||
*outptr++ = ESC; \
|
if (NEED_LENGTH_TEST && outptr + 5 > outend) \
|
||||||
*outptr++ = '$'; \
|
|
||||||
*outptr++ = 'A'; \
|
|
||||||
set = GB2312_set; \
|
|
||||||
\
|
|
||||||
if (NEED_LENGTH_TEST && outptr + 2 > outend) \
|
|
||||||
{ \
|
{ \
|
||||||
result = GCONV_FULL_OUTPUT; \
|
result = GCONV_FULL_OUTPUT; \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = '$'; \
|
||||||
|
*outptr++ = 'A'; \
|
||||||
|
set = GB2312_set; \
|
||||||
*outptr++ = buf[0]; \
|
*outptr++ = buf[0]; \
|
||||||
*outptr++ = buf[1]; \
|
*outptr++ = buf[1]; \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
written = ucs4_to_ksc5601 (ch, buf, 2); \
|
written = ucs4_to_ksc5601 (ch, buf, 2); \
|
||||||
if (written != UNKNOWN_10646_CHAR) \
|
if (written != UNKNOWN_10646_CHAR) \
|
||||||
{ \
|
{ \
|
||||||
/* We use KSC 5601. */ \
|
/* We use KSC 5601. */ \
|
||||||
if (NEED_LENGTH_TEST \
|
if (NEED_LENGTH_TEST \
|
||||||
&& outptr + 4 > outend) \
|
&& outptr + 6 > outend) \
|
||||||
{ \
|
{ \
|
||||||
result = GCONV_FULL_OUTPUT; \
|
result = GCONV_FULL_OUTPUT; \
|
||||||
break; \
|
break; \
|
||||||
|
|
@ -717,21 +730,44 @@ 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]; \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
result = GCONV_ILLEGAL_INPUT; \
|
const struct gap *rp = from_idx; \
|
||||||
break; \
|
unsigned char gch = 0; \
|
||||||
|
\
|
||||||
|
while (ch > rp->end) \
|
||||||
|
++rp; \
|
||||||
|
if (ch >= rp->start) \
|
||||||
|
{ \
|
||||||
|
ch = ch - 0xa0 + rp->idx; \
|
||||||
|
gch = iso88597_from_ucs4[ch]; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
if (gch != 0) \
|
||||||
|
{ \
|
||||||
|
/* We use ISO 8859-7 greek. */ \
|
||||||
|
if (NEED_LENGTH_TEST \
|
||||||
|
&& outptr + 6 > outend) \
|
||||||
|
{ \
|
||||||
|
result = GCONV_FULL_OUTPUT; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = '.'; \
|
||||||
|
*outptr++ = 'F'; \
|
||||||
|
set2 = ISO88597_set; \
|
||||||
|
*outptr++ = ESC; \
|
||||||
|
*outptr++ = 'N'; \
|
||||||
|
*outptr++ = gch; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
result = GCONV_ILLEGAL_INPUT; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
|
|
@ -745,8 +781,8 @@ gconv_end (struct gconv_step *data)
|
||||||
inptr += 4; \
|
inptr += 4; \
|
||||||
}
|
}
|
||||||
#define EXTRA_LOOP_DECLS , enum variant var, int *setp
|
#define EXTRA_LOOP_DECLS , enum variant var, int *setp
|
||||||
#define INIT_PARAMS int set = *setp
|
#define INIT_PARAMS int set = *setp % 0x100, set2 = *setp / 0x100
|
||||||
#define UPDATE_PARAMS *setp = set
|
#define UPDATE_PARAMS *setp = (set2 << 8) + set
|
||||||
#include <iconv/loop.c>
|
#include <iconv/loop.c>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue