summary refs log tree commit diff
path: root/iconvdata
diff options
context:
space:
mode:
Diffstat (limited to 'iconvdata')
-rw-r--r--iconvdata/8bit-gap.c4
-rw-r--r--iconvdata/8bit-generic.c4
-rw-r--r--iconvdata/Makefile14
-rw-r--r--iconvdata/TESTS9
-rw-r--r--iconvdata/big5.c2
-rw-r--r--iconvdata/euccn.c2
-rw-r--r--iconvdata/eucjp.c2
-rw-r--r--iconvdata/euckr.c2
-rw-r--r--iconvdata/euctw.c2
-rw-r--r--iconvdata/gconv-modules125
-rw-r--r--iconvdata/iso646.c2
-rw-r--r--iconvdata/iso6937.c2
-rw-r--r--iconvdata/iso8859-1.c2
-rw-r--r--iconvdata/johab.c2
-rwxr-xr-xiconvdata/run-iconv-test.sh8
-rw-r--r--iconvdata/sjis.c2
-rw-r--r--iconvdata/t61.c2
-rw-r--r--iconvdata/testdata/ISO-8859-1..UTF812
-rw-r--r--iconvdata/testdata/ISO-8859-1012
-rw-r--r--iconvdata/testdata/ISO-8859-10..UCS2bin0 -> 788 bytes
-rw-r--r--iconvdata/testdata/ISO-8859-212
-rw-r--r--iconvdata/testdata/ISO-8859-2..UCS4bin0 -> 1576 bytes
-rw-r--r--iconvdata/testdata/ISO-8859-2..UTF812
-rw-r--r--iconvdata/testdata/ISO-8859-312
-rw-r--r--iconvdata/testdata/ISO-8859-412
-rw-r--r--iconvdata/testdata/ISO-8859-512
-rw-r--r--iconvdata/testdata/ISO-8859-612
-rw-r--r--iconvdata/testdata/ISO-8859-712
-rw-r--r--iconvdata/testdata/ISO-8859-811
-rw-r--r--iconvdata/testdata/ISO-8859-912
-rw-r--r--iconvdata/uhc.c2
31 files changed, 249 insertions, 70 deletions
diff --git a/iconvdata/8bit-gap.c b/iconvdata/8bit-gap.c
index 6c78ce5c24..a8d3c99a68 100644
--- a/iconvdata/8bit-gap.c
+++ b/iconvdata/8bit-gap.c
@@ -110,7 +110,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 	      while (cnt < inchars
 		     && (outwchars + sizeof (wchar_t) <= data->outbufsize))
 		{
-		  wchar_t ch = to_ucs4[(unsigned int) inbuf[cnt]];
+		  wchar_t ch = to_ucs4[((unsigned char *) inbuf)[cnt]];
 
 		  if (ch == L'\0' && inbuf[cnt] != '\0')
 		    {
@@ -125,6 +125,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -158,6 +159,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars < data->outbufsize)
diff --git a/iconvdata/8bit-generic.c b/iconvdata/8bit-generic.c
index 52cd540fb7..19194ad068 100644
--- a/iconvdata/8bit-generic.c
+++ b/iconvdata/8bit-generic.c
@@ -97,7 +97,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 	      while (cnt < inchars
 		     && (outwchars + sizeof (wchar_t) <= data->outbufsize))
 		{
-		  wchar_t ch = to_ucs4[(unsigned int) inbuf[cnt]];
+		  wchar_t ch = to_ucs4[((unsigned char *) inbuf)[cnt]];
 
 		  if (ch == L'\0' && inbuf[cnt] != '\0')
 		    {
@@ -112,6 +112,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -136,6 +137,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars < data->outbufsize)
diff --git a/iconvdata/Makefile b/iconvdata/Makefile
index 48d44956f6..dd1c391c6c 100644
--- a/iconvdata/Makefile
+++ b/iconvdata/Makefile
@@ -94,7 +94,8 @@ distribute := 8bit-generic.c 8bit-gap.c gap.pl gaptab.pl gconv-modules	    \
 	      ebcdic-at-de-a.c ebcdic-ca-fr.c jis0201.c jis0208.c jis0212.c \
 	      extra-module.mk euckr.c johab.c uhc.c ksc5601.c ksc5601.h	    \
 	      iso646.c big5.c eucjp.c gb2312.c gb2312.h euccn.c euctw.c	    \
-	      cns11643l1.c cns11643l1.h cns11643.h cns11643.c
+	      cns11643l1.c cns11643l1.h cns11643.h cns11643.c		    \
+	      run-iconv-test.sh $(wildcard testdata/*)
 
 # We build the transformation modules only when we build shared libs.
 ifeq (yes,$(build-shared))
@@ -208,3 +209,14 @@ $(inst_gconvdir)/gconv-modules: gconv-modules $(+force)
 endif
 
 include ../Rules
+
+.PHONY: do-iconv-test
+tests: do-iconv-test
+
+do-iconv-test: run-iconv-test.sh $(objpfx)gconv-modules \
+	       $(addprefix $(objpfx),$(modules.so)) \
+	       $(common-objdir)/iconv/iconv_prog
+	$(SHELL) -e $< $(common-objdir) > $(objpfx)iconv-test.out
+
+$(objpfx)gconv-modules: gconv-modules
+	cp $^ $@
diff --git a/iconvdata/TESTS b/iconvdata/TESTS
index 809104d60f..41d7edcaf1 100644
--- a/iconvdata/TESTS
+++ b/iconvdata/TESTS
@@ -28,3 +28,12 @@
 # N.  target coded character set.
 
 ISO-8859-1	ISO-8859-1	UTF8
+ISO-8859-2	ISO-8859-2	UCS4 UTF8
+ISO-8859-3	ISO-8859-3	UTF8
+ISO-8859-4	ISO-8859-4	UTF8
+ISO-8859-5	ISO-8859-5	UTF8
+ISO-8859-6	ISO-8859-6	UTF8
+ISO-8859-7	ISO-8859-7	UTF8
+ISO-8859-8	ISO-8859-8	UTF8
+ISO-8859-9	ISO-8859-9	UTF8
+ISO-8859-10	ISO-8859-10	UCS2 UTF8
diff --git a/iconvdata/big5.c b/iconvdata/big5.c
index bfd14fd5bb..a6a2580dd7 100644
--- a/iconvdata/big5.c
+++ b/iconvdata/big5.c
@@ -8540,6 +8540,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -8632,6 +8633,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars + extra < data->outbufsize)
diff --git a/iconvdata/euccn.c b/iconvdata/euccn.c
index e8d909768b..f683836ff7 100644
--- a/iconvdata/euccn.c
+++ b/iconvdata/euccn.c
@@ -163,6 +163,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -212,6 +213,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars + extra < data->outbufsize)
diff --git a/iconvdata/eucjp.c b/iconvdata/eucjp.c
index 4e82904c8f..e6a71cc791 100644
--- a/iconvdata/eucjp.c
+++ b/iconvdata/eucjp.c
@@ -180,6 +180,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -256,6 +257,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars + extra < data->outbufsize)
diff --git a/iconvdata/euckr.c b/iconvdata/euckr.c
index 1dfa42dbcc..2ad9478729 100644
--- a/iconvdata/euckr.c
+++ b/iconvdata/euckr.c
@@ -182,6 +182,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -226,6 +227,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars + extra < data->outbufsize)
diff --git a/iconvdata/euctw.c b/iconvdata/euctw.c
index f38db47946..fd422c1fb0 100644
--- a/iconvdata/euctw.c
+++ b/iconvdata/euctw.c
@@ -180,6 +180,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -252,6 +253,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars + extra < data->outbufsize)
diff --git a/iconvdata/gconv-modules b/iconvdata/gconv-modules
index ffdd8c321f..d5109dcf29 100644
--- a/iconvdata/gconv-modules
+++ b/iconvdata/gconv-modules
@@ -34,11 +34,6 @@
 #  name:	the real name of the character set
 
 #	from			  to			module		cost
-alias	ISO-10646//		ISO-10646/UCS4/
-alias	10646-1:1993//		ISO-10646/UCS4/
-alias	10646-1:1993/UCS4/	ISO-10646/UCS4/
-
-#	from			  to			module		cost
 alias	ISO-IR-6//		ANSI_X3.4-1968//
 alias	ANSI_X3.4-1986//	ANSI_X3.4-1968//
 alias	ISO_646.IRV:1991//	ANSI_X3.4-1968//
@@ -48,15 +43,15 @@ alias	US-ASCII//		ANSI_X3.4-1968//
 alias	US//			ANSI_X3.4-1968//
 alias	IBM367//		ANSI_X3.4-1968//
 alias	CP367//			ANSI_X3.4-1968//
-module	ANSI_X3.4-1968//	ISO-10646/UCS4/		ISO646		2
-module	ISO-10646/UCS4/		ANSI_X3.4-1968//	ISO646		2
+module	ANSI_X3.4-1968//	INTERNAL		ISO646		2
+module	INTERNAL		ANSI_X3.4-1968//	ISO646		2
 
 alias	ISO-IR-4//		BS_4730//
 alias	ISO646-GB//		BS_4730//
 alias	GB//			BS_4730//
 alias	UK//			BS_4730//
-module	BS_4730//		ISO-10646/UCS4/		ISO646		2
-module	ISO-10646/UCS4/		BS_4730//		ISO646		2
+module	BS_4730//		INTERNAL		ISO646		2
+module	INTERNAL		BS_4730//		ISO646		2
 
 #	from			  to			module		cost
 alias	ISO-IR-100//		ISO-8859-1//
@@ -66,8 +61,8 @@ alias	LATIN1//		ISO-8859-1//
 alias	L1//			ISO-8859-1//
 alias	IBM819//		ISO-8859-1//
 alias	CP819//			ISO-8859-1//
-module	ISO-8859-1//		ISO-10646/UCS4/		ISO8859-1	1
-module	ISO-10646/UCS4/		ISO-8859-1//		ISO8859-1	1
+module	ISO-8859-1//		INTERNAL		ISO8859-1	1
+module	INTERNAL		ISO-8859-1//		ISO8859-1	1
 
 #	from			  to			module		cost
 alias	ISO-IR-101//		ISO-8859-2//
@@ -75,8 +70,8 @@ alias	ISO_8859-2:1987//	ISO-8859-2//
 alias	ISO_8859-2//		ISO-8859-2//
 alias	LATIN2//		ISO-8859-2//
 alias	L2//			ISO-8859-2//
-module	ISO-8859-2//		ISO-10646/UCS4/		ISO8859-2	1
-module	ISO-10646/UCS4/		ISO-8859-2//		ISO8859-2	1
+module	ISO-8859-2//		INTERNAL		ISO8859-2	1
+module	INTERNAL		ISO-8859-2//		ISO8859-2	1
 
 #	from			  to			 module		cost
 alias	ISO-IR-109//		ISO-8859-3//
@@ -84,8 +79,8 @@ alias	ISO_8859-3:1988//	ISO-8859-3//
 alias	ISO_8859-3//		ISO-8859-3//
 alias	LATIN3//		ISO-8859-3//
 alias	L3//			ISO-8859-3//
-module	ISO-8859-3//		ISO-10646/UCS4/		ISO8859-3	1
-module	ISO-10646/UCS4/		ISO-8859-3//		ISO8859-3	1
+module	ISO-8859-3//		INTERNAL		ISO8859-3	1
+module	INTERNAL		ISO-8859-3//		ISO8859-3	1
 
 #	from			  to			module		cost
 alias	ISO-IR-110//		ISO-8859-4//
@@ -93,16 +88,16 @@ alias	ISO_8859-4:1988//	ISO-8859-4//
 alias	ISO_8859-4//		ISO-8859-4//
 alias	LATIN4//		ISO-8859-4//
 alias	L4//			ISO-8859-4//
-module	ISO-8859-4//		ISO-10646/UCS4/		ISO8859-4	1
-module	ISO-10646/UCS4/		ISO-8859-4//		ISO8859-4	1
+module	ISO-8859-4//		INTERNAL		ISO8859-4	1
+module	INTERNAL		ISO-8859-4//		ISO8859-4	1
 
 #	from			  to			module		cost
 alias	ISO-IR-144//		ISO-8859-5//
 alias	ISO_8859-5:1988//	ISO-8859-5//
 alias	ISO_8859-5//		ISO-8859-5//
 alias	CYRILLIC//		ISO-8859-5//
-module	ISO-8859-5//		ISO-10646/UCS4/		ISO8859-5	1
-module	ISO-10646/UCS4/		ISO-8859-5//		ISO8859-5	1
+module	ISO-8859-5//		INTERNAL		ISO8859-5	1
+module	INTERNAL		ISO-8859-5//		ISO8859-5	1
 
 #	from			  to			module		cost
 alias	ISO-IR-127//		ISO-8859-6//
@@ -111,8 +106,8 @@ alias	ISO_8859-6//		ISO-8859-6//
 alias	ECMA-114//		ISO-8859-6//
 alias	ASMO-708//		ISO-8859-6//
 alias	ARABIC//		ISO-8859-6//
-module	ISO-8859-6//		ISO-10646/UCS4/		ISO8859-6	1
-module	ISO-10646/UCS4/		ISO-8859-6//		ISO8859-6	1
+module	ISO-8859-6//		INTERNAL		ISO8859-6	1
+module	INTERNAL		ISO-8859-6//		ISO8859-6	1
 
 #	from			  to			module		cost
 alias	ISO-IR-126//		ISO-8859-7//
@@ -122,16 +117,16 @@ alias	ELOT_928//		ISO-8859-7//
 alias	ECMA-118//		ISO-8859-7//
 alias	GREEK//			ISO-8859-7//
 alias	GREEK8//		ISO-8859-7//
-module	ISO-8859-7//		ISO-10646/UCS4/		ISO8859-7	1
-module	ISO-10646/UCS4/		ISO-8859-7//		ISO8859-7	1
+module	ISO-8859-7//		INTERNAL		ISO8859-7	1
+module	INTERNAL		ISO-8859-7//		ISO8859-7	1
 
 #	from			  to			module		cost
 alias	ISO-IR-138//		ISO-8859-8//
 alias	ISO_8859-8:1988//	ISO-8859-8//
 alias	ISO_8859-8//		ISO-8859-8//
 alias	HEBREW//		ISO-8859-8//
-module	ISO-8859-8//		ISO-10646/UCS4/		ISO8859-8	1
-module	ISO-10646/UCS4/		ISO-8859-8//		ISO8859-8	1
+module	ISO-8859-8//		INTERNAL		ISO8859-8	1
+module	INTERNAL		ISO-8859-8//		ISO8859-8	1
 
 #	from			  to			module		cost
 alias	ISO-IR-148//		ISO-8859-9//
@@ -139,8 +134,8 @@ alias	ISO_8859-9:1989//	ISO-8859-9//
 alias	ISO_8859-9//		ISO-8859-9//
 alias	LATIN5//		ISO-8859-9//
 alias	L5//			ISO-8859-9//
-module	ISO-8859-9//		ISO-10646/UCS4/		ISO8859-9	1
-module	ISO-10646/UCS4/		ISO-8859-9//		ISO8859-9	1
+module	ISO-8859-9//		INTERNAL		ISO8859-9	1
+module	INTERNAL		ISO-8859-9//		ISO8859-9	1
 
 #	from			  to			module		cost
 alias	ISO-IR-157//		ISO-8859-10//
@@ -148,96 +143,96 @@ alias	ISO_8859-10:1993//	ISO-8859-10//
 alias	ISO_8859-10//		ISO-8859-10//
 alias	LATIN6//		ISO-8859-10//
 alias	L6//			ISO-8859-10//
-module	ISO-8859-10//		ISO-10646/UCS4/		ISO8859-10	1
-module	ISO-10646/UCS4/		ISO-8859-10//		ISO8859-10	1
+module	ISO-8859-10//		INTERNAL		ISO8859-10	1
+module	INTERNAL		ISO-8859-10//		ISO8859-10	1
 
 #	from			  to			module		cost
 alias	T.61//			T.61-8BIT//
 alias	ISO-IR-103//		T.61-8BIT//
-module	T.61-8BIT//		ISO-10646/UCS4/		T.61		1
-module	ISO-10646/UCS4/		T.61-8BIT//		T.61		1
+module	T.61-8BIT//		INTERNAL		T.61		1
+module	INTERNAL		T.61-8BIT//		T.61		1
 
 #	from			  to			module		cost
 alias	ISO-IR-156//		ISO_6937//
 alias	ISO_6937:1992//		ISO_6937//
 alias	ISO6937//		ISO_6937//
-module	ISO_6937//		ISO-10646/UCS4/		ISO_6937	1
-module	ISO-10646/UCS4/		ISO_6937//		ISO_6937	1
+module	ISO_6937//		INTERNAL		ISO_6937	1
+module	INTERNAL		ISO_6937//		ISO_6937	1
 
 #	from			  to			module		cost
 alias	SHIFT-JIS//		SJIS//
-module	SJIS//			ISO-10646/UCS4/		SJIS		1
-module	ISO-10646/UCS4/		SJIS//			SJIS		1
+module	SJIS//			INTERNAL		SJIS		1
+module	INTERNAL		SJIS//			SJIS		1
 
 #	from			  to			module		cost
-module	KOI-8//			ISO-10646/UCS4/		KOI-8		1
-module	ISO-10646/UCS4/		KOI-8//			KOI-8		1
+module	KOI-8//			INTERNAL		KOI-8		1
+module	INTERNAL		KOI-8//			KOI-8		1
 
 #	from			  to			module		cost
-module	KOI8-R//		ISO-10646/UCS4/		KOI8-R		1
-module	ISO-10646/UCS4/		KOI8-R//		KOI8-R		1
+module	KOI8-R//		INTERNAL		KOI8-R		1
+module	INTERNAL		KOI8-R//		KOI8-R		1
 
 #	from			  to			module		cost
 alias	ISO-IR-19//		LATIN-GREEK//
-module	LATIN-GREEK//		ISO-10646/UCS4/		LATIN-GREEK	1
-module	ISO-10646/UCS4/		LATIN-GREEK//		LATIN-GREEK	1
+module	LATIN-GREEK//		INTERNAL		LATIN-GREEK	1
+module	INTERNAL		LATIN-GREEK//		LATIN-GREEK	1
 
 #	from			  to			module		cost
 alias	ISO-IR-27//		LATIN-GREEK//
-module	LATIN-GREEK-1//		ISO-10646/UCS4/		LATIN-GREEK-1	1
-module	ISO-10646/UCS4/		LATIN-GREEK-1//		LATIN-GREEK-1	1
+module	LATIN-GREEK-1//		INTERNAL		LATIN-GREEK-1	1
+module	INTERNAL		LATIN-GREEK-1//		LATIN-GREEK-1	1
 
 #	from			  to			module		cost
 alias	ROMAN8//		HP-ROMAN8//
 alias	R8//			HP-ROMAN8//
-module	HP-ROMAN8//		ISO-10646/UCS4/		HP-ROMAN8	1
-module	ISO-10646/UCS4/		HP-ROMAN8//		HP-ROMAN8	1
+module	HP-ROMAN8//		INTERNAL		HP-ROMAN8	1
+module	INTERNAL		HP-ROMAN8//		HP-ROMAN8	1
 
 #	from			  to			module		cost
-module	EBCDIC-AT-DE//		ISO-10646/UCS4/		EBCDIC-AT-DE	1
-module	ISO-10646/UCS4/		EBCDIC-AT-DE//		EBCDIC-AT-DE	1
+module	EBCDIC-AT-DE//		INTERNAL		EBCDIC-AT-DE	1
+module	INTERNAL		EBCDIC-AT-DE//		EBCDIC-AT-DE	1
 
 #	from			  to			module		cost
-module	EBCDIC-AT-DE-A//	ISO-10646/UCS4/		EBCDIC-AT-DE-A	1
-module	ISO-10646/UCS4/		EBCDIC-AT-DE-A//	EBCDIC-AT-DE-A	1
+module	EBCDIC-AT-DE-A//	INTERNAL		EBCDIC-AT-DE-A	1
+module	INTERNAL		EBCDIC-AT-DE-A//	EBCDIC-AT-DE-A	1
 
 #	from			  to			module		cost
-module	EBCDIC-CA-FR//		ISO-10646/UCS4/		EBCDIC-CA-FR	1
-module	ISO-10646/UCS4/		EBCDIC-CA-FR//		EBCDIC-CA-FR	1
+module	EBCDIC-CA-FR//		INTERNAL		EBCDIC-CA-FR	1
+module	INTERNAL		EBCDIC-CA-FR//		EBCDIC-CA-FR	1
 
 #	from			  to			module		cost
 alias	EUCKR//			EUC-KR//
-module	EUC-KR//		ISO-10646/UCS4/		EUC-KR		1
-module	ISO-10646/UCS4/		EUC-KR//		EUC-KR		1
+module	EUC-KR//		INTERNAL		EUC-KR		1
+module	INTERNAL		EUC-KR//		EUC-KR		1
 
 #	from			  to			module		cost
 alias	MSCP949//		UHC//
-module	UHC//			ISO-10646/UCS4/		UHC		1
-module	ISO-10646/UCS4/		UHC//			UHC		1
+module	UHC//			INTERNAL		UHC		1
+module	INTERNAL		UHC//			UHC		1
 
 #	from			  to			module		cost
 alias	MSCP1361//		JOHAB//
-module	JOHAB//			ISO-10646/UCS4/		JOHAB		1
-module	ISO-10646/UCS4/		JOHAB//			JOHAB		1
+module	JOHAB//			INTERNAL		JOHAB		1
+module	INTERNAL		JOHAB//			JOHAB		1
 
 #	from			  to			module		cost
 alias	BIG-FIVE//		BIG5//
 alias	BIGFIVE//		BIG5//
 alias	BIG-5//			BIG5//
-module	BIG5//			ISO-10646/UCS4/		BIG5		1
-module	ISO-10646/UCS4/		BIG5//			BIG5		1
+module	BIG5//			INTERNAL		BIG5		1
+module	INTERNAL		BIG5//			BIG5		1
 
 #	from			  to			module		cost
 alias	EUCJP//			EUC-JP//
-module	EUC-JP//		ISO-10646/UCS4/		EUC-JP		1
-module	ISO-10646/UCS4/		EUC-JP//		EUC-JP		1
+module	EUC-JP//		INTERNAL		EUC-JP		1
+module	INTERNAL		EUC-JP//		EUC-JP		1
 
 #	from			  to			module		cost
 alias	EUCCN//			EUC-CN//
-module	EUC-CN//		ISO-10646/UCS4/		EUC-CN		1
-module	ISO-10646/UCS4/		EUC-CN//		EUC-CN		1
+module	EUC-CN//		INTERNAL		EUC-CN		1
+module	INTERNAL		EUC-CN//		EUC-CN		1
 
 #	from			  to			module		cost
 alias	EUCTW//			EUC-TW//
-module	EUC-TW//		ISO-10646/UCS4/		EUC-TW		1
-module	ISO-10646/UCS4/		EUC-TW//		EUC-TW		1
+module	EUC-TW//		INTERNAL		EUC-TW		1
+module	INTERNAL		EUC-TW//		EUC-TW		1
diff --git a/iconvdata/iso646.c b/iconvdata/iso646.c
index a9705f0636..53ca76cb14 100644
--- a/iconvdata/iso646.c
+++ b/iconvdata/iso646.c
@@ -195,6 +195,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		}
 	    out_from:
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -243,6 +244,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		}
 	    out_to:
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars < data->outbufsize)
diff --git a/iconvdata/iso6937.c b/iconvdata/iso6937.c
index 30c3831a29..21e3ab4898 100644
--- a/iconvdata/iso6937.c
+++ b/iconvdata/iso6937.c
@@ -492,6 +492,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -593,6 +594,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars + extra < data->outbufsize)
diff --git a/iconvdata/iso8859-1.c b/iconvdata/iso8859-1.c
index ab69c4d1a4..b9484a06b7 100644
--- a/iconvdata/iso8859-1.c
+++ b/iconvdata/iso8859-1.c
@@ -104,6 +104,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -129,6 +130,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars < data->outbufsize)
diff --git a/iconvdata/johab.c b/iconvdata/johab.c
index 51b235c924..c9912a71d0 100644
--- a/iconvdata/johab.c
+++ b/iconvdata/johab.c
@@ -408,6 +408,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -462,6 +463,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars + extra < data->outbufsize)
diff --git a/iconvdata/run-iconv-test.sh b/iconvdata/run-iconv-test.sh
index 2ef394d4a3..ebafa2f298 100755
--- a/iconvdata/run-iconv-test.sh
+++ b/iconvdata/run-iconv-test.sh
@@ -44,14 +44,18 @@ while read from to targets; do
   for t in $targets; do
     $ICONV -f $from -t $t testdata/$from > $temp1 ||
       { echo "*** conversion from $from to $t failed"; exit 1; }
+    if test -s testdata/$from..$t; then
+      cmp $temp1 testdata/$from..$t >& /dev/null ||
+	{ echo "*** $from -> $t conversion failed"; exit 1; }
+    fi
     $ICONV -f $t -t $to -o $temp2 $temp1 ||
       { echo "*** conversion from $t to $to failed"; exit 1; }
     test -s $temp1 && cmp testdata/$from $temp2 >& /dev/null ||
-      { echo "*** $from -> $t -> $to conversion failed"; exit 1; }
+      { echo "*** $from -> t -> $to conversion failed"; exit 1; }
 
     # All tests ok.
     echo "$from -> $t -> $to ok"
-    #rm -f $name1 $name2
+    rm -f $temp1 $temp2
   done
 done < TESTS
 
diff --git a/iconvdata/sjis.c b/iconvdata/sjis.c
index 7a81c017e9..33dc2f1d65 100644
--- a/iconvdata/sjis.c
+++ b/iconvdata/sjis.c
@@ -4128,6 +4128,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -4181,6 +4182,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars + extra < data->outbufsize)
diff --git a/iconvdata/t61.c b/iconvdata/t61.c
index d532438bf9..b77ee71248 100644
--- a/iconvdata/t61.c
+++ b/iconvdata/t61.c
@@ -483,6 +483,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -542,6 +543,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars + extra < data->outbufsize)
diff --git a/iconvdata/testdata/ISO-8859-1..UTF8 b/iconvdata/testdata/ISO-8859-1..UTF8
new file mode 100644
index 0000000000..8ad5d2cb1c
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-1..UTF8
@@ -0,0 +1,12 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯
+ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿
+ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
+ Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
+ à á â ã ä å æ ç è é ê ë ì í î ï
+ ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
diff --git a/iconvdata/testdata/ISO-8859-10 b/iconvdata/testdata/ISO-8859-10
new file mode 100644
index 0000000000..7d3f9b2d8f
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-10
@@ -0,0 +1,12 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+                
+                
+                
+                
+                
+                
diff --git a/iconvdata/testdata/ISO-8859-10..UCS2 b/iconvdata/testdata/ISO-8859-10..UCS2
new file mode 100644
index 0000000000..0764f068f4
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-10..UCS2
Binary files differdiff --git a/iconvdata/testdata/ISO-8859-2 b/iconvdata/testdata/ISO-8859-2
new file mode 100644
index 0000000000..7d3f9b2d8f
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-2
@@ -0,0 +1,12 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+                
+                
+                
+                
+                
+                
diff --git a/iconvdata/testdata/ISO-8859-2..UCS4 b/iconvdata/testdata/ISO-8859-2..UCS4
new file mode 100644
index 0000000000..1795522591
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-2..UCS4
Binary files differdiff --git a/iconvdata/testdata/ISO-8859-2..UTF8 b/iconvdata/testdata/ISO-8859-2..UTF8
new file mode 100644
index 0000000000..5428c1fd85
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-2..UTF8
@@ -0,0 +1,12 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+   Ą ˘ Ł ¤ Ľ Ś § ¨ Š Ş Ť Ź ­ Ž Ż
+ ° ą ˛ ł ´ ľ ś ˇ ¸ š ş ť ź ˝ ž ż
+ Ŕ Á Â Ă Ä Ĺ Ć Ç Č É Ę Ë Ě Í Î Ď
+ Đ Ń Ň Ó Ô Ő Ö × Ř Ů Ú Ű Ü Ý Ţ ß
+ ŕ á â ă ä ĺ ć ç č é ę ë ě í î ď
+ đ ń ň ó ô ő ö ÷ ř ů ú ű ü ý ţ ˙
diff --git a/iconvdata/testdata/ISO-8859-3 b/iconvdata/testdata/ISO-8859-3
new file mode 100644
index 0000000000..e85c3bd0ef
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-3
@@ -0,0 +1,12 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+                  
+                 
+                 
+                 
+                 
+                 
diff --git a/iconvdata/testdata/ISO-8859-4 b/iconvdata/testdata/ISO-8859-4
new file mode 100644
index 0000000000..7d3f9b2d8f
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-4
@@ -0,0 +1,12 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+                
+                
+                
+                
+                
+                
diff --git a/iconvdata/testdata/ISO-8859-5 b/iconvdata/testdata/ISO-8859-5
new file mode 100644
index 0000000000..7d3f9b2d8f
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-5
@@ -0,0 +1,12 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+                
+                
+                
+                
+                
+                
diff --git a/iconvdata/testdata/ISO-8859-6 b/iconvdata/testdata/ISO-8859-6
new file mode 100644
index 0000000000..047664e5f7
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-6
@@ -0,0 +1,12 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+                            
+                              
+                 
+                     
+                
+                             
diff --git a/iconvdata/testdata/ISO-8859-7 b/iconvdata/testdata/ISO-8859-7
new file mode 100644
index 0000000000..c90d1613f0
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-7
@@ -0,0 +1,12 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+                    
+                
+                
+                 
+                
+                 
diff --git a/iconvdata/testdata/ISO-8859-8 b/iconvdata/testdata/ISO-8859-8
new file mode 100644
index 0000000000..42edc071e9
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-8
@@ -0,0 +1,11 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+                 
+                 
+                               
+                
+                     
diff --git a/iconvdata/testdata/ISO-8859-9 b/iconvdata/testdata/ISO-8859-9
new file mode 100644
index 0000000000..7d3f9b2d8f
--- /dev/null
+++ b/iconvdata/testdata/ISO-8859-9
@@ -0,0 +1,12 @@
+   ! " # $ % & ' ( ) * + , - . /
+ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ @ A B C D E F G H I J K L M N O
+ P Q R S T U V W X Y Z [ \ ] ^ _
+ ` a b c d e f g h i j k l m n o
+ p q r s t u v w x y z { | } ~
+                
+                
+                
+                
+                
+                
diff --git a/iconvdata/uhc.c b/iconvdata/uhc.c
index c1d5a40d8e..ed4b7adb70 100644
--- a/iconvdata/uhc.c
+++ b/iconvdata/uhc.c
@@ -2775,6 +2775,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  ++cnt;
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outwchars;
 	    }
 	  else
@@ -2816,6 +2817,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
 		  cnt += sizeof (wchar_t);
 		}
 	      *inbufsize -= cnt;
+	      inbuf += cnt;
 	      data->outbufavail = outchars;
 
 	      if (outchars + extra < data->outbufsize)