about summary refs log tree commit diff
path: root/iconvdata/ibm932.c
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/ibm932.c
parentbfa934e76ae3cac505610447071984b4bc4c49f5 (diff)
downloadglibc-f9ad060c7acbfd46d0a207c2da40999f8e6d4420.tar.gz
glibc-f9ad060c7acbfd46d0a207c2da40999f8e6d4420.tar.xz
glibc-f9ad060c7acbfd46d0a207c2da40999f8e6d4420.zip
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/ibm932.c')
-rw-r--r--iconvdata/ibm932.c59
1 files changed, 30 insertions, 29 deletions
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;							      \
 	      }								      \
 	  }								      \