summaryrefslogtreecommitdiff
path: root/iconvdata
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-12-02 22:39:58 +0000
committerUlrich Drepper <drepper@redhat.com>2002-12-02 22:39:58 +0000
commitf9ad060c7acbfd46d0a207c2da40999f8e6d4420 (patch)
tree6806c7540ab407d418a0d6d9650c9b818b24e32f /iconvdata
parentbfa934e76ae3cac505610447071984b4bc4c49f5 (diff)
Update.
2002-11-30 Bruno Haible <bruno@clisp.org> * 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 <stdbool.h>. (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 <stdbool.h>. (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.
Diffstat (limited to 'iconvdata')
-rw-r--r--iconvdata/8bit-gap.c15
-rw-r--r--iconvdata/8bit-generic.c9
-rw-r--r--iconvdata/ansi_x3.110.c11
-rw-r--r--iconvdata/armscii-8.c11
-rw-r--r--iconvdata/big5.c9
-rw-r--r--iconvdata/big5hkscs.c9
-rw-r--r--iconvdata/cp1255.c9
-rw-r--r--iconvdata/cp1258.c16
-rw-r--r--iconvdata/euc-cn.c9
-rw-r--r--iconvdata/euc-jisx0213.c7
-rw-r--r--iconvdata/euc-jp.c7
-rw-r--r--iconvdata/euc-kr.c9
-rw-r--r--iconvdata/euc-tw.c7
-rw-r--r--iconvdata/gb18030.c7
-rw-r--r--iconvdata/gbbig5.c4
-rw-r--r--iconvdata/gbk.c9
-rw-r--r--iconvdata/ibm932.c59
-rw-r--r--iconvdata/ibm932.h8
-rw-r--r--iconvdata/ibm943.c60
-rw-r--r--iconvdata/ibm943.h8
-rw-r--r--iconvdata/isiri-3342.c7
-rw-r--r--iconvdata/iso8859-1.c4
-rw-r--r--iconvdata/iso_6937-2.c9
-rw-r--r--iconvdata/iso_6937.c9
-rw-r--r--iconvdata/johab.c7
-rw-r--r--iconvdata/shift_jisx0213.c14
-rw-r--r--iconvdata/sjis.c14
-rw-r--r--iconvdata/t.61.c9
-rw-r--r--iconvdata/tcvn5712-1.c14
-rw-r--r--iconvdata/uhc.c9
30 files changed, 292 insertions, 87 deletions
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <dlfcn.h>
#include <stdint.h>
+#include <stdbool.h>
#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 <iconv/loop.c>
/* 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 <washi@jp.ibm.com>, 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 <dlfcn.h>
#include <stdint.h>
+#include <stdbool.h>
#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 <iconv/loop.c>
/* 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 <washi@jp.ibm.com>, 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 <drepper@cygnus.com>, 1999.
@@ -24,6 +24,9 @@
#define TABLES <isiri-3342.h>
#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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>
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 <iconv/loop.c>