summaryrefslogtreecommitdiffstats
path: root/lib/libkiconv
diff options
context:
space:
mode:
authorgabor <gabor@FreeBSD.org>2012-05-25 22:07:13 +0000
committergabor <gabor@FreeBSD.org>2012-05-25 22:07:13 +0000
commite3765812b6b15da1da6be43ae49b83a8c641de43 (patch)
tree07edc4a98d4b7a649cb200cba2a77d702afadc7f /lib/libkiconv
parent0d9131d0d02e011dee7e46b412e084151b01a408 (diff)
downloadFreeBSD-src-e3765812b6b15da1da6be43ae49b83a8c641de43.zip
FreeBSD-src-e3765812b6b15da1da6be43ae49b83a8c641de43.tar.gz
- Add support for BSD iconv when it is build into libc
PR: bin/162670 Submitted by: Jan Beich <jbeich@tormail.net> MFC after: 2 weeks
Diffstat (limited to 'lib/libkiconv')
-rw-r--r--lib/libkiconv/Makefile4
-rw-r--r--lib/libkiconv/xlat16_iconv.c10
2 files changed, 14 insertions, 0 deletions
diff --git a/lib/libkiconv/Makefile b/lib/libkiconv/Makefile
index 4ba860e..2f87f4b 100644
--- a/lib/libkiconv/Makefile
+++ b/lib/libkiconv/Makefile
@@ -17,4 +17,8 @@ CFLAGS+= -I${.CURDIR}/../../sys
WARNS?= 1
+.if !defined(MK_ICONV)
+CFLAGS+= -DICONV_DLOPEN
+.endif
+
.include <bsd.lib.mk>
diff --git a/lib/libkiconv/xlat16_iconv.c b/lib/libkiconv/xlat16_iconv.c
index dc9dc86..f402b78 100644
--- a/lib/libkiconv/xlat16_iconv.c
+++ b/lib/libkiconv/xlat16_iconv.c
@@ -60,10 +60,18 @@ struct xlat16_table {
static struct xlat16_table kiconv_xlat16_open(const char *, const char *, int);
static int chklocale(int, const char *);
+#ifdef ICONV_DLOPEN
static int my_iconv_init(void);
static iconv_t (*my_iconv_open)(const char *, const char *);
static size_t (*my_iconv)(iconv_t, const char **, size_t *, char **, size_t *);
static int (*my_iconv_close)(iconv_t);
+#else
+#include <iconv.h>
+#define my_iconv_init() 0
+#define my_iconv_open iconv_open
+#define my_iconv iconv
+#define my_iconv_close iconv_close
+#endif
static size_t my_iconv_char(iconv_t, const u_char **, size_t *, u_char **, size_t *);
int
@@ -310,6 +318,7 @@ chklocale(int category, const char *code)
return (error);
}
+#ifdef ICONV_DLOPEN
static int
my_iconv_init(void)
{
@@ -327,6 +336,7 @@ my_iconv_init(void)
return (0);
}
+#endif
static size_t
my_iconv_char(iconv_t cd, const u_char **ibuf, size_t * ilen, u_char **obuf,
OpenPOWER on IntegriCloud