diff mbox

[uclibc-ng-devel] uClibc-ng - small C library for embedded systems branch master updated. v1.0.20-8-g4fa7ed9

Message ID 20161218064416.6222B100CE@helium.openadk.org
State Not Applicable
Headers show

Commit Message

wbx Dec. 18, 2016, 6:44 a.m. UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "uClibc-ng - small C library for embedded systems".

The branch, master has been updated
       via  4fa7ed9388f3ca81d97cad2099a6f9fa9f8098de (commit)
      from  5ca03df6978345c297225212cc0ca33d476b0272 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 4fa7ed9388f3ca81d97cad2099a6f9fa9f8098de
Author: Waldemar Brodkorb <wbx@openadk.org>
Date:   Sun Dec 11 16:56:19 2016 +0100

    add libiconv-tiny implementation
    
    To use it enable UCLIBC_HAS_LIBICONV, then iconv_open/iconv_close
    should be available.

-----------------------------------------------------------------------

Summary of changes:
 Makefile.in                              |   5 +
 Makerules                                |  14 +-
 extra/Configs/Config.in                  |   5 +
 include/iconv.h                          |  65 ++---
 libc/Makefile.in                         |   2 +
 libiconv/COPYRIGHT                       |  19 ++
 {libm => libiconv}/Makefile              |   6 +-
 libiconv/Makefile.in                     |  31 +++
 libiconv/iconv.c                         | 440 +++++++++++++++++++++++++++++++
 libiconv/include/charmaps.h              |  80 ++++++
 libiconv/include/charmaps/iso-8859-10.h  |  24 ++
 libiconv/include/charmaps/iso-8859-13.h  |  24 ++
 libiconv/include/charmaps/iso-8859-14.h  |  25 ++
 libiconv/include/charmaps/iso-8859-16.h  |  24 ++
 libiconv/include/charmaps/iso-8859-2.h   |  24 ++
 libiconv/include/charmaps/iso-8859-3.h   |  24 ++
 libiconv/include/charmaps/iso-8859-4.h   |  24 ++
 libiconv/include/charmaps/iso-8859-5.h   |  24 ++
 libiconv/include/charmaps/iso-8859-6.h   |  24 ++
 libiconv/include/charmaps/iso-8859-7.h   |  24 ++
 libiconv/include/charmaps/iso-8859-8.h   |  24 ++
 libiconv/include/charmaps/iso-8859-9.h   |  24 ++
 libiconv/include/charmaps/koi8-r.h       |  24 ++
 libiconv/include/charmaps/windows-1250.h |  24 ++
 libiconv/include/charmaps/windows-1251.h |  24 ++
 libiconv/include/charmaps/windows-1252.h |  25 ++
 libiconv/include/charmaps/windows-1253.h |  24 ++
 libiconv/include/charmaps/windows-1254.h |  24 ++
 libiconv/include/charmaps/windows-1255.h |  24 ++
 libiconv/include/charmaps/windows-1256.h |  24 ++
 libiconv/include/charmaps/windows-1257.h |  24 ++
 libiconv/include/charmaps/windows-1258.h |  24 ++
 libiconv/include/charmaps/windows-874.h  |  24 ++
 libiconv/m4/iconv.m4                     | 214 +++++++++++++++
 34 files changed, 1380 insertions(+), 55 deletions(-)
 create mode 100644 libiconv/COPYRIGHT
 copy {libm => libiconv}/Makefile (69%)
 create mode 100644 libiconv/Makefile.in
 create mode 100644 libiconv/iconv.c
 create mode 100644 libiconv/include/charmaps.h
 create mode 100644 libiconv/include/charmaps/iso-8859-10.h
 create mode 100644 libiconv/include/charmaps/iso-8859-13.h
 create mode 100644 libiconv/include/charmaps/iso-8859-14.h
 create mode 100644 libiconv/include/charmaps/iso-8859-16.h
 create mode 100644 libiconv/include/charmaps/iso-8859-2.h
 create mode 100644 libiconv/include/charmaps/iso-8859-3.h
 create mode 100644 libiconv/include/charmaps/iso-8859-4.h
 create mode 100644 libiconv/include/charmaps/iso-8859-5.h
 create mode 100644 libiconv/include/charmaps/iso-8859-6.h
 create mode 100644 libiconv/include/charmaps/iso-8859-7.h
 create mode 100644 libiconv/include/charmaps/iso-8859-8.h
 create mode 100644 libiconv/include/charmaps/iso-8859-9.h
 create mode 100644 libiconv/include/charmaps/koi8-r.h
 create mode 100644 libiconv/include/charmaps/windows-1250.h
 create mode 100644 libiconv/include/charmaps/windows-1251.h
 create mode 100644 libiconv/include/charmaps/windows-1252.h
 create mode 100644 libiconv/include/charmaps/windows-1253.h
 create mode 100644 libiconv/include/charmaps/windows-1254.h
 create mode 100644 libiconv/include/charmaps/windows-1255.h
 create mode 100644 libiconv/include/charmaps/windows-1256.h
 create mode 100644 libiconv/include/charmaps/windows-1257.h
 create mode 100644 libiconv/include/charmaps/windows-1258.h
 create mode 100644 libiconv/include/charmaps/windows-874.h
 create mode 100644 libiconv/m4/iconv.m4



hooks/post-receive
diff mbox

Patch

diff --git a/Makefile.in b/Makefile.in
index c590979..7542804 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -38,6 +38,7 @@  include $(top_srcdir)libpthread/Makefile.in
 include $(top_srcdir)librt/Makefile.in
 include $(top_srcdir)libuargp/Makefile.in
 include $(top_srcdir)libubacktrace/Makefile.in
+include $(top_srcdir)libiconv/Makefile.in
 
 # last included to catch all the objects added by others (locales/threads)
 include $(top_srcdir)libc/Makefile.in
@@ -278,6 +279,7 @@  HEADERS_RM-$(UCLIBC_HAS_GNU_ERROR)           += error.h
 HEADERS_RM-$(UCLIBC_HAS_GETOPT_LONG)         += getopt.h
 HEADERS_RM-$(UCLIBC_HAS_IPV6)                += netinet/ip6.h netinet/icmp6.h
 HEADERS_RM-$(UCLIBC_HAS_BACKTRACE)           += execinfo.h
+HEADERS_RM-$(UCLIBC_HAS_LIBICONV)            += iconv.h
 HEADERS_RM-$(UCLIBC_HAS_LOCALE)              += iconv.h bits/uClibc_ctype.h
 HEADERS_RM-$(UCLIBC_HAS_PTY)                 += pty.h
 HEADERS_RM-$(UCLIBC_HAS_REALTIME)            += mqueue.h bits/mqueue.h sched.h \
@@ -375,6 +377,9 @@  endif
 ifeq ($(UCLIBC_HAS_LIBUTIL),y)
 EMPTY_LIB_NAMES += util
 endif
+ifeq ($(UCLIBC_HAS_LIBICONV),y)
+EMPTY_LIB_NAMES += iconv
+endif
 EMPTY_LIBS = $(EMPTY_LIB_NAMES:%=lib/lib%.a)
 
 $(EMPTY_LIBS):
diff --git a/Makerules b/Makerules
index d708600..b5dc4b4 100644
--- a/Makerules
+++ b/Makerules
@@ -46,15 +46,18 @@  $(eval $(call add_IS_IN_lib,librt,$(librt-a-y) $(librt-so-y)))
 $(eval $(call add_IS_IN_lib,libutil,$(libutil-a-y) $(libutil-so-y)))
 $(eval $(call add_IS_IN_lib,libubacktrace,$(libubacktrace-a-y) $(libubacktrace-so-y)))
 $(eval $(call add_IS_IN_lib,libuargp,$(libuargp-a-y) $(libuargp-so-y)))
+$(eval $(call add_IS_IN_lib,libiconv,$(libiconv-a-y) $(libiconv-so-y)))
 
 shared_objs = $(libc-y:.o=.os) $(libc-shared-y) $(libc-nonshared-y) \
 	$(libcrypt-so-y) $(libdl-so-y) $(libm-so-y) \
 	$(libpthread-so-y) $(libpthread-nonshared-y) $(libthread_db-so-y) \
-	$(librt-so-y) $(ldso-y) $(libutil-so-y) $(libubacktrace-so-y) $(libuargp-so-y)
+	$(librt-so-y) $(ldso-y) $(libutil-so-y) $(libubacktrace-so-y) \
+	$(libuargp-so-y) $(libiconv-so-y)
 
 ar_objs =  $(libc-y) $(libc-static-y) $(libcrypt-a-y) \
 	$(libdl-a-y) $(libm-a-y) $(libpthread-a-y) $(libthread_db-a-y) \
-	$(librt-a-y) $(libutil-a-y) $(libubacktrace-a-y) $(libuargp-a-y)
+	$(librt-a-y) $(libutil-a-y) $(libubacktrace-a-y) $(libuargp-a-y) \
+	$(libiconv-a-y)
 ifeq ($(DOPIC),y)
 ar_objs := $(ar_objs:.o=.os)
 endif
@@ -472,9 +475,12 @@  files.dep := $(libc-a-y) $(libc-so-y) $(libc-nonshared-y) \
 	$(START_FILE-libpthread.so) $(END_FILE-libpthread.so) \
 	$(PTHREAD_INITFINI:.c=.s) \
 	$(librt-a-y) $(librt-so-y) \
-	$(libcrypt-a-y) $(libcrypt-so-y) $(libutil-a-y) $(libutil-so-y) \
+	$(libcrypt-a-y) $(libcrypt-so-y) \
+	$(libutil-a-y) $(libutil-so-y) \
 	$(ldso-y) $(libdl-a-y) $(libdl-so-y) \
-	$(libubacktrace-a-y) $(libubacktrace-so-y) $(libuargp-so-y) $(libuargp-a-y)
+	$(libubacktrace-a-y) $(libubacktrace-so-y) \
+	$(libuargp-so-y) $(libuargp-a-y) \
+	$(libiconv-so-y) $(libiconv-a-y)
 .depends.dep := \
 	$(patsubst %.s,%.s.dep,$(filter %.s,$(files.dep))) \
 	$(patsubst %.o,%.o.dep,$(filter %.o,$(files.dep))) \
diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in
index b1ca3fa..7c83d30 100644
--- a/extra/Configs/Config.in
+++ b/extra/Configs/Config.in
@@ -1462,6 +1462,11 @@  config UCLIBC_HAS_WCHAR
 
 	  Most people will answer N.
 
+config UCLIBC_HAS_LIBICONV
+	bool "Iconv Support"
+	help
+	  Add tiny iconv support for charset conversion from and to UTF-8.
+
 config UCLIBC_HAS_LOCALE
 	bool "Locale Support"
 	select UCLIBC_HAS_WCHAR
diff --git a/include/iconv.h b/include/iconv.h
index 5ab4c6c..dfab27f 100644
--- a/include/iconv.h
+++ b/include/iconv.h
@@ -1,59 +1,32 @@ 
-/* Copyright (C) 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
 #ifndef _ICONV_H
-#define _ICONV_H	1
+#define _ICONV_H 1
+
+#define _LIBICONV_VERSION 0x010B    /* version number: (major<<8) + minor */
 
-#include <features.h>
-#define __need_size_t
 #include <stddef.h>
 
-#ifndef __UCLIBC_HAS_LOCALE__
-#error Attempted to include iconv.h when uClibc was built without locale support.
+#ifdef __cplusplus
+extern "C" {
 #endif
 
+extern int _libiconv_version; /* Likewise */
 
-__BEGIN_DECLS
+typedef long iconv_t;
 
-/* Identifier for conversion method from one codeset to another.  */
-typedef void *iconv_t;
+extern iconv_t
+iconv_open(const char *tocode, const char *fromcode);
 
+extern size_t
+iconv(iconv_t cd, char **inbuf, size_t *inbytesleft,
+                  char **outbuf, size_t *outbytesleft);
 
-/* Allocate descriptor for code conversion from codeset FROMCODE to
-   codeset TOCODE.
+extern int
+iconv_close(iconv_t cd);
 
-   This function is a possible cancellation point and therefore not
-   marked with __THROW.  */
-extern iconv_t iconv_open (const char *__tocode, const char *__fromcode);
+#define libiconv_set_relocation_prefix(...) do {} while(0)
 
-/* Convert at most *INBYTESLEFT bytes from *INBUF according to the
-   code conversion algorithm specified by CD and place up to
-   *OUTBYTESLEFT bytes in buffer at *OUTBUF.  */
-extern size_t iconv (iconv_t __cd, char **__restrict __inbuf,
-		     size_t *__restrict __inbytesleft,
-		     char **__restrict __outbuf,
-		     size_t *__restrict __outbytesleft);
-
-/* Free resources allocated for descriptor CD for code conversion.
-
-   This function is a possible cancellation point and therefore not
-   marked with __THROW.  */
-extern int iconv_close (iconv_t __cd);
-
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
 
-#endif /* iconv.h */
+#endif /* _ICONV_H */
diff --git a/libc/Makefile.in b/libc/Makefile.in
index 3cff9fd..97added 100644
--- a/libc/Makefile.in
+++ b/libc/Makefile.in
@@ -50,6 +50,7 @@  libc-a-$(UCLIBC_HAS_ARGP) += $(libuargp-a-y)
 libc-a-$(UCLIBC_HAS_THREADS) += $(libpthread-a-y)
 libc-a-$(UCLIBC_HAS_REALTIME) += $(librt-a-y)
 libc-a-$(UCLIBC_HAS_BACKTRACE) += $(libubacktrace-a-y)
+libc-a-$(UCLIBC_HAS_LIBICONV) += $(libiconv-a-y)
 
 libc-so-y = $(libc-y:.o=.os) $(libc-shared-y)
 
@@ -61,6 +62,7 @@  libc-so-$(UCLIBC_HAS_ARGP) += $(libuargp-so-y)
 libc-so-$(UCLIBC_HAS_THREADS) += $(libpthread-so-y)
 libc-so-$(UCLIBC_HAS_REALTIME) += $(librt-so-y)
 libc-so-$(UCLIBC_HAS_BACKTRACE) += $(libubacktrace-so-y)
+libc-so-$(UCLIBC_HAS_LIBICONV) += $(libiconv-so-y)
 
 lib-a-y += $(top_builddir)lib/libc.a
 lib-gdb-y += $(top_builddir)lib/libc.gdb
diff --git a/libiconv/COPYRIGHT b/libiconv/COPYRIGHT
new file mode 100644
index 0000000..338241e
--- /dev/null
+++ b/libiconv/COPYRIGHT
@@ -0,0 +1,19 @@ 
+Copyright status on all included code:
+
+All files which have no copyright comments are original works
+Copyright (C) 2005-2006 Rich Felker. The decision to exclude such
+comments is intentional, as it should be possible to carry around the
+complete source code on tiny storage media. All public header files
+(include/*) should be treated as Public Domain as they intentionally
+contain no content which can be covered by copyright. Some source
+modules may fall in this category as well. If you believe that a file
+is so trivial that it should be in the Public Domain, please contact
+me and, if I agree, I will explicitly release it from copyright.
+
+Some code has been modified by the OpenWrt project, this includes
+the conversion from char map files to C arrays and the iconv.h header
+file in particular.
+
+The library as a whole is licensed under the GNU LGPL version 2.1.
+
+The original source can be accessed at svn://svn.mplayerhq.hu/libc/trunk
diff --git a/libm/Makefile b/libiconv/Makefile
similarity index 69%
copy from libm/Makefile
copy to libiconv/Makefile
index c8dc9b4..1ffc16e 100644
--- a/libm/Makefile
+++ b/libiconv/Makefile
@@ -1,9 +1,5 @@ 
-# Makefile for uClibc
-#
-# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
-#
+# Makefile for uClibc-ng
 # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
-#
 
 top_srcdir=../
 top_builddir=../
diff --git a/libiconv/Makefile.in b/libiconv/Makefile.in
new file mode 100644
index 0000000..3636aa6
--- /dev/null
+++ b/libiconv/Makefile.in
@@ -0,0 +1,31 @@ 
+# Makefile for uClibc-ng
+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+subdirs += libiconv
+
+CFLAGS-libiconv := -DNOT_IN_libc -DIS_IN_libiconv $(SSP_ALL_CFLAGS) \
+		-I$(top_srcdir)libiconv/include
+
+libiconv_DIR := $(top_srcdir)libiconv
+libiconv_OUT := $(top_builddir)libiconv
+
+libiconv_SRC-$(UCLIBC_HAS_LIBICONV) := iconv.c
+
+libiconv_SRC := $(addprefix $(libiconv_DIR)/,$(libiconv_SRC-y))
+libiconv_OBJ := $(patsubst $(libiconv_DIR)/%.c,$(libiconv_OUT)/%.o,$(libiconv_SRC))
+
+ifeq ($(DOPIC),y)
+libiconv-a-y := $(libiconv_OBJ:.o=.os)
+else
+libiconv-a-y := $(libiconv_OBJ)
+endif
+libiconv-so-y := $(libiconv_OBJ:.o=.os)
+
+objclean-y += CLEAN_libiconv
+
+$(libiconv_OUT)/libiconv.oS: $(libiconv_SRC)
+	$(Q)$(RM) $@
+	$(compile-m)
+
+CLEAN_libiconv:
+	$(do_rm) $(addprefix $(libiconv_OUT)/*., o os oS a)
diff --git a/libiconv/iconv.c b/libiconv/iconv.c
new file mode 100644
index 0000000..cb4e947
--- /dev/null
+++ b/libiconv/iconv.c
@@ -0,0 +1,440 @@ 
+#include <iconv.h>
+#include <errno.h>
+#include <wchar.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include <dirent.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdint.h>
+
+/* builtin charmaps */
+#include "charmaps.h"
+
+/* only 0-7 are valid as dest charset */
+#define UTF_16BE    000
+#define UTF_16LE    001
+#define UTF_32BE    002
+#define UTF_32LE    003
+#define WCHAR_T     004
+#define UTF_8       005
+#define US_ASCII    006
+#define LATIN_1     007
+
+/* additional charsets with algorithmic conversion */
+#define LATIN_9     010
+#define TIS_620     011
+#define JIS_0201    012
+
+/* some programs like php need this */
+int _libiconv_version = _LIBICONV_VERSION;
+
+/* these must match the constants above */
+static const unsigned char charsets[] =
+	"\005" "UTF-8"      "\0"
+	"\004" "WCHAR_T"    "\0"
+	"\000" "UTF-16BE"   "\0"
+	"\001" "UTF-16LE"   "\0"
+	"\002" "UTF-32BE"   "\0"
+	"\003" "UTF-32LE"   "\0"
+	"\006" "ASCII"      "\0"
+	"\006" "US-ASCII"   "\0"
+	"\007" "ISO-8859-1" "\0"
+	"\007" "LATIN1"     "\0"
+	"\010" "ISO-8859-15""\0"
+	"\010" "LATIN9"     "\0"
+	"\011" "ISO-8859-11""\0"
+	"\011" "TIS-620"    "\0"
+	"\012" "JIS-0201"   "\0"
+	"\377";
+
+/* separate identifiers for sbcs/dbcs/etc map type */
+#define UCS2_8BIT   000
+#define UCS3_8BIT   001
+#define EUC         002
+#define EUC_TW      003
+#define SHIFT_JIS   004
+#define BIG5        005
+#define GBK         006
+
+/* FIXME: these are not implemented yet
+// EUC:   A1-FE A1-FE
+// GBK:   81-FE 40-7E,80-FE
+// Big5:  A1-FE 40-7E,A1-FE
+*/
+
+static const unsigned short maplen[] = {
+	[UCS2_8BIT] = 4+ 2* 128,
+	[UCS3_8BIT] = 4+ 3* 128,
+	[EUC]       = 4+ 2* 94*94,
+	[SHIFT_JIS] = 4+ 2* 94*94,
+	[BIG5]      = 4+ 2* 94*157,
+	[GBK]       = 4+ 2* 126*190,
+	[EUC_TW]    = 4+ 2* 2*94*94,
+};
+
+static int find_charmap(const char *name)
+{
+	int i;
+	for (i = 0; i < (sizeof(charmaps) / sizeof(charmaps[0])); i++)
+		if (!strcasecmp(charmaps[i].name, name))
+			return i;
+	return -1;
+}
+
+static int find_charset(const char *name)
+{
+	const unsigned char *s;
+	for (s=charsets; *s<0xff && strcasecmp(s+1, name); s+=strlen(s)+1);
+	return *s;
+}
+
+iconv_t iconv_open(const char *to, const char *from)
+{
+	unsigned f, t;
+	int m;
+
+	if ((t = find_charset(to)) > 8)
+		return -1;
+
+	if ((f = find_charset(from)) < 255)
+		return 0 | (t<<1) | (f<<8);
+
+	if ((m = find_charmap(from)) > -1)
+		return 1 | (t<<1) | (m<<8);
+
+	return -1;
+}
+
+int iconv_close(iconv_t cd)
+{
+	return 0;
+}
+
+static inline wchar_t get_16(const unsigned char *s, int endian)
+{
+	endian &= 1;
+	return s[endian]<<8 | s[endian^1];
+}
+
+static inline void put_16(unsigned char *s, wchar_t c, int endian)
+{
+	endian &= 1;
+	s[endian] = c>>8;
+	s[endian^1] = c;
+}
+
+static inline int utf8enc_wchar(char *outb, wchar_t c)
+{
+	if (c <= 0x7F) {
+		*outb = c;
+		return 1;
+	}
+	else if (c <= 0x7FF) {
+		*outb++ = ((c >>  6) & 0x1F) | 0xC0;
+		*outb++ = ( c        & 0x3F) | 0x80;
+		return 2;
+	}
+	else if (c <= 0xFFFF) {
+		*outb++ = ((c >> 12) & 0x0F) | 0xE0;
+		*outb++ = ((c >>  6) & 0x3F) | 0x80;
+		*outb++ = ( c        & 0x3F) | 0x80;
+		return 3;
+	}
+	else if (c <= 0x10FFFF) {
+		*outb++ = ((c >> 18) & 0x07) | 0xF0;
+		*outb++ = ((c >> 12) & 0x3F) | 0x80;
+		*outb++ = ((c >>  6) & 0x3F) | 0x80;
+		*outb++ = ( c        & 0x3F) | 0x80;
+		return 4;
+	}
+	else {
+		*outb++ = '?';
+		return 1;
+	}
+}
+
+static inline int utf8seq_is_overlong(char *s, int n)
+{
+	switch (n)
+	{
+	case 2:
+		/* 1100000x (10xxxxxx) */
+		return (((*s >> 1) == 0x60) &&
+				((*(s+1) >> 6) == 0x02));
+
+	case 3:
+		/* 11100000 100xxxxx (10xxxxxx) */
+		return ((*s == 0xE0) &&
+				((*(s+1) >> 5) == 0x04) &&
+				((*(s+2) >> 6) == 0x02));
+
+	case 4:
+		/* 11110000 1000xxxx (10xxxxxx 10xxxxxx) */
+		return ((*s == 0xF0) &&
+				((*(s+1) >> 4) == 0x08) &&
+				((*(s+2) >> 6) == 0x02) &&
+				((*(s+3) >> 6) == 0x02));
+	}
+
+	return 0;
+}
+
+static inline int utf8seq_is_surrogate(char *s, int n)
+{
+	return ((n == 3) && (*s == 0xED) && (*(s+1) >= 0xA0) && (*(s+1) <= 0xBF));
+}
+
+static inline int utf8seq_is_illegal(char *s, int n)
+{
+	return ((n == 3) && (*s == 0xEF) && (*(s+1) == 0xBF) &&
+	        (*(s+2) >= 0xBE) && (*(s+2) <= 0xBF));
+}
+
+static inline int utf8dec_wchar(wchar_t *c, unsigned char *in, size_t inb)
+{
+	int i;
+	int n = -1;
+
+	/* trivial char */
+	if (*in <= 0x7F) {
+		*c = *in;
+		return 1;
+	}
+
+	/* find utf8 sequence length */
+	if      ((*in & 0xE0) == 0xC0) n = 2;
+	else if ((*in & 0xF0) == 0xE0) n = 3;
+	else if ((*in & 0xF8) == 0xF0) n = 4;
+	else if ((*in & 0xFC) == 0xF8) n = 5;
+	else if ((*in & 0xFE) == 0xFC) n = 6;
+
+	/* starved? */
+	if (n > inb)
+		return -2;
+
+	/* decode ... */
+	if (n > 1 && n < 5) {
+		/* reject invalid sequences */
+		if (utf8seq_is_overlong(in, n) ||
+			utf8seq_is_surrogate(in, n) ||
+			utf8seq_is_illegal(in, n))
+			return -1;
+
+		/* decode ... */
+		*c = (char)(*in++ & (0x7F >> n));
+
+		for (i = 1; i < n; i++) {
+			/* illegal continuation byte */
+			if (*in < 0x80 || *in > 0xBF)
+				return -1;
+
+			*c = (*c << 6) | (*in++ & 0x3F);
+		}
+
+		return n;
+	}
+
+	/* unmapped sequence (> 4) */
+	return -1;
+}
+
+static inline char latin9_translit(wchar_t c)
+{
+	/* a number of trivial iso-8859-15 <> utf-8 transliterations */
+	switch (c) {
+	case 0x20AC: return 0xA4; /* Euro */
+	case 0x0160: return 0xA6; /* S caron */
+	case 0x0161: return 0xA8; /* s caron */
+	case 0x017D: return 0xB4; /* Z caron */
+	case 0x017E: return 0xB8; /* z caron */
+	case 0x0152: return 0xBC; /* OE */
+	case 0x0153: return 0xBD; /* oe */
+	case 0x0178: return 0xBE; /* Y diaeresis */
+	default:     return '?';
+	}
+}
+
+size_t iconv(iconv_t cd, char **in, size_t *inb, char **out, size_t *outb)
+{
+	size_t x=0;
+	unsigned char to = (cd>>1)&127;
+	unsigned char from = 255;
+	const unsigned char *map = 0;
+	char tmp[MB_LEN_MAX];
+	wchar_t c, d;
+	size_t k, l;
+	int err;
+
+	if (!in || !*in || !*inb) return 0;
+
+	if (cd & 1)
+		map = charmaps[cd>>8].map;
+	else
+		from = cd>>8;
+
+	for (; *inb; *in+=l, *inb-=l) {
+		c = *(unsigned char *)*in;
+		l = 1;
+		if (from >= UTF_8 && c < 0x80) goto charok;
+		switch (from) {
+		case WCHAR_T:
+			l = sizeof(wchar_t);
+			if (*inb < l) goto starved;
+			c = *(wchar_t *)*in;
+			break;
+		case UTF_8:
+			l = utf8dec_wchar(&c, *in, *inb);
+			if (!l) l++;
+			else if (l == (size_t)-1) goto ilseq;
+			else if (l == (size_t)-2) goto starved;
+			break;
+		case US_ASCII:
+			goto ilseq;
+		case LATIN_9:
+			if ((unsigned)c - 0xa4 <= 0xbe - 0xa4) {
+				static const unsigned char map[] = {
+					0, 0x60, 0, 0x61, 0, 0, 0, 0, 0, 0, 0,
+					0, 0, 0, 0, 0x7d, 0, 0, 0, 0x7e, 0, 0, 0,
+					0x52, 0x53, 0x78
+				};
+				if (c == 0xa4) c = 0x20ac;
+				else if (map[c-0xa5]) c = 0x100 | map[c-0xa5];
+			}
+		case LATIN_1:
+			goto charok;
+		case TIS_620:
+			if (c >= 0xa1) c += 0x0e01-0xa1;
+			goto charok;
+		case JIS_0201:
+			if (c >= 0xa1) {
+				if (c <= 0xdf) c += 0xff61-0xa1;
+				else goto ilseq;
+			}
+			goto charok;
+		case UTF_16BE:
+		case UTF_16LE:
+			l = 2;
+			if (*inb < 2) goto starved;
+			c = get_16(*in, from);
+			if ((unsigned)(c-0xdc00) < 0x400) goto ilseq;
+			if ((unsigned)(c-0xd800) < 0x400) {
+				l = 4;
+				if (*inb < 4) goto starved;
+				d = get_16(*in + 2, from);
+				if ((unsigned)(c-0xdc00) >= 0x400) goto ilseq;
+				c = ((c-0xd800)<<10) | (d-0xdc00);
+			}
+			break;
+		case UTF_32BE:
+		case UTF_32LE:
+			l = 4;
+			if (*inb < 4) goto starved;
+			// FIXME
+			// c = get_32(*in, from);
+			break;
+		default:
+			/* only support ascii supersets */
+			if (c < 0x80) break;
+			switch (map[0]) {
+			case UCS2_8BIT:
+				c -= 0x80;
+				break;
+			case EUC:
+				if ((unsigned)c - 0xa1 >= 94) goto ilseq;
+				if ((unsigned)in[0][1] - 0xa1 >= 94) goto ilseq;
+				c = (c-0xa1)*94 + (in[0][1]-0xa1);
+				l = 2;
+				break;
+			case SHIFT_JIS:
+				if ((unsigned)c - 0xa1 <= 0xdf-0xa1) {
+					c += 0xff61-0xa1;
+					goto charok;
+				}
+				// FIXME...
+				l = 2;
+				break;
+			default:
+				goto badf;
+			}
+			c = get_16(map + 4 + 2*c, 0);
+			if (c == 0xffff) goto ilseq;
+			goto charok;
+		}
+
+		if ((unsigned)c - 0xd800 < 0x800 || (unsigned)c >= 0x110000)
+			goto ilseq;
+charok:
+		switch (to) {
+		case WCHAR_T:
+			if (*outb < sizeof(wchar_t)) goto toobig;
+			*(wchar_t *)*out = c;
+			*out += sizeof(wchar_t);
+			*outb -= sizeof(wchar_t);
+			break;
+		case UTF_8:
+			if (*outb < 4) {
+				k = utf8enc_wchar(tmp, c);
+				if (*outb < k) goto toobig;
+				memcpy(*out, tmp, k);
+			} else k = utf8enc_wchar(*out, c);
+			*out += k;
+			*outb -= k;
+			break;
+		case US_ASCII:
+			if (c > 0x7f) c = 0xfffd;
+			/* fall thru and count replacement in latin1 case */
+		case LATIN_9:
+			if (c >= 0x100 && c != 0xfffd)
+				c = latin9_translit(c);
+			/* fall through */
+		case LATIN_1:
+			if (!*outb) goto toobig;
+			if (c < 0x100) **out = c;
+			else x++, **out = '*'; //FIXME: translit?
+			++*out;
+			--*outb;
+			break;
+		case UTF_16BE:
+		case UTF_16LE:
+			if (c < 0x10000) {
+				if (*outb < 2) goto toobig;
+				put_16(*out, c, to);
+				*out += 2;
+				*outb -= 2;
+				break;
+			}
+			if (*outb < 4) goto toobig;
+			put_16(*out, (c>>10)|0xd800, to);
+			put_16(*out + 2, (c&0x3ff)|0xdc00, to);
+			*out += 4;
+			*outb -= 4;
+			break;
+		default:
+			goto badf;
+		}
+	}
+	return x;
+ilseq:
+	err = EILSEQ;
+	x = -1;
+	goto end;
+badf:
+	err = EBADF;
+	x = -1;
+	goto end;
+toobig:
+	err = E2BIG;
+	x = -1;
+	goto end;
+starved:
+	err = EINVAL;
+end:
+	errno = err;
+	return x;
+}
diff --git a/libiconv/include/charmaps.h b/libiconv/include/charmaps.h
new file mode 100644
index 0000000..083cd69
--- /dev/null
+++ b/libiconv/include/charmaps.h
@@ -0,0 +1,80 @@ 
+#include "charmaps/iso-8859-2.h"
+#include "charmaps/iso-8859-10.h"
+#include "charmaps/windows-874.h"
+#include "charmaps/windows-1250.h"
+#include "charmaps/koi8-r.h"
+
+#ifdef ALL_CHARSETS
+#include "charmaps/iso-8859-3.h"
+#include "charmaps/iso-8859-4.h"
+#include "charmaps/iso-8859-5.h"
+#include "charmaps/iso-8859-6.h"
+#include "charmaps/iso-8859-7.h"
+#include "charmaps/iso-8859-8.h"
+#include "charmaps/iso-8859-9.h"
+#include "charmaps/iso-8859-13.h"
+#include "charmaps/iso-8859-14.h"
+#include "charmaps/iso-8859-16.h"
+#include "charmaps/windows-1251.h"
+#include "charmaps/windows-1252.h"
+#include "charmaps/windows-1253.h"
+#include "charmaps/windows-1254.h"
+#include "charmaps/windows-1255.h"
+#include "charmaps/windows-1256.h"
+#include "charmaps/windows-1257.h"
+#include "charmaps/windows-1258.h"
+#endif
+
+
+struct charmap {
+	const char name[13];
+	const unsigned char *map;
+};
+
+static struct charmap charmaps[] = {
+	{ "ISO-8859-2",   map_iso_8859_2   },
+	{ "ISO-8859-10",  map_iso_8859_10  },
+
+#ifdef ALL_CHARSETS
+	{ "ISO-8859-3",   map_iso_8859_3   },
+	{ "ISO-8859-4",   map_iso_8859_4   },
+	{ "ISO-8859-5",   map_iso_8859_5   },
+	{ "ISO-8859-6",   map_iso_8859_6   },
+	{ "ISO-8859-7",   map_iso_8859_7   },
+	{ "ISO-8859-8",   map_iso_8859_8   },
+	{ "ISO-8859-9",   map_iso_8859_9   },
+	{ "ISO-8859-13",  map_iso_8859_13  },
+	{ "ISO-8859-14",  map_iso_8859_14  },
+	{ "ISO-8859-16",  map_iso_8859_16  },
+#endif
+
+	{ "WINDOWS-874",  map_windows_874  },
+	{ "WINDOWS-1250", map_windows_1250 },
+
+#ifdef ALL_CHARSETS
+	{ "WINDOWS-1251", map_windows_1251 },
+	{ "WINDOWS-1252", map_windows_1252 },
+	{ "WINDOWS-1253", map_windows_1253 },
+	{ "WINDOWS-1254", map_windows_1254 },
+	{ "WINDOWS-1255", map_windows_1255 },
+	{ "WINDOWS-1256", map_windows_1256 },
+	{ "WINDOWS-1257", map_windows_1257 },
+	{ "WINDOWS-1258", map_windows_1258 },
+#endif
+
+	{ "KOI8-R",       map_koi8_r       },
+
+	/* Aliases */
+	{ "LATIN2",       map_iso_8859_2   },
+	{ "LATIN6",       map_iso_8859_10  },
+
+#ifdef ALL_CHARSETS
+	{ "ARABIC",       map_iso_8859_6   },
+	{ "CYRILLIC",     map_iso_8859_5   },
+	{ "GREEK",        map_iso_8859_7   },
+	{ "HEBREW",       map_iso_8859_8   },
+	{ "LATIN3",       map_iso_8859_3   },
+	{ "LATIN4",       map_iso_8859_4   },
+	{ "LATIN5",       map_iso_8859_9   },
+#endif
+};
diff --git a/libiconv/include/charmaps/iso-8859-10.h b/libiconv/include/charmaps/iso-8859-10.h
new file mode 100644
index 0000000..cb93d02
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-10.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_10[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x01, 0x04,
+	0x01, 0x12, 0x01, 0x22, 0x01, 0x2a, 0x01, 0x28, 0x01, 0x36, 0x00, 0xa7,
+	0x01, 0x3b, 0x01, 0x10, 0x01, 0x60, 0x01, 0x66, 0x01, 0x7d, 0x00, 0xad,
+	0x01, 0x6a, 0x01, 0x4a, 0x00, 0xb0, 0x01, 0x05, 0x01, 0x13, 0x01, 0x23,
+	0x01, 0x2b, 0x01, 0x29, 0x01, 0x37, 0x00, 0xb7, 0x01, 0x3c, 0x01, 0x11,
+	0x01, 0x61, 0x01, 0x67, 0x01, 0x7e, 0x20, 0x15, 0x01, 0x6b, 0x01, 0x4b,
+	0x01, 0x00, 0x00, 0xc1, 0x00, 0xc2, 0x00, 0xc3, 0x00, 0xc4, 0x00, 0xc5,
+	0x00, 0xc6, 0x01, 0x2e, 0x01, 0x0c, 0x00, 0xc9, 0x01, 0x18, 0x00, 0xcb,
+	0x01, 0x16, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x00, 0xd0, 0x01, 0x45,
+	0x01, 0x4c, 0x00, 0xd3, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0xd6, 0x01, 0x68,
+	0x00, 0xd8, 0x01, 0x72, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x00, 0xdd,
+	0x00, 0xde, 0x00, 0xdf, 0x01, 0x01, 0x00, 0xe1, 0x00, 0xe2, 0x00, 0xe3,
+	0x00, 0xe4, 0x00, 0xe5, 0x00, 0xe6, 0x01, 0x2f, 0x01, 0x0d, 0x00, 0xe9,
+	0x01, 0x19, 0x00, 0xeb, 0x01, 0x17, 0x00, 0xed, 0x00, 0xee, 0x00, 0xef,
+	0x00, 0xf0, 0x01, 0x46, 0x01, 0x4d, 0x00, 0xf3, 0x00, 0xf4, 0x00, 0xf5,
+	0x00, 0xf6, 0x01, 0x69, 0x00, 0xf8, 0x01, 0x73, 0x00, 0xfa, 0x00, 0xfb,
+	0x00, 0xfc, 0x00, 0xfd, 0x00, 0xfe, 0x01, 0x38
+};
diff --git a/libiconv/include/charmaps/iso-8859-13.h b/libiconv/include/charmaps/iso-8859-13.h
new file mode 100644
index 0000000..b44d1b4
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-13.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_13[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x20, 0x1d,
+	0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x20, 0x1e, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xd8, 0x00, 0xa9, 0x01, 0x56, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x00, 0xc6, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x20, 0x1c, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xf8, 0x00, 0xb9,
+	0x01, 0x57, 0x00, 0xbb, 0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, 0x00, 0xe6,
+	0x01, 0x04, 0x01, 0x2e, 0x01, 0x00, 0x01, 0x06, 0x00, 0xc4, 0x00, 0xc5,
+	0x01, 0x18, 0x01, 0x12, 0x01, 0x0c, 0x00, 0xc9, 0x01, 0x79, 0x01, 0x16,
+	0x01, 0x22, 0x01, 0x36, 0x01, 0x2a, 0x01, 0x3b, 0x01, 0x60, 0x01, 0x43,
+	0x01, 0x45, 0x00, 0xd3, 0x01, 0x4c, 0x00, 0xd5, 0x00, 0xd6, 0x00, 0xd7,
+	0x01, 0x72, 0x01, 0x41, 0x01, 0x5a, 0x01, 0x6a, 0x00, 0xdc, 0x01, 0x7b,
+	0x01, 0x7d, 0x00, 0xdf, 0x01, 0x05, 0x01, 0x2f, 0x01, 0x01, 0x01, 0x07,
+	0x00, 0xe4, 0x00, 0xe5, 0x01, 0x19, 0x01, 0x13, 0x01, 0x0d, 0x00, 0xe9,
+	0x01, 0x7a, 0x01, 0x17, 0x01, 0x23, 0x01, 0x37, 0x01, 0x2b, 0x01, 0x3c,
+	0x01, 0x61, 0x01, 0x44, 0x01, 0x46, 0x00, 0xf3, 0x01, 0x4d, 0x00, 0xf5,
+	0x00, 0xf6, 0x00, 0xf7, 0x01, 0x73, 0x01, 0x42, 0x01, 0x5b, 0x01, 0x6b,
+	0x00, 0xfc, 0x01, 0x7c, 0x01, 0x7e, 0x20, 0x19
+};
diff --git a/libiconv/include/charmaps/iso-8859-14.h b/libiconv/include/charmaps/iso-8859-14.h
new file mode 100644
index 0000000..76cead9
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-14.h
@@ -0,0 +1,25 @@ 
+static const unsigned char map_iso_8859_14[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x1e, 0x02,
+	0x1e, 0x03, 0x00, 0xa3, 0x01, 0x0a, 0x01, 0x0b, 0x1e, 0x0a, 0x00, 0xa7,
+	0x1e, 0x80, 0x00, 0xa9, 0x1e, 0x82, 0x1e, 0x0b, 0x1e, 0xf2, 0x00, 0xad,
+	0x00, 0xae, 0x01, 0x78, 0x1e, 0x1e, 0x1e, 0x1f, 0x01, 0x20, 0x01, 0x21,
+	0x1e, 0x40, 0x1e, 0x41, 0x00, 0xb6, 0x1e, 0x56, 0x1e, 0x81, 0x1e, 0x57,
+	0x1e, 0x83, 0x1e, 0x60, 0x1e, 0xf3, 0x1e, 0x84, 0x1e, 0x85, 0x1e, 0x61,
+	0x00, 0xc0, 0x00, 0xc1, 0x00, 0xc2, 0x00, 0xc3, 0x00, 0xc4, 0x00, 0xc5,
+	0x00, 0xc6, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xca, 0x00, 0xcb,
+	0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x01, 0x74, 0x00, 0xd1,
+	0x00, 0xd2, 0x00, 0xd3, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0xd6, 0x1e, 0x6a,
+	0x00, 0xd8, 0x00, 0xd9, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x00, 0xdd,
+	0x01, 0x76, 0x00, 0xdf, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe2, 0x00, 0xe3,
+	0x00, 0xe4, 0x00, 0xe5, 0x00, 0xe6, 0x00, 0xe7, 0x00, 0xe8, 0x00, 0xe9,
+	0x00, 0xea, 0x00, 0xeb, 0x00, 0xec, 0x00, 0xed, 0x00, 0xee, 0x00, 0xef,
+	0x01, 0x75, 0x00, 0xf1, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0xf4, 0x00, 0xf5,
+	0x00, 0xf6, 0x1e, 0x6b, 0x00, 0xf8, 0x00, 0xf9, 0x00, 0xfa, 0x00, 0xfb,
+	0x00, 0xfc, 0x00, 0xfd, 0x01, 0x77, 0x00, 0xff
+};
+
diff --git a/libiconv/include/charmaps/iso-8859-16.h b/libiconv/include/charmaps/iso-8859-16.h
new file mode 100644
index 0000000..4437a41
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-16.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_16[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x01, 0x04,
+	0x01, 0x05, 0x01, 0x41, 0x20, 0xac, 0x20, 0x1e, 0x01, 0x60, 0x00, 0xa7,
+	0x01, 0x61, 0x00, 0xa9, 0x02, 0x18, 0x00, 0xab, 0x01, 0x79, 0x00, 0xad,
+	0x01, 0x7a, 0x01, 0x7b, 0x00, 0xb0, 0x00, 0xb1, 0x01, 0x0c, 0x01, 0x42,
+	0x01, 0x7d, 0x20, 0x1d, 0x00, 0xb6, 0x00, 0xb7, 0x01, 0x7e, 0x01, 0x0d,
+	0x02, 0x19, 0x00, 0xbb, 0x01, 0x52, 0x01, 0x53, 0x01, 0x78, 0x01, 0x7c,
+	0x00, 0xc0, 0x00, 0xc1, 0x00, 0xc2, 0x01, 0x02, 0x00, 0xc4, 0x01, 0x06,
+	0x00, 0xc6, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xca, 0x00, 0xcb,
+	0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x01, 0x10, 0x01, 0x43,
+	0x00, 0xd2, 0x00, 0xd3, 0x00, 0xd4, 0x01, 0x50, 0x00, 0xd6, 0x01, 0x5a,
+	0x01, 0x70, 0x00, 0xd9, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x01, 0x18,
+	0x02, 0x1a, 0x00, 0xdf, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe2, 0x01, 0x03,
+	0x00, 0xe4, 0x01, 0x07, 0x00, 0xe6, 0x00, 0xe7, 0x00, 0xe8, 0x00, 0xe9,
+	0x00, 0xea, 0x00, 0xeb, 0x00, 0xec, 0x00, 0xed, 0x00, 0xee, 0x00, 0xef,
+	0x01, 0x11, 0x01, 0x44, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0xf4, 0x01, 0x51,
+	0x00, 0xf6, 0x01, 0x5b, 0x01, 0x71, 0x00, 0xf9, 0x00, 0xfa, 0x00, 0xfb,
+	0x00, 0xfc, 0x01, 0x19, 0x02, 0x1b, 0x00, 0xff
+};
diff --git a/libiconv/include/charmaps/iso-8859-2.h b/libiconv/include/charmaps/iso-8859-2.h
new file mode 100644
index 0000000..631610e
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-2.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_2[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x01, 0x04,
+	0x02, 0xd8, 0x01, 0x41, 0x00, 0xa4, 0x01, 0x3d, 0x01, 0x5a, 0x00, 0xa7,
+	0x00, 0xa8, 0x01, 0x60, 0x01, 0x5e, 0x01, 0x64, 0x01, 0x79, 0x00, 0xad,
+	0x01, 0x7d, 0x01, 0x7b, 0x00, 0xb0, 0x01, 0x05, 0x02, 0xdb, 0x01, 0x42,
+	0x00, 0xb4, 0x01, 0x3e, 0x01, 0x5b, 0x02, 0xc7, 0x00, 0xb8, 0x01, 0x61,
+	0x01, 0x5f, 0x01, 0x65, 0x01, 0x7a, 0x02, 0xdd, 0x01, 0x7e, 0x01, 0x7c,
+	0x01, 0x54, 0x00, 0xc1, 0x00, 0xc2, 0x01, 0x02, 0x00, 0xc4, 0x01, 0x39,
+	0x01, 0x06, 0x00, 0xc7, 0x01, 0x0c, 0x00, 0xc9, 0x01, 0x18, 0x00, 0xcb,
+	0x01, 0x1a, 0x00, 0xcd, 0x00, 0xce, 0x01, 0x0e, 0x01, 0x10, 0x01, 0x43,
+	0x01, 0x47, 0x00, 0xd3, 0x00, 0xd4, 0x01, 0x50, 0x00, 0xd6, 0x00, 0xd7,
+	0x01, 0x58, 0x01, 0x6e, 0x00, 0xda, 0x01, 0x70, 0x00, 0xdc, 0x00, 0xdd,
+	0x01, 0x62, 0x00, 0xdf, 0x01, 0x55, 0x00, 0xe1, 0x00, 0xe2, 0x01, 0x03,
+	0x00, 0xe4, 0x01, 0x3a, 0x01, 0x07, 0x00, 0xe7, 0x01, 0x0d, 0x00, 0xe9,
+	0x01, 0x19, 0x00, 0xeb, 0x01, 0x1b, 0x00, 0xed, 0x00, 0xee, 0x01, 0x0f,
+	0x01, 0x11, 0x01, 0x44, 0x01, 0x48, 0x00, 0xf3, 0x00, 0xf4, 0x01, 0x51,
+	0x00, 0xf6, 0x00, 0xf7, 0x01, 0x59, 0x01, 0x6f, 0x00, 0xfa, 0x01, 0x71,
+	0x00, 0xfc, 0x00, 0xfd, 0x01, 0x63, 0x02, 0xd9
+};
diff --git a/libiconv/include/charmaps/iso-8859-3.h b/libiconv/include/charmaps/iso-8859-3.h
new file mode 100644
index 0000000..cd76d59
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-3.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_3[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x01, 0x26,
+	0x02, 0xd8, 0x00, 0xa3, 0x00, 0xa4, 0xff, 0xff, 0x01, 0x24, 0x00, 0xa7,
+	0x00, 0xa8, 0x01, 0x30, 0x01, 0x5e, 0x01, 0x1e, 0x01, 0x34, 0x00, 0xad,
+	0xff, 0xff, 0x01, 0x7b, 0x00, 0xb0, 0x01, 0x27, 0x00, 0xb2, 0x00, 0xb3,
+	0x00, 0xb4, 0x00, 0xb5, 0x01, 0x25, 0x00, 0xb7, 0x00, 0xb8, 0x01, 0x31,
+	0x01, 0x5f, 0x01, 0x1f, 0x01, 0x35, 0x00, 0xbd, 0xff, 0xff, 0x01, 0x7c,
+	0x00, 0xc0, 0x00, 0xc1, 0x00, 0xc2, 0xff, 0xff, 0x00, 0xc4, 0x01, 0x0a,
+	0x01, 0x08, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xca, 0x00, 0xcb,
+	0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0xff, 0xff, 0x00, 0xd1,
+	0x00, 0xd2, 0x00, 0xd3, 0x00, 0xd4, 0x01, 0x20, 0x00, 0xd6, 0x00, 0xd7,
+	0x01, 0x1c, 0x00, 0xd9, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x01, 0x6c,
+	0x01, 0x5c, 0x00, 0xdf, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe2, 0xff, 0xff,
+	0x00, 0xe4, 0x01, 0x0b, 0x01, 0x09, 0x00, 0xe7, 0x00, 0xe8, 0x00, 0xe9,
+	0x00, 0xea, 0x00, 0xeb, 0x00, 0xec, 0x00, 0xed, 0x00, 0xee, 0x00, 0xef,
+	0xff, 0xff, 0x00, 0xf1, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0xf4, 0x01, 0x21,
+	0x00, 0xf6, 0x00, 0xf7, 0x01, 0x1d, 0x00, 0xf9, 0x00, 0xfa, 0x00, 0xfb,
+	0x00, 0xfc, 0x01, 0x6d, 0x01, 0x5d, 0x02, 0xd9
+};
diff --git a/libiconv/include/charmaps/iso-8859-4.h b/libiconv/include/charmaps/iso-8859-4.h
new file mode 100644
index 0000000..5db2f77
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-4.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_4[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x01, 0x04,
+	0x01, 0x38, 0x01, 0x56, 0x00, 0xa4, 0x01, 0x28, 0x01, 0x3b, 0x00, 0xa7,
+	0x00, 0xa8, 0x01, 0x60, 0x01, 0x12, 0x01, 0x22, 0x01, 0x66, 0x00, 0xad,
+	0x01, 0x7d, 0x00, 0xaf, 0x00, 0xb0, 0x01, 0x05, 0x02, 0xdb, 0x01, 0x57,
+	0x00, 0xb4, 0x01, 0x29, 0x01, 0x3c, 0x02, 0xc7, 0x00, 0xb8, 0x01, 0x61,
+	0x01, 0x13, 0x01, 0x23, 0x01, 0x67, 0x01, 0x4a, 0x01, 0x7e, 0x01, 0x4b,
+	0x01, 0x00, 0x00, 0xc1, 0x00, 0xc2, 0x00, 0xc3, 0x00, 0xc4, 0x00, 0xc5,
+	0x00, 0xc6, 0x01, 0x2e, 0x01, 0x0c, 0x00, 0xc9, 0x01, 0x18, 0x00, 0xcb,
+	0x01, 0x16, 0x00, 0xcd, 0x00, 0xce, 0x01, 0x2a, 0x01, 0x10, 0x01, 0x45,
+	0x01, 0x4c, 0x01, 0x36, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0xd6, 0x00, 0xd7,
+	0x00, 0xd8, 0x01, 0x72, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x01, 0x68,
+	0x01, 0x6a, 0x00, 0xdf, 0x01, 0x01, 0x00, 0xe1, 0x00, 0xe2, 0x00, 0xe3,
+	0x00, 0xe4, 0x00, 0xe5, 0x00, 0xe6, 0x01, 0x2f, 0x01, 0x0d, 0x00, 0xe9,
+	0x01, 0x19, 0x00, 0xeb, 0x01, 0x17, 0x00, 0xed, 0x00, 0xee, 0x01, 0x2b,
+	0x01, 0x11, 0x01, 0x46, 0x01, 0x4d, 0x01, 0x37, 0x00, 0xf4, 0x00, 0xf5,
+	0x00, 0xf6, 0x00, 0xf7, 0x00, 0xf8, 0x01, 0x73, 0x00, 0xfa, 0x00, 0xfb,
+	0x00, 0xfc, 0x01, 0x69, 0x01, 0x6b, 0x02, 0xd9
+};
diff --git a/libiconv/include/charmaps/iso-8859-5.h b/libiconv/include/charmaps/iso-8859-5.h
new file mode 100644
index 0000000..d9fe684
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-5.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_5[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x04, 0x01,
+	0x04, 0x02, 0x04, 0x03, 0x04, 0x04, 0x04, 0x05, 0x04, 0x06, 0x04, 0x07,
+	0x04, 0x08, 0x04, 0x09, 0x04, 0x0a, 0x04, 0x0b, 0x04, 0x0c, 0x00, 0xad,
+	0x04, 0x0e, 0x04, 0x0f, 0x04, 0x10, 0x04, 0x11, 0x04, 0x12, 0x04, 0x13,
+	0x04, 0x14, 0x04, 0x15, 0x04, 0x16, 0x04, 0x17, 0x04, 0x18, 0x04, 0x19,
+	0x04, 0x1a, 0x04, 0x1b, 0x04, 0x1c, 0x04, 0x1d, 0x04, 0x1e, 0x04, 0x1f,
+	0x04, 0x20, 0x04, 0x21, 0x04, 0x22, 0x04, 0x23, 0x04, 0x24, 0x04, 0x25,
+	0x04, 0x26, 0x04, 0x27, 0x04, 0x28, 0x04, 0x29, 0x04, 0x2a, 0x04, 0x2b,
+	0x04, 0x2c, 0x04, 0x2d, 0x04, 0x2e, 0x04, 0x2f, 0x04, 0x30, 0x04, 0x31,
+	0x04, 0x32, 0x04, 0x33, 0x04, 0x34, 0x04, 0x35, 0x04, 0x36, 0x04, 0x37,
+	0x04, 0x38, 0x04, 0x39, 0x04, 0x3a, 0x04, 0x3b, 0x04, 0x3c, 0x04, 0x3d,
+	0x04, 0x3e, 0x04, 0x3f, 0x04, 0x40, 0x04, 0x41, 0x04, 0x42, 0x04, 0x43,
+	0x04, 0x44, 0x04, 0x45, 0x04, 0x46, 0x04, 0x47, 0x04, 0x48, 0x04, 0x49,
+	0x04, 0x4a, 0x04, 0x4b, 0x04, 0x4c, 0x04, 0x4d, 0x04, 0x4e, 0x04, 0x4f,
+	0x21, 0x16, 0x04, 0x51, 0x04, 0x52, 0x04, 0x53, 0x04, 0x54, 0x04, 0x55,
+	0x04, 0x56, 0x04, 0x57, 0x04, 0x58, 0x04, 0x59, 0x04, 0x5a, 0x04, 0x5b,
+	0x04, 0x5c, 0x00, 0xa7, 0x04, 0x5e, 0x04, 0x5f
+};
diff --git a/libiconv/include/charmaps/iso-8859-6.h b/libiconv/include/charmaps/iso-8859-6.h
new file mode 100644
index 0000000..820020f
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-6.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_6[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x0c, 0x00, 0xad,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0x06, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x1f,
+	0xff, 0xff, 0x06, 0x21, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25,
+	0x06, 0x26, 0x06, 0x27, 0x06, 0x28, 0x06, 0x29, 0x06, 0x2a, 0x06, 0x2b,
+	0x06, 0x2c, 0x06, 0x2d, 0x06, 0x2e, 0x06, 0x2f, 0x06, 0x30, 0x06, 0x31,
+	0x06, 0x32, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37,
+	0x06, 0x38, 0x06, 0x39, 0x06, 0x3a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0x06, 0x40, 0x06, 0x41, 0x06, 0x42, 0x06, 0x43,
+	0x06, 0x44, 0x06, 0x45, 0x06, 0x46, 0x06, 0x47, 0x06, 0x48, 0x06, 0x49,
+	0x06, 0x4a, 0x06, 0x4b, 0x06, 0x4c, 0x06, 0x4d, 0x06, 0x4e, 0x06, 0x4f,
+	0x06, 0x50, 0x06, 0x51, 0x06, 0x52, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
diff --git a/libiconv/include/charmaps/iso-8859-7.h b/libiconv/include/charmaps/iso-8859-7.h
new file mode 100644
index 0000000..174f9d3
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-7.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_7[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x20, 0x18,
+	0x20, 0x19, 0x00, 0xa3, 0x20, 0xac, 0x20, 0xaf, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xa8, 0x00, 0xa9, 0x03, 0x7a, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0xff, 0xff, 0x20, 0x15, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x03, 0x84, 0x03, 0x85, 0x03, 0x86, 0x00, 0xb7, 0x03, 0x88, 0x03, 0x89,
+	0x03, 0x8a, 0x00, 0xbb, 0x03, 0x8c, 0x00, 0xbd, 0x03, 0x8e, 0x03, 0x8f,
+	0x03, 0x90, 0x03, 0x91, 0x03, 0x92, 0x03, 0x93, 0x03, 0x94, 0x03, 0x95,
+	0x03, 0x96, 0x03, 0x97, 0x03, 0x98, 0x03, 0x99, 0x03, 0x9a, 0x03, 0x9b,
+	0x03, 0x9c, 0x03, 0x9d, 0x03, 0x9e, 0x03, 0x9f, 0x03, 0xa0, 0x03, 0xa1,
+	0xff, 0xff, 0x03, 0xa3, 0x03, 0xa4, 0x03, 0xa5, 0x03, 0xa6, 0x03, 0xa7,
+	0x03, 0xa8, 0x03, 0xa9, 0x03, 0xaa, 0x03, 0xab, 0x03, 0xac, 0x03, 0xad,
+	0x03, 0xae, 0x03, 0xaf, 0x03, 0xb0, 0x03, 0xb1, 0x03, 0xb2, 0x03, 0xb3,
+	0x03, 0xb4, 0x03, 0xb5, 0x03, 0xb6, 0x03, 0xb7, 0x03, 0xb8, 0x03, 0xb9,
+	0x03, 0xba, 0x03, 0xbb, 0x03, 0xbc, 0x03, 0xbd, 0x03, 0xbe, 0x03, 0xbf,
+	0x03, 0xc0, 0x03, 0xc1, 0x03, 0xc2, 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xc5,
+	0x03, 0xc6, 0x03, 0xc7, 0x03, 0xc8, 0x03, 0xc9, 0x03, 0xca, 0x03, 0xcb,
+	0x03, 0xcc, 0x03, 0xcd, 0x03, 0xce, 0xff, 0xff
+};
diff --git a/libiconv/include/charmaps/iso-8859-8.h b/libiconv/include/charmaps/iso-8859-8.h
new file mode 100644
index 0000000..66d4a5e
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-8.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_8[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0xff, 0xff,
+	0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xa8, 0x00, 0xa9, 0x00, 0xd7, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x00, 0xaf, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x00, 0xb9,
+	0x00, 0xf7, 0x00, 0xbb, 0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0x20, 0x17, 0x05, 0xd0, 0x05, 0xd1, 0x05, 0xd2, 0x05, 0xd3,
+	0x05, 0xd4, 0x05, 0xd5, 0x05, 0xd6, 0x05, 0xd7, 0x05, 0xd8, 0x05, 0xd9,
+	0x05, 0xda, 0x05, 0xdb, 0x05, 0xdc, 0x05, 0xdd, 0x05, 0xde, 0x05, 0xdf,
+	0x05, 0xe0, 0x05, 0xe1, 0x05, 0xe2, 0x05, 0xe3, 0x05, 0xe4, 0x05, 0xe5,
+	0x05, 0xe6, 0x05, 0xe7, 0x05, 0xe8, 0x05, 0xe9, 0x05, 0xea, 0xff, 0xff,
+	0xff, 0xff, 0x20, 0x0e, 0x20, 0x0f, 0xff, 0xff
+};
diff --git a/libiconv/include/charmaps/iso-8859-9.h b/libiconv/include/charmaps/iso-8859-9.h
new file mode 100644
index 0000000..f1a8646
--- /dev/null
+++ b/libiconv/include/charmaps/iso-8859-9.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_iso_8859_9[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x81, 0x00, 0x82, 0x00, 0x83,
+	0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, 0x89,
+	0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f,
+	0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95,
+	0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x9b,
+	0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x00, 0xa1,
+	0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xa8, 0x00, 0xa9, 0x00, 0xaa, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x00, 0xaf, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x00, 0xb9,
+	0x00, 0xba, 0x00, 0xbb, 0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, 0x00, 0xbf,
+	0x00, 0xc0, 0x00, 0xc1, 0x00, 0xc2, 0x00, 0xc3, 0x00, 0xc4, 0x00, 0xc5,
+	0x00, 0xc6, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xca, 0x00, 0xcb,
+	0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x01, 0x1e, 0x00, 0xd1,
+	0x00, 0xd2, 0x00, 0xd3, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0xd6, 0x00, 0xd7,
+	0x00, 0xd8, 0x00, 0xd9, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x01, 0x30,
+	0x01, 0x5e, 0x00, 0xdf, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe2, 0x00, 0xe3,
+	0x00, 0xe4, 0x00, 0xe5, 0x00, 0xe6, 0x00, 0xe7, 0x00, 0xe8, 0x00, 0xe9,
+	0x00, 0xea, 0x00, 0xeb, 0x00, 0xec, 0x00, 0xed, 0x00, 0xee, 0x00, 0xef,
+	0x01, 0x1f, 0x00, 0xf1, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0xf4, 0x00, 0xf5,
+	0x00, 0xf6, 0x00, 0xf7, 0x00, 0xf8, 0x00, 0xf9, 0x00, 0xfa, 0x00, 0xfb,
+	0x00, 0xfc, 0x01, 0x31, 0x01, 0x5f, 0x00, 0xff
+};
diff --git a/libiconv/include/charmaps/koi8-r.h b/libiconv/include/charmaps/koi8-r.h
new file mode 100644
index 0000000..c2453a5
--- /dev/null
+++ b/libiconv/include/charmaps/koi8-r.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_koi8_r[] = {
+	0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x25, 0x02, 0x25, 0x0c, 0x25, 0x10,
+	0x25, 0x14, 0x25, 0x18, 0x25, 0x1c, 0x25, 0x24, 0x25, 0x2c, 0x25, 0x34,
+	0x25, 0x3c, 0x25, 0x80, 0x25, 0x84, 0x25, 0x88, 0x25, 0x8c, 0x25, 0x90,
+	0x25, 0x91, 0x25, 0x92, 0x25, 0x93, 0x23, 0x20, 0x25, 0xa0, 0x22, 0x19,
+	0x22, 0x1a, 0x22, 0x48, 0x22, 0x64, 0x22, 0x65, 0x00, 0xa0, 0x23, 0x21,
+	0x00, 0xb0, 0x00, 0xb2, 0x00, 0xb7, 0x00, 0xf7, 0x25, 0x50, 0x25, 0x51,
+	0x25, 0x52, 0x04, 0x51, 0x25, 0x53, 0x25, 0x54, 0x25, 0x55, 0x25, 0x56,
+	0x25, 0x57, 0x25, 0x58, 0x25, 0x59, 0x25, 0x5a, 0x25, 0x5b, 0x25, 0x5c,
+	0x25, 0x5d, 0x25, 0x5e, 0x25, 0x5f, 0x25, 0x60, 0x25, 0x61, 0x04, 0x01,
+	0x25, 0x62, 0x25, 0x63, 0x25, 0x64, 0x25, 0x65, 0x25, 0x66, 0x25, 0x67,
+	0x25, 0x68, 0x25, 0x69, 0x25, 0x6a, 0x25, 0x6b, 0x25, 0x6c, 0x00, 0xa9,
+	0x04, 0x4e, 0x04, 0x30, 0x04, 0x31, 0x04, 0x46, 0x04, 0x34, 0x04, 0x35,
+	0x04, 0x44, 0x04, 0x33, 0x04, 0x45, 0x04, 0x38, 0x04, 0x39, 0x04, 0x3a,
+	0x04, 0x3b, 0x04, 0x3c, 0x04, 0x3d, 0x04, 0x3e, 0x04, 0x3f, 0x04, 0x4f,
+	0x04, 0x40, 0x04, 0x41, 0x04, 0x42, 0x04, 0x43, 0x04, 0x36, 0x04, 0x32,
+	0x04, 0x4c, 0x04, 0x4b, 0x04, 0x37, 0x04, 0x48, 0x04, 0x4d, 0x04, 0x49,
+	0x04, 0x47, 0x04, 0x4a, 0x04, 0x2e, 0x04, 0x10, 0x04, 0x11, 0x04, 0x26,
+	0x04, 0x14, 0x04, 0x15, 0x04, 0x24, 0x04, 0x13, 0x04, 0x25, 0x04, 0x18,
+	0x04, 0x19, 0x04, 0x1a, 0x04, 0x1b, 0x04, 0x1c, 0x04, 0x1d, 0x04, 0x1e,
+	0x04, 0x1f, 0x04, 0x2f, 0x04, 0x20, 0x04, 0x21, 0x04, 0x22, 0x04, 0x23,
+	0x04, 0x16, 0x04, 0x12, 0x04, 0x2c, 0x04, 0x2b, 0x04, 0x17, 0x04, 0x28,
+	0x04, 0x2d, 0x04, 0x29, 0x04, 0x27, 0x04, 0x2a
+};
diff --git a/libiconv/include/charmaps/windows-1250.h b/libiconv/include/charmaps/windows-1250.h
new file mode 100644
index 0000000..8e4723e
--- /dev/null
+++ b/libiconv/include/charmaps/windows-1250.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_windows_1250[] = {
+	0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xff, 0x20, 0x1a, 0xff, 0xff,
+	0x20, 0x1e, 0x20, 0x26, 0x20, 0x20, 0x20, 0x21, 0xff, 0xff, 0x20, 0x30,
+	0x01, 0x60, 0x20, 0x39, 0x01, 0x5a, 0x01, 0x64, 0x01, 0x7d, 0x01, 0x79,
+	0xff, 0xff, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22,
+	0x20, 0x13, 0x20, 0x14, 0xff, 0xff, 0x21, 0x22, 0x01, 0x61, 0x20, 0x3a,
+	0x01, 0x5b, 0x01, 0x65, 0x01, 0x7e, 0x01, 0x7a, 0x00, 0xa0, 0x02, 0xc7,
+	0x02, 0xd8, 0x01, 0x41, 0x00, 0xa4, 0x01, 0x04, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xa8, 0x00, 0xa9, 0x01, 0x5e, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x01, 0x7b, 0x00, 0xb0, 0x00, 0xb1, 0x02, 0xdb, 0x01, 0x42,
+	0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x01, 0x05,
+	0x01, 0x5f, 0x00, 0xbb, 0x01, 0x3d, 0x02, 0xdd, 0x01, 0x3e, 0x01, 0x7c,
+	0x01, 0x54, 0x00, 0xc1, 0x00, 0xc2, 0x01, 0x02, 0x00, 0xc4, 0x01, 0x39,
+	0x01, 0x06, 0x00, 0xc7, 0x01, 0x0c, 0x00, 0xc9, 0x01, 0x18, 0x00, 0xcb,
+	0x01, 0x1a, 0x00, 0xcd, 0x00, 0xce, 0x01, 0x0e, 0x01, 0x10, 0x01, 0x43,
+	0x01, 0x47, 0x00, 0xd3, 0x00, 0xd4, 0x01, 0x50, 0x00, 0xd6, 0x00, 0xd7,
+	0x01, 0x58, 0x01, 0x6e, 0x00, 0xda, 0x01, 0x70, 0x00, 0xdc, 0x00, 0xdd,
+	0x01, 0x62, 0x00, 0xdf, 0x01, 0x55, 0x00, 0xe1, 0x00, 0xe2, 0x01, 0x03,
+	0x00, 0xe4, 0x01, 0x3a, 0x01, 0x07, 0x00, 0xe7, 0x01, 0x0d, 0x00, 0xe9,
+	0x01, 0x19, 0x00, 0xeb, 0x01, 0x1b, 0x00, 0xed, 0x00, 0xee, 0x01, 0x0f,
+	0x01, 0x11, 0x01, 0x44, 0x01, 0x48, 0x00, 0xf3, 0x00, 0xf4, 0x01, 0x51,
+	0x00, 0xf6, 0x00, 0xf7, 0x01, 0x59, 0x01, 0x6f, 0x00, 0xfa, 0x01, 0x71,
+	0x00, 0xfc, 0x00, 0xfd, 0x01, 0x63, 0x02, 0xd9
+};
diff --git a/libiconv/include/charmaps/windows-1251.h b/libiconv/include/charmaps/windows-1251.h
new file mode 100644
index 0000000..e278850
--- /dev/null
+++ b/libiconv/include/charmaps/windows-1251.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_windows_1251[] = {
+	0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x04, 0x03, 0x20, 0x1a, 0x04, 0x53,
+	0x20, 0x1e, 0x20, 0x26, 0x20, 0x20, 0x20, 0x21, 0x20, 0xac, 0x20, 0x30,
+	0x04, 0x09, 0x20, 0x39, 0x04, 0x0a, 0x04, 0x0c, 0x04, 0x0b, 0x04, 0x0f,
+	0x04, 0x52, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22,
+	0x20, 0x13, 0x20, 0x14, 0xff, 0xff, 0x21, 0x22, 0x04, 0x59, 0x20, 0x3a,
+	0x04, 0x5a, 0x04, 0x5c, 0x04, 0x5b, 0x04, 0x5f, 0x00, 0xa0, 0x04, 0x0e,
+	0x04, 0x5e, 0x04, 0x08, 0x00, 0xa4, 0x04, 0x90, 0x00, 0xa6, 0x00, 0xa7,
+	0x04, 0x01, 0x00, 0xa9, 0x04, 0x04, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x04, 0x07, 0x00, 0xb0, 0x00, 0xb1, 0x04, 0x06, 0x04, 0x56,
+	0x04, 0x91, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x04, 0x51, 0x21, 0x16,
+	0x04, 0x54, 0x00, 0xbb, 0x04, 0x58, 0x04, 0x05, 0x04, 0x55, 0x04, 0x57,
+	0x04, 0x10, 0x04, 0x11, 0x04, 0x12, 0x04, 0x13, 0x04, 0x14, 0x04, 0x15,
+	0x04, 0x16, 0x04, 0x17, 0x04, 0x18, 0x04, 0x19, 0x04, 0x1a, 0x04, 0x1b,
+	0x04, 0x1c, 0x04, 0x1d, 0x04, 0x1e, 0x04, 0x1f, 0x04, 0x20, 0x04, 0x21,
+	0x04, 0x22, 0x04, 0x23, 0x04, 0x24, 0x04, 0x25, 0x04, 0x26, 0x04, 0x27,
+	0x04, 0x28, 0x04, 0x29, 0x04, 0x2a, 0x04, 0x2b, 0x04, 0x2c, 0x04, 0x2d,
+	0x04, 0x2e, 0x04, 0x2f, 0x04, 0x30, 0x04, 0x31, 0x04, 0x32, 0x04, 0x33,
+	0x04, 0x34, 0x04, 0x35, 0x04, 0x36, 0x04, 0x37, 0x04, 0x38, 0x04, 0x39,
+	0x04, 0x3a, 0x04, 0x3b, 0x04, 0x3c, 0x04, 0x3d, 0x04, 0x3e, 0x04, 0x3f,
+	0x04, 0x40, 0x04, 0x41, 0x04, 0x42, 0x04, 0x43, 0x04, 0x44, 0x04, 0x45,
+	0x04, 0x46, 0x04, 0x47, 0x04, 0x48, 0x04, 0x49, 0x04, 0x4a, 0x04, 0x4b,
+	0x04, 0x4c, 0x04, 0x4d, 0x04, 0x4e, 0x04, 0x4f
+};
diff --git a/libiconv/include/charmaps/windows-1252.h b/libiconv/include/charmaps/windows-1252.h
new file mode 100644
index 0000000..a6dad8a
--- /dev/null
+++ b/libiconv/include/charmaps/windows-1252.h
@@ -0,0 +1,25 @@ 
+static const unsigned char map_windows_1252[] = {
+	0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xff, 0x20, 0x1a, 0x01, 0x92,
+	0x20, 0x1e, 0x20, 0x26, 0x20, 0x20, 0x20, 0x21, 0x02, 0xc6, 0x20, 0x30,
+	0x01, 0x60, 0x20, 0x39, 0x01, 0x52, 0xff, 0xff, 0x01, 0x7d, 0xff, 0xff,
+	0xff, 0xff, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22,
+	0x20, 0x13, 0x20, 0x14, 0x02, 0xdc, 0x21, 0x22, 0x01, 0x61, 0x20, 0x3a,
+	0x01, 0x53, 0xff, 0xff, 0x01, 0x7e, 0x01, 0x78, 0x00, 0xa0, 0x00, 0xa1,
+	0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xa8, 0x00, 0xa9, 0x00, 0xaa, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x00, 0xaf, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x00, 0xb9,
+	0x00, 0xba, 0x00, 0xbb, 0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, 0x00, 0xbf,
+	0x00, 0xc0, 0x00, 0xc1, 0x00, 0xc2, 0x00, 0xc3, 0x00, 0xc4, 0x00, 0xc5,
+	0x00, 0xc6, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xca, 0x00, 0xcb,
+	0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x00, 0xd0, 0x00, 0xd1,
+	0x00, 0xd2, 0x00, 0xd3, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0xd6, 0x00, 0xd7,
+	0x00, 0xd8, 0x00, 0xd9, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x00, 0xdd,
+	0x00, 0xde, 0x00, 0xdf, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe2, 0x00, 0xe3,
+	0x00, 0xe4, 0x00, 0xe5, 0x00, 0xe6, 0x00, 0xe7, 0x00, 0xe8, 0x00, 0xe9,
+	0x00, 0xea, 0x00, 0xeb, 0x00, 0xec, 0x00, 0xed, 0x00, 0xee, 0x00, 0xef,
+	0x00, 0xf0, 0x00, 0xf1, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0xf4, 0x00, 0xf5,
+	0x00, 0xf6, 0x00, 0xf7, 0x00, 0xf8, 0x00, 0xf9, 0x00, 0xfa, 0x00, 0xfb,
+	0x00, 0xfc, 0x00, 0xfd, 0x00, 0xfe, 0x00, 0xff
+};
+
diff --git a/libiconv/include/charmaps/windows-1253.h b/libiconv/include/charmaps/windows-1253.h
new file mode 100644
index 0000000..b0bdf1e
--- /dev/null
+++ b/libiconv/include/charmaps/windows-1253.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_windows_1253[] = {
+	0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xff, 0x20, 0x1a, 0x01, 0x92,
+	0x20, 0x1e, 0x20, 0x26, 0x20, 0x20, 0x20, 0x21, 0xff, 0xff, 0x20, 0x30,
+	0xff, 0xff, 0x20, 0x39, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22,
+	0x20, 0x13, 0x20, 0x14, 0xff, 0xff, 0x21, 0x22, 0xff, 0xff, 0x20, 0x3a,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xa0, 0x03, 0x85,
+	0x03, 0x86, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xa8, 0x00, 0xa9, 0xff, 0xff, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x20, 0x15, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x03, 0x84, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x03, 0x88, 0x03, 0x89,
+	0x03, 0x8a, 0x00, 0xbb, 0x03, 0x8c, 0x00, 0xbd, 0x03, 0x8e, 0x03, 0x8f,
+	0x03, 0x90, 0x03, 0x91, 0x03, 0x92, 0x03, 0x93, 0x03, 0x94, 0x03, 0x95,
+	0x03, 0x96, 0x03, 0x97, 0x03, 0x98, 0x03, 0x99, 0x03, 0x9a, 0x03, 0x9b,
+	0x03, 0x9c, 0x03, 0x9d, 0x03, 0x9e, 0x03, 0x9f, 0x03, 0xa0, 0x03, 0xa1,
+	0xff, 0xff, 0x03, 0xa3, 0x03, 0xa4, 0x03, 0xa5, 0x03, 0xa6, 0x03, 0xa7,
+	0x03, 0xa8, 0x03, 0xa9, 0x03, 0xaa, 0x03, 0xab, 0x03, 0xac, 0x03, 0xad,
+	0x03, 0xae, 0x03, 0xaf, 0x03, 0xb0, 0x03, 0xb1, 0x03, 0xb2, 0x03, 0xb3,
+	0x03, 0xb4, 0x03, 0xb5, 0x03, 0xb6, 0x03, 0xb7, 0x03, 0xb8, 0x03, 0xb9,
+	0x03, 0xba, 0x03, 0xbb, 0x03, 0xbc, 0x03, 0xbd, 0x03, 0xbe, 0x03, 0xbf,
+	0x03, 0xc0, 0x03, 0xc1, 0x03, 0xc2, 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xc5,
+	0x03, 0xc6, 0x03, 0xc7, 0x03, 0xc8, 0x03, 0xc9, 0x03, 0xca, 0x03, 0xcb,
+	0x03, 0xcc, 0x03, 0xcd, 0x03, 0xce, 0xff, 0xff
+};
diff --git a/libiconv/include/charmaps/windows-1254.h b/libiconv/include/charmaps/windows-1254.h
new file mode 100644
index 0000000..be22600
--- /dev/null
+++ b/libiconv/include/charmaps/windows-1254.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_windows_1254[] = {
+	0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xff, 0x20, 0x1a, 0x01, 0x92,
+	0x20, 0x1e, 0x20, 0x26, 0x20, 0x20, 0x20, 0x21, 0x02, 0xc6, 0x20, 0x30,
+	0x01, 0x60, 0x20, 0x39, 0x01, 0x52, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22,
+	0x20, 0x13, 0x20, 0x14, 0x02, 0xdc, 0x21, 0x22, 0x01, 0x61, 0x20, 0x3a,
+	0x01, 0x53, 0xff, 0xff, 0xff, 0xff, 0x01, 0x78, 0x00, 0xa0, 0x00, 0xa1,
+	0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xa8, 0x00, 0xa9, 0x00, 0xaa, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x00, 0xaf, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x00, 0xb9,
+	0x00, 0xba, 0x00, 0xbb, 0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, 0x00, 0xbf,
+	0x00, 0xc0, 0x00, 0xc1, 0x00, 0xc2, 0x00, 0xc3, 0x00, 0xc4, 0x00, 0xc5,
+	0x00, 0xc6, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xca, 0x00, 0xcb,
+	0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x01, 0x1e, 0x00, 0xd1,
+	0x00, 0xd2, 0x00, 0xd3, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0xd6, 0x00, 0xd7,
+	0x00, 0xd8, 0x00, 0xd9, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x01, 0x30,
+	0x01, 0x5e, 0x00, 0xdf, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe2, 0x00, 0xe3,
+	0x00, 0xe4, 0x00, 0xe5, 0x00, 0xe6, 0x00, 0xe7, 0x00, 0xe8, 0x00, 0xe9,
+	0x00, 0xea, 0x00, 0xeb, 0x00, 0xec, 0x00, 0xed, 0x00, 0xee, 0x00, 0xef,
+	0x01, 0x1f, 0x00, 0xf1, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0xf4, 0x00, 0xf5,
+	0x00, 0xf6, 0x00, 0xf7, 0x00, 0xf8, 0x00, 0xf9, 0x00, 0xfa, 0x00, 0xfb,
+	0x00, 0xfc, 0x01, 0x31, 0x01, 0x5f, 0x00, 0xff
+};
diff --git a/libiconv/include/charmaps/windows-1255.h b/libiconv/include/charmaps/windows-1255.h
new file mode 100644
index 0000000..28bf513
--- /dev/null
+++ b/libiconv/include/charmaps/windows-1255.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_windows_1255[] = {
+	0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xff, 0x20, 0x1a, 0x01, 0x92,
+	0x20, 0x1e, 0x20, 0x26, 0x20, 0x20, 0x20, 0x21, 0x02, 0xc6, 0x20, 0x30,
+	0xff, 0xff, 0x20, 0x39, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22,
+	0x20, 0x13, 0x20, 0x14, 0x02, 0xdc, 0x21, 0x22, 0xff, 0xff, 0x20, 0x3a,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xa0, 0x00, 0xa1,
+	0x00, 0xa2, 0x00, 0xa3, 0x20, 0xaa, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xa8, 0x00, 0xa9, 0x00, 0xd7, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x00, 0xaf, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x00, 0xb9,
+	0x00, 0xf7, 0x00, 0xbb, 0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, 0x00, 0xbf,
+	0x05, 0xb0, 0x05, 0xb1, 0x05, 0xb2, 0x05, 0xb3, 0x05, 0xb4, 0x05, 0xb5,
+	0x05, 0xb6, 0x05, 0xb7, 0x05, 0xb8, 0x05, 0xb9, 0xff, 0xff, 0x05, 0xbb,
+	0x05, 0xbc, 0x05, 0xbd, 0x05, 0xbe, 0x05, 0xbf, 0x05, 0xc0, 0x05, 0xc1,
+	0x05, 0xc2, 0x05, 0xc3, 0x05, 0xf0, 0x05, 0xf1, 0x05, 0xf2, 0x05, 0xf3,
+	0x05, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0x05, 0xd0, 0x05, 0xd1, 0x05, 0xd2, 0x05, 0xd3,
+	0x05, 0xd4, 0x05, 0xd5, 0x05, 0xd6, 0x05, 0xd7, 0x05, 0xd8, 0x05, 0xd9,
+	0x05, 0xda, 0x05, 0xdb, 0x05, 0xdc, 0x05, 0xdd, 0x05, 0xde, 0x05, 0xdf,
+	0x05, 0xe0, 0x05, 0xe1, 0x05, 0xe2, 0x05, 0xe3, 0x05, 0xe4, 0x05, 0xe5,
+	0x05, 0xe6, 0x05, 0xe7, 0x05, 0xe8, 0x05, 0xe9, 0x05, 0xea, 0xff, 0xff,
+	0xff, 0xff, 0x20, 0x0e, 0x20, 0x0f, 0xff, 0xff
+};
diff --git a/libiconv/include/charmaps/windows-1256.h b/libiconv/include/charmaps/windows-1256.h
new file mode 100644
index 0000000..fbca315
--- /dev/null
+++ b/libiconv/include/charmaps/windows-1256.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_windows_1256[] = {
+	0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0x06, 0x7e, 0x20, 0x1a, 0x01, 0x92,
+	0x20, 0x1e, 0x20, 0x26, 0x20, 0x20, 0x20, 0x21, 0x02, 0xc6, 0x20, 0x30,
+	0x06, 0x79, 0x20, 0x39, 0x01, 0x52, 0x06, 0x86, 0x06, 0x98, 0x06, 0x88,
+	0x06, 0xaf, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22,
+	0x20, 0x13, 0x20, 0x14, 0x06, 0xa9, 0x21, 0x22, 0x06, 0x91, 0x20, 0x3a,
+	0x01, 0x53, 0x20, 0x0c, 0x20, 0x0d, 0x06, 0xba, 0x00, 0xa0, 0x06, 0x0c,
+	0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xa8, 0x00, 0xa9, 0x06, 0xbe, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x00, 0xaf, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x00, 0xb9,
+	0x06, 0x1b, 0x00, 0xbb, 0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, 0x06, 0x1f,
+	0x06, 0xc1, 0x06, 0x21, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25,
+	0x06, 0x26, 0x06, 0x27, 0x06, 0x28, 0x06, 0x29, 0x06, 0x2a, 0x06, 0x2b,
+	0x06, 0x2c, 0x06, 0x2d, 0x06, 0x2e, 0x06, 0x2f, 0x06, 0x30, 0x06, 0x31,
+	0x06, 0x32, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x00, 0xd7,
+	0x06, 0x37, 0x06, 0x38, 0x06, 0x39, 0x06, 0x3a, 0x06, 0x40, 0x06, 0x41,
+	0x06, 0x42, 0x06, 0x43, 0x00, 0xe0, 0x06, 0x44, 0x00, 0xe2, 0x06, 0x45,
+	0x06, 0x46, 0x06, 0x47, 0x06, 0x48, 0x00, 0xe7, 0x00, 0xe8, 0x00, 0xe9,
+	0x00, 0xea, 0x00, 0xeb, 0x06, 0x49, 0x06, 0x4a, 0x00, 0xee, 0x00, 0xef,
+	0x06, 0x4b, 0x06, 0x4c, 0x06, 0x4d, 0x06, 0x4e, 0x00, 0xf4, 0x06, 0x4f,
+	0x06, 0x50, 0x00, 0xf7, 0x06, 0x51, 0x00, 0xf9, 0x06, 0x52, 0x00, 0xfb,
+	0x00, 0xfc, 0x20, 0x0e, 0x20, 0x0f, 0x06, 0xd2
+};
diff --git a/libiconv/include/charmaps/windows-1257.h b/libiconv/include/charmaps/windows-1257.h
new file mode 100644
index 0000000..69d4474
--- /dev/null
+++ b/libiconv/include/charmaps/windows-1257.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_windows_1257[] = {
+	0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xff, 0x20, 0x1a, 0xff, 0xff,
+	0x20, 0x1e, 0x20, 0x26, 0x20, 0x20, 0x20, 0x21, 0xff, 0xff, 0x20, 0x30,
+	0xff, 0xff, 0x20, 0x39, 0xff, 0xff, 0x00, 0xa8, 0x02, 0xc7, 0x00, 0xb8,
+	0xff, 0xff, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22,
+	0x20, 0x13, 0x20, 0x14, 0xff, 0xff, 0x21, 0x22, 0xff, 0xff, 0x20, 0x3a,
+	0xff, 0xff, 0x00, 0xaf, 0x02, 0xdb, 0xff, 0xff, 0x00, 0xa0, 0xff, 0xff,
+	0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0xff, 0xff, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xd8, 0x00, 0xa9, 0x01, 0x56, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x00, 0xc6, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xf8, 0x00, 0xb9,
+	0x01, 0x57, 0x00, 0xbb, 0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, 0x00, 0xe6,
+	0x01, 0x04, 0x01, 0x2e, 0x01, 0x00, 0x01, 0x06, 0x00, 0xc4, 0x00, 0xc5,
+	0x01, 0x18, 0x01, 0x12, 0x01, 0x0c, 0x00, 0xc9, 0x01, 0x79, 0x01, 0x16,
+	0x01, 0x22, 0x01, 0x36, 0x01, 0x2a, 0x01, 0x3b, 0x01, 0x60, 0x01, 0x43,
+	0x01, 0x45, 0x00, 0xd3, 0x01, 0x4c, 0x00, 0xd5, 0x00, 0xd6, 0x00, 0xd7,
+	0x01, 0x72, 0x01, 0x41, 0x01, 0x5a, 0x01, 0x6a, 0x00, 0xdc, 0x01, 0x7b,
+	0x01, 0x7d, 0x00, 0xdf, 0x01, 0x05, 0x01, 0x2f, 0x01, 0x01, 0x01, 0x07,
+	0x00, 0xe4, 0x00, 0xe5, 0x01, 0x19, 0x01, 0x13, 0x01, 0x0d, 0x00, 0xe9,
+	0x01, 0x7a, 0x01, 0x17, 0x01, 0x23, 0x01, 0x37, 0x01, 0x2b, 0x01, 0x3c,
+	0x01, 0x61, 0x01, 0x44, 0x01, 0x46, 0x00, 0xf3, 0x01, 0x4d, 0x00, 0xf5,
+	0x00, 0xf6, 0x00, 0xf7, 0x01, 0x73, 0x01, 0x42, 0x01, 0x5b, 0x01, 0x6b,
+	0x00, 0xfc, 0x01, 0x7c, 0x01, 0x7e, 0x02, 0xd9
+};
diff --git a/libiconv/include/charmaps/windows-1258.h b/libiconv/include/charmaps/windows-1258.h
new file mode 100644
index 0000000..5bbd737
--- /dev/null
+++ b/libiconv/include/charmaps/windows-1258.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_windows_1258[] = {
+	0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xff, 0x20, 0x1a, 0x01, 0x92,
+	0x20, 0x1e, 0x20, 0x26, 0x20, 0x20, 0x20, 0x21, 0x02, 0xc6, 0x20, 0x30,
+	0xff, 0xff, 0x20, 0x39, 0x01, 0x52, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22,
+	0x20, 0x13, 0x20, 0x14, 0x02, 0xdc, 0x21, 0x22, 0xff, 0xff, 0x20, 0x3a,
+	0x01, 0x53, 0xff, 0xff, 0xff, 0xff, 0x01, 0x78, 0x00, 0xa0, 0x00, 0xa1,
+	0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7,
+	0x00, 0xa8, 0x00, 0xa9, 0x00, 0xaa, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad,
+	0x00, 0xae, 0x00, 0xaf, 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3,
+	0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x00, 0xb9,
+	0x00, 0xba, 0x00, 0xbb, 0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, 0x00, 0xbf,
+	0x00, 0xc0, 0x00, 0xc1, 0x00, 0xc2, 0x01, 0x02, 0x00, 0xc4, 0x00, 0xc5,
+	0x00, 0xc6, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xca, 0x00, 0xcb,
+	0x03, 0x00, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x01, 0x10, 0x00, 0xd1,
+	0x03, 0x09, 0x00, 0xd3, 0x00, 0xd4, 0x01, 0xa0, 0x00, 0xd6, 0x00, 0xd7,
+	0x00, 0xd8, 0x00, 0xd9, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x01, 0xaf,
+	0x03, 0x03, 0x00, 0xdf, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe2, 0x01, 0x03,
+	0x00, 0xe4, 0x00, 0xe5, 0x00, 0xe6, 0x00, 0xe7, 0x00, 0xe8, 0x00, 0xe9,
+	0x00, 0xea, 0x00, 0xeb, 0x03, 0x01, 0x00, 0xed, 0x00, 0xee, 0x00, 0xef,
+	0x01, 0x11, 0x00, 0xf1, 0x03, 0x23, 0x00, 0xf3, 0x00, 0xf4, 0x01, 0xa1,
+	0x00, 0xf6, 0x00, 0xf7, 0x00, 0xf8, 0x00, 0xf9, 0x00, 0xfa, 0x00, 0xfb,
+	0x00, 0xfc, 0x01, 0xb0, 0x20, 0xab, 0x00, 0xff
+};
diff --git a/libiconv/include/charmaps/windows-874.h b/libiconv/include/charmaps/windows-874.h
new file mode 100644
index 0000000..5749280
--- /dev/null
+++ b/libiconv/include/charmaps/windows-874.h
@@ -0,0 +1,24 @@ 
+static const unsigned char map_windows_874[] = {
+	0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0x20, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0x20, 0x18, 0x20, 0x19, 0x20, 0x1c, 0x20, 0x1d, 0x20, 0x22,
+	0x20, 0x13, 0x20, 0x14, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xa0, 0x0e, 0x01,
+	0x0e, 0x02, 0x0e, 0x03, 0x0e, 0x04, 0x0e, 0x05, 0x0e, 0x06, 0x0e, 0x07,
+	0x0e, 0x08, 0x0e, 0x09, 0x0e, 0x0a, 0x0e, 0x0b, 0x0e, 0x0c, 0x0e, 0x0d,
+	0x0e, 0x0e, 0x0e, 0x0f, 0x0e, 0x10, 0x0e, 0x11, 0x0e, 0x12, 0x0e, 0x13,
+	0x0e, 0x14, 0x0e, 0x15, 0x0e, 0x16, 0x0e, 0x17, 0x0e, 0x18, 0x0e, 0x19,
+	0x0e, 0x1a, 0x0e, 0x1b, 0x0e, 0x1c, 0x0e, 0x1d, 0x0e, 0x1e, 0x0e, 0x1f,
+	0x0e, 0x20, 0x0e, 0x21, 0x0e, 0x22, 0x0e, 0x23, 0x0e, 0x24, 0x0e, 0x25,
+	0x0e, 0x26, 0x0e, 0x27, 0x0e, 0x28, 0x0e, 0x29, 0x0e, 0x2a, 0x0e, 0x2b,
+	0x0e, 0x2c, 0x0e, 0x2d, 0x0e, 0x2e, 0x0e, 0x2f, 0x0e, 0x30, 0x0e, 0x31,
+	0x0e, 0x32, 0x0e, 0x33, 0x0e, 0x34, 0x0e, 0x35, 0x0e, 0x36, 0x0e, 0x37,
+	0x0e, 0x38, 0x0e, 0x39, 0x0e, 0x3a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0x0e, 0x3f, 0x0e, 0x40, 0x0e, 0x41, 0x0e, 0x42, 0x0e, 0x43,
+	0x0e, 0x44, 0x0e, 0x45, 0x0e, 0x46, 0x0e, 0x47, 0x0e, 0x48, 0x0e, 0x49,
+	0x0e, 0x4a, 0x0e, 0x4b, 0x0e, 0x4c, 0x0e, 0x4d, 0x0e, 0x4e, 0x0e, 0x4f,
+	0x0e, 0x50, 0x0e, 0x51, 0x0e, 0x52, 0x0e, 0x53, 0x0e, 0x54, 0x0e, 0x55,
+	0x0e, 0x56, 0x0e, 0x57, 0x0e, 0x58, 0x0e, 0x59, 0x0e, 0x5a, 0x0e, 0x5b,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
diff --git a/libiconv/m4/iconv.m4 b/libiconv/m4/iconv.m4
new file mode 100644
index 0000000..e2041b9
--- /dev/null
+++ b/libiconv/m4/iconv.m4
@@ -0,0 +1,214 @@ 
+# iconv.m4 serial 11 (gettext-0.18.1)
+dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      [am_cv_func_iconv=yes])
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        [am_cv_lib_iconv=yes]
+        [am_cv_func_iconv=yes])
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+      dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
+      am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\263";
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
+  return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+        [case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac])
+      LIBS="$am_save_LIBS"
+    ])
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+    AC_DEFINE([HAVE_ICONV], [1],
+      [Define if you have the iconv() function and it works.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST([LIBICONV])
+  AC_SUBST([LTLIBICONV])
+])
+
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl   Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl   Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl   warnings.
+m4_define([gl_iconv_AC_DEFUN],
+  m4_version_prereq([2.64],
+    [[AC_DEFUN_ONCE(
+        [$1], [$2])]],
+    [[AC_DEFUN(
+        [$1], [$2])]]))
+gl_iconv_AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL([am_cv_proto_iconv], [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([
+         $am_cv_proto_iconv])
+    AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])