From f9ad060c7acbfd46d0a207c2da40999f8e6d4420 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 2 Dec 2002 22:39:58 +0000 Subject: Update. 2002-11-30 Bruno Haible * iconv/gconv.h (__gconv_btowc_fct): New typedef. (struct __gconv_step): New field __btowc_fct. * wcsmbs/btowc.c (__btowc): Use the __btowc_fct shortcut if possible. * iconv/gconv_int.h (__BUILTIN_TRANSFORM): Renamed from __BUILTIN_TRANS. (__gconv_btwoc_ascii): New declaration. * iconv/gconv_simple.c (BUILTIN_TRANSFORMATION): Add BtowcFct argument. (__gconv_btwoc_ascii): New function. * iconv/gconv_builtin.h: Add BtowcFct argument to all BUILTIN_TRANSFORMATION invocations. * iconv/gconv_conf.c (BUILTIN_TRANSFORMATION): Add BtowcFct argument. * iconv/iconvconfig.c (BUILTIN_TRANSFORMATION): Likewise. * iconv/gconv_builtin.c (map): New field btowc_fct. (BUILTIN_TRANSFORMATION): Add BtowcFct argument. Use it to initialize btowc_fct field. (__gconv_get_builtin_trans): Initialize __btowc_fct field. * iconv/gconv_cache.c (find_module): Initialize __btowc_fct field. * iconv/gconv_db.c (gen_steps, increment_counter): Likewise. * wcsmbs/wcsmbsload.c (to_wc, to_mb): Likewise. * iconv/skeleton.c: Document STORE_REST and FROM_ONEBYTE. (gconv_init): Initialize __btowc_fct field. Undefine EXTRA_LOOP_ARGS and FROM_ONEBYTE at the end. * iconv/loop.c: Document ONEBYTE_BODY. (gconv_btowc, FROM_ONEBYTE): Define if ONEBYTE_BODY is defined. Undefine ONEBYTE_BODY at the end. * iconvdata/8bit-generic.c (ONEBYTE_BODY): New macro. * iconvdata/8bit-gap.c (NONNUL): New macro. (BODY for FROM_LOOP): Use it. (ONEBYTE_BODY): New macro. * iconvdata/isiri-3342.c (HAS_HOLES): Set to 1. (NONNUL): New macro. * iconvdata/ansi_x3.110.c (ONEBYTE_BODY): New macro. * iconvdata/armscii-8.c (ONEBYTE_BODY): New macro. * iconvdata/cp1255.c (ONEBYTE_BODY): New macro. * iconvdata/cp1258.c (ONEBYTE_BODY): New macro. * iconvdata/tcvn5712-1.c (ONEBYTE_BODY): New macro. * iconvdata/big5.c (ONEBYTE_BODY): New macro. * iconvdata/big5hkscs.c (ONEBYTE_BODY): New macro. * iconvdata/euc-cn.c (ONEBYTE_BODY): New macro. * iconvdata/euc-jp.c (ONEBYTE_BODY): New macro. * iconvdata/euc-jisx0213.c (ONEBYTE_BODY): New macro. * iconvdata/euc-kr.c (ONEBYTE_BODY): New macro. * iconvdata/euc-tw.c (ONEBYTE_BODY): New macro. * iconvdata/gbk.c (ONEBYTE_BODY): New macro. * iconvdata/gb18030.c (ONEBYTE_BODY): New macro. * iconvdata/ibm932.c: Include . (TRUE, FALSE): Remove macros. (BODY for FROM_LOOP): Remove unused variable rp1. (ONEBYTE_BODY): New macro. (BODY for TO_LOOP): Use bool. * iconvdata/ibm932.h (__ibm932sb_to_ucs4_idx): Remove array. * iconvdata/ibm943.c: Include . (TRUE, FALSE): Remove macros. (BODY for FROM_LOOP): Remove unused variable rp1. (ONEBYTE_BODY): New macro. (BODY for TO_LOOP): Use bool. * iconvdata/ibm943.h (__ibm943sb_to_ucs4_idx): Remove array. * iconvdata/iso8859-1.c (ONEBYTE_BODY): New macro. * iconvdata/iso_6937-2.c (ONEBYTE_BODY): New macro. * iconvdata/iso_6937.c (ONEBYTE_BODY): New macro. * iconvdata/johab.c (ONEBYTE_BODY): New macro. * iconvdata/sjis.c (ONEBYTE_BODY): New macro. * iconvdata/shift_jisx0213.c (ONEBYTE_BODY): New macro. * iconvdata/t.61.c (ONEBYTE_BODY): New macro. * iconvdata/uhc.c (ONEBYTE_BODY): New macro. * iconvdata/gbbig5.c: Tweak comment. --- iconvdata/8bit-gap.c | 15 +++++++++++- iconvdata/8bit-generic.c | 9 +++++++ iconvdata/ansi_x3.110.c | 11 ++++++++- iconvdata/armscii-8.c | 11 +++++++++ iconvdata/big5.c | 9 ++++++- iconvdata/big5hkscs.c | 9 ++++++- iconvdata/cp1255.c | 9 +++++++ iconvdata/cp1258.c | 16 +++++++++++++ iconvdata/euc-cn.c | 9 ++++++- iconvdata/euc-jisx0213.c | 7 ++++++ iconvdata/euc-jp.c | 7 ++++++ iconvdata/euc-kr.c | 9 ++++++- iconvdata/euc-tw.c | 7 ++++++ iconvdata/gb18030.c | 7 ++++++ iconvdata/gbbig5.c | 4 ++-- iconvdata/gbk.c | 9 ++++++- iconvdata/ibm932.c | 59 +++++++++++++++++++++++---------------------- iconvdata/ibm932.h | 8 +------ iconvdata/ibm943.c | 60 ++++++++++++++++++++++++---------------------- iconvdata/ibm943.h | 8 +------ iconvdata/isiri-3342.c | 7 ++++-- iconvdata/iso8859-1.c | 4 ++++ iconvdata/iso_6937-2.c | 9 ++++++- iconvdata/iso_6937.c | 9 ++++++- iconvdata/johab.c | 7 ++++++ iconvdata/shift_jisx0213.c | 14 +++++++++++ iconvdata/sjis.c | 14 +++++++++++ iconvdata/t.61.c | 9 ++++++- iconvdata/tcvn5712-1.c | 14 +++++++++++ iconvdata/uhc.c | 9 ++++++- 30 files changed, 292 insertions(+), 87 deletions(-) (limited to 'iconvdata') diff --git a/iconvdata/8bit-gap.c b/iconvdata/8bit-gap.c index 2ddc49eb64..9d48d170ba 100644 --- a/iconvdata/8bit-gap.c +++ b/iconvdata/8bit-gap.c @@ -32,6 +32,10 @@ struct gap /* Now we can include the tables. */ #include TABLES +#ifndef NONNUL +# define NONNUL(c) ((c) != '\0') +#endif + #define FROM_LOOP from_gap #define TO_LOOP to_gap @@ -49,7 +53,7 @@ struct gap { \ uint32_t ch = to_ucs4[*inptr]; \ \ - if (HAS_HOLES && __builtin_expect (ch, L'\1') == L'\0' && *inptr != '\0') \ + if (HAS_HOLES && __builtin_expect (ch == L'\0', 0) && NONNUL (*inptr)) \ { \ /* This is an illegal character. */ \ STANDARD_FROM_LOOP_ERR_HANDLER (1); \ @@ -63,6 +67,15 @@ struct gap ++inptr; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + uint32_t ch = to_ucs4[c]; \ + \ + if (HAS_HOLES && __builtin_expect (ch == L'\0', 0) && NONNUL (c)) \ + return WEOF; \ + else \ + return ch; \ + } #include diff --git a/iconvdata/8bit-generic.c b/iconvdata/8bit-generic.c index 6ed5532693..373289f84d 100644 --- a/iconvdata/8bit-generic.c +++ b/iconvdata/8bit-generic.c @@ -47,6 +47,15 @@ ++inptr; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + uint32_t ch = to_ucs4[c]; \ + \ + if (HAS_HOLES && __builtin_expect (ch == L'\0', 0) && c != '\0') \ + return WEOF; \ + else \ + return ch; \ + } #include diff --git a/iconvdata/ansi_x3.110.c b/iconvdata/ansi_x3.110.c index 08746cf5f7..b20e12a79c 100644 --- a/iconvdata/ansi_x3.110.c +++ b/iconvdata/ansi_x3.110.c @@ -404,7 +404,7 @@ static const char from_ucs4[][2] = \ if (__builtin_expect (ch >= 0xc1, 0) && ch <= 0xcf) \ { \ - /* Composed character. First test whether the next character \ + /* Composed character. First test whether the next byte \ is also available. */ \ uint32_t ch2; \ \ @@ -449,6 +449,15 @@ static const char from_ucs4[][2] = inptr += incr; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + uint32_t ch = to_ucs4[c]; \ + \ + if (__builtin_expect (ch == 0, 0) && c != '\0') \ + return WEOF; \ + else \ + return ch; \ + } #include diff --git a/iconvdata/armscii-8.c b/iconvdata/armscii-8.c index b3db9a99a8..dbaf8be2ee 100644 --- a/iconvdata/armscii-8.c +++ b/iconvdata/armscii-8.c @@ -71,6 +71,17 @@ static const uint16_t map_from_armscii_8[0xfe - 0xa2 + 1] = ++inptr; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c <= 0xa0) \ + /* Upto and including 0xa0 the ARMSCII-8 corresponds to Unicode. */ \ + return c; \ + else if (c >= 0xa2 && c <= 0xfe) \ + /* Use the table. */ \ + return map_from_armscii_8[c - 0xa2]; \ + else \ + return WEOF; \ + } #include diff --git a/iconvdata/big5.c b/iconvdata/big5.c index 22c3ab6ddd..cdf8a76c5d 100644 --- a/iconvdata/big5.c +++ b/iconvdata/big5.c @@ -8397,7 +8397,7 @@ static const char from_ucs4_tab15[][2] = \ if (ch >= 0xa1 && ch <= 0xf9) \ { \ - /* Two-byte character. First test whether the next character \ + /* Two-byte character. First test whether the next byte \ is also available. */ \ uint32_t ch2; \ int idx; \ @@ -8447,6 +8447,13 @@ static const char from_ucs4_tab15[][2] = outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c <= 0x80) \ + return c; \ + else \ + return WEOF; \ + } #include diff --git a/iconvdata/big5hkscs.c b/iconvdata/big5hkscs.c index 0903968669..b1aedd171b 100644 --- a/iconvdata/big5hkscs.c +++ b/iconvdata/big5hkscs.c @@ -16817,7 +16817,7 @@ static struct \ if (ch >= 0x81 && ch <= 0xfe) \ { \ - /* Two-byte character. First test whether the next character \ + /* Two-byte character. First test whether the next byte \ is also available. */ \ uint32_t ch2; \ int idx; \ @@ -16852,6 +16852,13 @@ static struct outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c <= 0x80) \ + return c; \ + else \ + return WEOF; \ + } #include diff --git a/iconvdata/cp1255.c b/iconvdata/cp1255.c index 19edb27a66..6cccf526e6 100644 --- a/iconvdata/cp1255.c +++ b/iconvdata/cp1255.c @@ -321,6 +321,15 @@ static const struct { unsigned int idx; unsigned int len; } comp_table[8] = { } #define LOOP_NEED_FLAGS #define EXTRA_LOOP_DECLS , int *statep +#define ONEBYTE_BODY \ + { \ + if (c < 0x80) \ + return c; \ + uint32_t ch = to_ucs4[c - 0x80]; \ + if (ch == L'\0' || (ch >= 0x05d0 && ch <= 0x05f2)) \ + return WEOF; \ + return ch; \ + } #include diff --git a/iconvdata/cp1258.c b/iconvdata/cp1258.c index 853ef63531..553d50b443 100644 --- a/iconvdata/cp1258.c +++ b/iconvdata/cp1258.c @@ -480,6 +480,22 @@ static const struct } #define LOOP_NEED_FLAGS #define EXTRA_LOOP_DECLS , int *statep +#define ONEBYTE_BODY \ + { \ + uint32_t ch; \ + \ + if (c < 0x80) \ + ch = c; \ + else \ + { \ + ch = to_ucs4[c - 0x80]; \ + if (ch == L'\0') \ + return WEOF; \ + } \ + if (ch >= 0x0041 && ch <= 0x01b0) \ + return WEOF; \ + return ch; \ + } #include diff --git a/iconvdata/euc-cn.c b/iconvdata/euc-cn.c index c1bcadb35b..f912317876 100644 --- a/iconvdata/euc-cn.c +++ b/iconvdata/euc-cn.c @@ -54,7 +54,7 @@ else \ { \ /* Two or more byte character. First test whether the \ - next character is also available. */ \ + next byte is also available. */ \ const unsigned char *endp; \ \ if (__builtin_expect (inptr + 1 >= inend, 0)) \ @@ -88,6 +88,13 @@ outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c < 0x80) \ + return c; \ + else \ + return WEOF; \ + } #include diff --git a/iconvdata/euc-jisx0213.c b/iconvdata/euc-jisx0213.c index 733cbc15ee..dc6ccfd0cc 100644 --- a/iconvdata/euc-jisx0213.c +++ b/iconvdata/euc-jisx0213.c @@ -230,6 +230,13 @@ } #define LOOP_NEED_FLAGS #define EXTRA_LOOP_DECLS , int *statep +#define ONEBYTE_BODY \ + { \ + if (c < 0x80) \ + return c; \ + else \ + return WEOF; \ + } #include diff --git a/iconvdata/euc-jp.c b/iconvdata/euc-jp.c index 7faa080322..9cb6a47040 100644 --- a/iconvdata/euc-jp.c +++ b/iconvdata/euc-jp.c @@ -117,6 +117,13 @@ put32 (outptr, ch); \ outptr += 4; \ } +#define ONEBYTE_BODY \ + { \ + if (c < 0x8e || (c >= 0x90 && c <= 0x9f)) \ + return c; \ + else \ + return WEOF; \ + } #define LOOP_NEED_FLAGS #include diff --git a/iconvdata/euc-kr.c b/iconvdata/euc-kr.c index 37ed71fd60..7774720bd6 100644 --- a/iconvdata/euc-kr.c +++ b/iconvdata/euc-kr.c @@ -90,7 +90,7 @@ euckr_from_ucs4 (uint32_t ch, unsigned char *cp) } \ else \ { \ - /* Two-byte character. First test whether the next character \ + /* Two-byte character. First test whether the next byte \ is also available. */ \ ch = ksc5601_to_ucs4 (&inptr, inend - inptr, 0x80); \ if (__builtin_expect (ch == 0, 0)) \ @@ -108,6 +108,13 @@ euckr_from_ucs4 (uint32_t ch, unsigned char *cp) outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c <= 0x9f) \ + return c; \ + else \ + return WEOF; \ + } #include diff --git a/iconvdata/euc-tw.c b/iconvdata/euc-tw.c index 8d3b1aa1b5..6674dad397 100644 --- a/iconvdata/euc-tw.c +++ b/iconvdata/euc-tw.c @@ -112,6 +112,13 @@ outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c < 0x80) \ + return c; \ + else \ + return WEOF; \ + } #include diff --git a/iconvdata/gb18030.c b/iconvdata/gb18030.c index f6b3576416..31f3c20939 100644 --- a/iconvdata/gb18030.c +++ b/iconvdata/gb18030.c @@ -25772,6 +25772,13 @@ static const unsigned char __ucs_to_gb18030_tab2[8192][2] = *((uint32_t *) outptr)++ = ch; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c < 0x80) \ + return c; \ + else \ + return WEOF; \ + } #include diff --git a/iconvdata/gbbig5.c b/iconvdata/gbbig5.c index 695ffb2c07..b2b4743e24 100644 --- a/iconvdata/gbbig5.c +++ b/iconvdata/gbbig5.c @@ -4802,7 +4802,7 @@ const char __from_big5_to_gb2312 [13973][2] = else if (ch >= 0xa1 && ch <= 0xf7) \ { \ /* Two-byte character. First test whether the \ - next character is also available. */ \ + next byte is also available. */ \ const char *cp; \ int idx; \ \ @@ -4891,7 +4891,7 @@ const char __from_big5_to_gb2312 [13973][2] = else if (ch >= 0xa1 && ch <= 0xf9) \ { \ /* Two byte character. First test whether the \ - next character is also available. */ \ + next byte is also available. */ \ const char *cp; \ int idx; \ \ diff --git a/iconvdata/gbk.c b/iconvdata/gbk.c index a738a9eb9d..ad8a37412a 100644 --- a/iconvdata/gbk.c +++ b/iconvdata/gbk.c @@ -13154,7 +13154,7 @@ static const char __gbk_from_ucs4_tab12[][2] = else \ { \ /* Two or more byte character. First test whether the \ - next character is also available. */ \ + next byte is also available. */ \ uint32_t ch2; \ int idx; \ \ @@ -13195,6 +13195,13 @@ static const char __gbk_from_ucs4_tab12[][2] = outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c < 0x80) \ + return c; \ + else \ + return WEOF; \ + } #include diff --git a/iconvdata/ibm932.c b/iconvdata/ibm932.c index 1e87067fef..420b19ab80 100644 --- a/iconvdata/ibm932.c +++ b/iconvdata/ibm932.c @@ -20,13 +20,9 @@ #include #include +#include #include "ibm932.h" -#ifndef TRUE -#define TRUE 1 -#define FALSE 0 -#endif - #define FROM 0 #define TO 1 @@ -50,38 +46,24 @@ #define LOOPFCT FROM_LOOP #define BODY \ { \ - const struct gap *rp1 = __ibm932sb_to_ucs4_idx; \ const struct gap *rp2 = __ibm932db_to_ucs4_idx; \ uint32_t ch = *inptr; \ uint32_t res; \ \ - if (__builtin_expect (ch >= 0xffff, 0)) \ - { \ - rp1 = NULL; \ - rp2 = NULL; \ - } \ - else if (__builtin_expect (ch, 0) == 0x80 \ - || __builtin_expect (ch, 0) == 0xa0 \ - || __builtin_expect (ch, 0) == 0xfd \ - || __builtin_expect (ch, 0) == 0xfe \ - || __builtin_expect (ch, 0) == 0xff) \ + if (__builtin_expect (ch == 0x80, 0) \ + || __builtin_expect (ch == 0xa0, 0) \ + || __builtin_expect (ch == 0xfd, 0) \ + || __builtin_expect (ch == 0xfe, 0) \ + || __builtin_expect (ch == 0xff, 0)) \ { \ /* This is an illegal character. */ \ STANDARD_FROM_LOOP_ERR_HANDLER (1); \ - } \ - else \ - { \ - while (ch > rp1->end) \ - ++rp1; \ } \ \ /* Use the IBM932 table for single byte. */ \ - if (__builtin_expect (rp1 == NULL, 0) \ - || __builtin_expect (ch < rp1->start, 0) \ - || (res = __ibm932sb_to_ucs4[ch + rp1->idx], \ - __builtin_expect (res, '\1') == 0 && ch != 0)) \ + res = __ibm932sb_to_ucs4[ch]; \ + if (__builtin_expect (res == 0, 0) && ch != 0) \ { \ - \ /* Use the IBM932 table for double byte. */ \ if (__builtin_expect (inptr + 1 >= inend, 0)) \ { \ @@ -128,6 +110,25 @@ } \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c == 0x80 || c == 0xa0 || c >= 0xfd) \ + return WEOF; \ + uint32_t res = __ibm932sb_to_ucs4[c]; \ + if (res == 0 && c != 0) \ + return WEOF; \ + if (res == 0x1c) \ + res = 0x1a; \ + else if (res == 0x7f) \ + res = 0x1c; \ + else if (res == 0xa5) \ + res = 0x5c; \ + else if (res == 0x203e) \ + res = 0x7e; \ + else if (res == 0x1a) \ + res = 0x7f; \ + return res; \ + } #include /* Next, define the other direction. */ @@ -140,7 +141,7 @@ const struct gap *rp = __ucs4_to_ibm932sb_idx; \ unsigned char sc; \ uint32_t ch = get32 (inptr); \ - uint16_t found = TRUE; \ + bool found = true; \ uint32_t i; \ uint32_t low; \ uint32_t high; \ @@ -163,7 +164,7 @@ { \ \ /* Use the UCS4 table for double byte. */ \ - found = FALSE; \ + found = false; \ low = 0; \ high = (sizeof (__ucs4_to_ibm932db) >> 1) \ / sizeof (__ucs4_to_ibm932db[0][FROM]); \ @@ -178,7 +179,7 @@ else \ { \ pccode = __ucs4_to_ibm932db[i][TO]; \ - found = TRUE; \ + found = true; \ break; \ } \ } \ diff --git a/iconvdata/ibm932.h b/iconvdata/ibm932.h index 500beb80e6..464d4edcb7 100644 --- a/iconvdata/ibm932.h +++ b/iconvdata/ibm932.h @@ -1,5 +1,5 @@ /* Tables for conversion from and to IBM932. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 2000-2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Masahide Washizawa , 2000. @@ -31,12 +31,6 @@ struct gap int32_t idx; }; -static const struct gap __ibm932sb_to_ucs4_idx[] = -{ - { start: 0x0000, end: 0x00ff, idx: 0 }, - { start: 0xffff, end: 0xffff, idx: 0 } -}; - static const uint16_t __ibm932sb_to_ucs4[] = { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, diff --git a/iconvdata/ibm943.c b/iconvdata/ibm943.c index 818f6823c5..bf387bbc3e 100644 --- a/iconvdata/ibm943.c +++ b/iconvdata/ibm943.c @@ -20,13 +20,9 @@ #include #include +#include #include "ibm943.h" -#ifndef TRUE -#define TRUE 1 -#define FALSE 0 -#endif - #define FROM 0 #define TO 1 @@ -50,38 +46,25 @@ #define LOOPFCT FROM_LOOP #define BODY \ { \ - const struct gap *rp1 = __ibm943sb_to_ucs4_idx; \ const struct gap *rp2 = __ibm943db_to_ucs4_idx; \ uint32_t ch = *inptr; \ uint32_t res; \ \ - if (__builtin_expect (ch >= 0xffff, 0)) \ - { \ - rp1 = NULL; \ - rp2 = NULL; \ - } \ - else if (__builtin_expect (ch, 0) == 0x80 \ - || __builtin_expect (ch, 0) == 0xa0 \ - || __builtin_expect (ch, 0) == 0xfd \ - || __builtin_expect (ch, 0) == 0xfe \ - || __builtin_expect (ch, 0) == 0xff) \ + if (__builtin_expect (ch == 0x80, 0) \ + || __builtin_expect (ch == 0xa0, 0) \ + || __builtin_expect (ch == 0xfd, 0) \ + || __builtin_expect (ch == 0xfe, 0) \ + || __builtin_expect (ch == 0xff, 0)) \ { \ /* This is an illegal character. */ \ STANDARD_FROM_LOOP_ERR_HANDLER (1); \ - } \ - else \ - { \ - while (ch > rp1->end) \ - ++rp1; \ } \ \ /* Use the IBM943 table for single byte. */ \ - if (__builtin_expect (rp1 == NULL, 0) \ - || __builtin_expect (ch < rp1->start, 0) \ - || (res = __ibm943sb_to_ucs4[ch + rp1->idx], \ - __builtin_expect (res, '\1') == 0 && ch != 0)) \ + if (__builtin_expect (ch > 0xdf, 0) \ + || (res = __ibm943sb_to_ucs4[ch], \ + __builtin_expect (res == 0, 0) && ch != 0)) \ { \ - \ /* Use the IBM943 table for double byte. */ \ if (__builtin_expect (inptr + 1 >= inend, 0)) \ { \ @@ -128,6 +111,25 @@ } \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c == 0x80 || c == 0xa0 || c >= 0xe0) \ + return WEOF; \ + uint32_t res = __ibm943sb_to_ucs4[c]; \ + if (res == 0 && c != 0) \ + return WEOF; \ + if (res == 0x1c) \ + res = 0x1a; \ + else if (res == 0x7f) \ + res = 0x1c; \ + else if (res == 0xa5) \ + res = 0x5c; \ + else if (res == 0x203e) \ + res = 0x7e; \ + else if (res == 0x1a) \ + res = 0x7f; \ + return res; \ + } #include /* Next, define the other direction. */ @@ -140,7 +142,7 @@ const struct gap *rp = __ucs4_to_ibm943sb_idx; \ unsigned char sc; \ uint32_t ch = get32(inptr); \ - uint16_t found = TRUE; \ + bool found = true; \ uint32_t i; \ uint32_t low; \ uint32_t high; \ @@ -163,7 +165,7 @@ { \ \ /* Use the UCS4 table for double byte. */ \ - found = FALSE; \ + found = false; \ low = 0; \ high = (sizeof (__ucs4_to_ibm943db) >> 1) \ / sizeof (__ucs4_to_ibm943db[0][FROM]); \ @@ -178,7 +180,7 @@ else \ { \ pccode = __ucs4_to_ibm943db[i][TO]; \ - found = TRUE; \ + found = true; \ break; \ } \ } \ diff --git a/iconvdata/ibm943.h b/iconvdata/ibm943.h index 09a3c8d905..b523672dcb 100644 --- a/iconvdata/ibm943.h +++ b/iconvdata/ibm943.h @@ -1,5 +1,5 @@ /* Tables for conversion from and to IBM943. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 2000-2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Masahide Washizawa , 2000. @@ -31,12 +31,6 @@ struct gap int32_t idx; }; -static const struct gap __ibm943sb_to_ucs4_idx[] = -{ - { start: 0x0000, end: 0x00df, idx: 0 }, - { start: 0xffff, end: 0xffff, idx: 0 } -}; - static const uint16_t __ibm943sb_to_ucs4[] = { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, diff --git a/iconvdata/isiri-3342.c b/iconvdata/isiri-3342.c index 8b72863cce..6cc5abb458 100644 --- a/iconvdata/isiri-3342.c +++ b/iconvdata/isiri-3342.c @@ -1,5 +1,5 @@ /* Conversion from and to ISIRI-3342. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1999. @@ -24,6 +24,9 @@ #define TABLES #define CHARSET_NAME "ISIRI-3342//" -#define HAS_HOLES (*inptr > 0x80) /* 0x80 really maps to 0x0000. */ +#define HAS_HOLES 1 + +/* 0x80 really maps to 0x0000. */ +#define NONNUL(c) ((c) != '\0' && (c) != 0x80) #include <8bit-gap.c> diff --git a/iconvdata/iso8859-1.c b/iconvdata/iso8859-1.c index dc394007b8..60ab29d56f 100644 --- a/iconvdata/iso8859-1.c +++ b/iconvdata/iso8859-1.c @@ -36,6 +36,10 @@ #define LOOPFCT FROM_LOOP #define BODY \ *((uint32_t *) outptr)++ = *inptr++; +#define ONEBYTE_BODY \ + { \ + return c; \ + } #include diff --git a/iconvdata/iso_6937-2.c b/iconvdata/iso_6937-2.c index a2b174ee65..b6bf2c0696 100644 --- a/iconvdata/iso_6937-2.c +++ b/iconvdata/iso_6937-2.c @@ -402,7 +402,7 @@ static const char from_ucs4[][2] = \ if (__builtin_expect (ch >= 0xc1, 0) && ch <= 0xcf) \ { \ - /* Composed character. First test whether the next character \ + /* Composed character. First test whether the next byte \ is also available. */ \ int ch2; \ \ @@ -449,6 +449,13 @@ static const char from_ucs4[][2] = outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + uint32_t ch = to_ucs4[c]; \ + if (ch == 0 && c != '\0') \ + return WEOF; \ + return ch; \ + } #include diff --git a/iconvdata/iso_6937.c b/iconvdata/iso_6937.c index b800a4f860..16263ed033 100644 --- a/iconvdata/iso_6937.c +++ b/iconvdata/iso_6937.c @@ -394,7 +394,7 @@ static const char from_ucs4[][2] = \ if (__builtin_expect (ch >= 0xc1, 0) && ch <= 0xcf) \ { \ - /* Composed character. First test whether the next character \ + /* Composed character. First test whether the next byte \ is also available. */ \ int ch2; \ \ @@ -441,6 +441,13 @@ static const char from_ucs4[][2] = outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + uint32_t ch = to_ucs4[c]; \ + if (ch == 0 && c != '\0') \ + return WEOF; \ + return ch; \ + } #include diff --git a/iconvdata/johab.c b/iconvdata/johab.c index a83483e66e..6d6f92235c 100644 --- a/iconvdata/johab.c +++ b/iconvdata/johab.c @@ -276,6 +276,13 @@ johab_sym_hanja_to_ucs (uint_fast32_t idx, uint_fast32_t c1, uint_fast32_t c2) outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c <= 0x7f) \ + return (c == 0x5c ? 0x20a9 : c); \ + else \ + return WEOF; \ + } #include diff --git a/iconvdata/shift_jisx0213.c b/iconvdata/shift_jisx0213.c index 119e0017b9..82592ad5dc 100644 --- a/iconvdata/shift_jisx0213.c +++ b/iconvdata/shift_jisx0213.c @@ -232,6 +232,20 @@ } #define LOOP_NEED_FLAGS #define EXTRA_LOOP_DECLS , int *statep +#define ONEBYTE_BODY \ + { \ + if (c < 0x80) \ + { \ + if (c == 0x5c) \ + return 0xa5; \ + if (c == 0x7e) \ + return 0x203e; \ + return c; \ + } \ + if (c >= 0xa1 && c <= 0xdf) \ + return 0xfec0 + c; \ + return WEOF; \ + } #include diff --git a/iconvdata/sjis.c b/iconvdata/sjis.c index 285f24fdaf..4561779d44 100644 --- a/iconvdata/sjis.c +++ b/iconvdata/sjis.c @@ -4409,6 +4409,20 @@ static const char from_ucs4_extra[0x100][2] = outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c < 0x80) \ + { \ + if (c == 0x5c) \ + return 0xa5; \ + if (c == 0x7e) \ + return 0x203e; \ + return c; \ + } \ + if (c >= 0xa1 && c <= 0xdf) \ + return 0xfec0 + c; \ + return WEOF; \ + } #include diff --git a/iconvdata/t.61.c b/iconvdata/t.61.c index 5227802b22..1e84fe9226 100644 --- a/iconvdata/t.61.c +++ b/iconvdata/t.61.c @@ -387,7 +387,7 @@ static const char from_ucs4[][2] = \ if (__builtin_expect (ch >= 0xc1, 0) && ch <= 0xcf) \ { \ - /* Composed character. First test whether the next character \ + /* Composed character. First test whether the next byte \ is also available. */ \ uint32_t ch2; \ \ @@ -427,6 +427,13 @@ static const char from_ucs4[][2] = inptr += increment; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + uint32_t ch = to_ucs4[c]; \ + if (ch == 0 && c != '\0') \ + return WEOF; \ + return ch; \ + } #include diff --git a/iconvdata/tcvn5712-1.c b/iconvdata/tcvn5712-1.c index 7cd6f0161e..8194ef030d 100644 --- a/iconvdata/tcvn5712-1.c +++ b/iconvdata/tcvn5712-1.c @@ -474,6 +474,20 @@ static const struct ++inptr; \ } #define EXTRA_LOOP_DECLS , int *statep +#define ONEBYTE_BODY \ + { \ + uint32_t ch; \ + \ + if (c < 0x18) \ + ch = map_from_tcvn_low[c]; \ + else if (c >= 0x80) \ + ch = map_from_tcvn_high[c - 0x80]; \ + else \ + ch = c; \ + if (ch >= 0x0041 && ch <= 0x01b0) \ + return WEOF; \ + return ch; \ + } #include diff --git a/iconvdata/uhc.c b/iconvdata/uhc.c index 87247689c9..5d25b863ee 100644 --- a/iconvdata/uhc.c +++ b/iconvdata/uhc.c @@ -3073,7 +3073,7 @@ static const char uhc_hangul_from_ucs[11172][2] = } \ else \ { \ - /* Two-byte character. First test whether the next character \ + /* Two-byte character. First test whether the next byte \ is also available. */ \ uint32_t ch2; \ \ @@ -3147,6 +3147,13 @@ static const char uhc_hangul_from_ucs[11172][2] = outptr += 4; \ } #define LOOP_NEED_FLAGS +#define ONEBYTE_BODY \ + { \ + if (c < 0x80) \ + return c; \ + else \ + return WEOF; \ + } #include -- cgit 1.4.1