summaryrefslogtreecommitdiff
path: root/libunls/nls_iconv.c
diff options
context:
space:
mode:
Diffstat (limited to 'libunls/nls_iconv.c')
-rw-r--r--libunls/nls_iconv.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/libunls/nls_iconv.c b/libunls/nls_iconv.c
new file mode 100644
index 0000000..828e2af
--- /dev/null
+++ b/libunls/nls_iconv.c
@@ -0,0 +1,101 @@
+/*
+ * This file has been modified for the cdrkit suite.
+ *
+ * The behaviour and appearence of the program code below can differ to a major
+ * extent from the version distributed by the original author(s).
+ *
+ * For details, see Changelog file distributed with the cdrkit package. If you
+ * received this file from another source then ask the distributing person for
+ * a log of modifications.
+ *
+ */
+
+/* @(#)nls_iconv.c 1.0 02/04/20 2002 J. Schilling */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/*
+ * Modifications to make the code portable Copyright (c) 2000 J. Schilling
+ *
+ * nls_iconv: create a pseudo-charset table to use iconv() provided by C
+ * library or libiconv by Bruno Haible
+ * The Unicode to charset table has only exact mappings.
+ *
+ *
+ * Jungshik Shin (jshin@mailaps.org) 04-Feb-2002
+ */
+
+#ifdef USE_ICONV
+#include <mconfig.h>
+#include <stdio.h>
+#include <stdxlib.h>
+#include <strdefs.h>
+#include "nls.h"
+#include <iconv.h>
+
+static void inc_use_count(void);
+static void dec_use_count(void);
+
+
+static void
+inc_use_count()
+{
+ MOD_INC_USE_COUNT;
+}
+
+static void
+dec_use_count()
+{
+ MOD_DEC_USE_COUNT;
+}
+
+int
+init_nls_iconv(char *charset)
+{
+ iconv_t iconv_d; /* iconv conversion descriptor */
+ struct unls_table *table;
+
+ /* give up if no charset is given */
+ if (charset == NULL)
+ return -1;
+
+ /* see if we already have a table with this name - built in tables
+ have precedence over iconv() - i.e. can't have the name of an
+ existing table. Also, we may have already registered this file
+ table */
+ if (find_unls(charset) != NULL)
+ return -1;
+
+ if ((iconv_d = iconv_open("UCS-2BE", charset)) == (iconv_t) -1)
+ return -1;
+
+
+ /* set up the table */
+ if ((table = (struct unls_table *)malloc(sizeof (struct unls_table)))
+ == NULL) {
+ return -1;
+ }
+
+ /* give the table the file name, so we can find it again if needed */
+ table->unls_name = strdup(charset);
+ table->unls_uni2cs = NULL;
+ table->unls_cs2uni = NULL;
+ table->unls_next = NULL;
+ table->iconv_d = iconv_d;
+
+ /* register the table */
+ return register_unls(table);
+}
+#endif