summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuo Jinghua <sunmoon1997@gmail.com>2010-01-10 23:06:51 +0800
committerLuo Jinghua <sunmoon1997@gmail.com>2010-01-10 23:06:51 +0800
commit83dccb88e122f298a943de694d1157b7d66f2f7a (patch)
tree28860909ad515efdf0ea26fef7d9cff9412c76bf
parentfc8948f86ed922087e093cba96e9ddd1bdaa1eeb (diff)
define iconv symbols if asked
-rw-r--r--iconv.c43
1 files changed, 36 insertions, 7 deletions
diff --git a/iconv.c b/iconv.c
index f13ba61..d63f0dd 100644
--- a/iconv.c
+++ b/iconv.c
@@ -1,9 +1,11 @@
#include "iconv.h"
#include "uniconv.h"
+#include "uniconvint.h"
#include <errno.h>
-iconv_t uc_iconv_open(const char *to, const char *from)
+iconv_t
+uc_iconv_open(const char *to, const char *from)
{
uniconv_t *uc = uniconv_open(to, from);
if (!uc)
@@ -11,10 +13,11 @@ iconv_t uc_iconv_open(const char *to, const char *from)
return uc;
}
-size_t uc_iconv (iconv_t cd, char **inbuf,
- size_t *inbytesleft,
- char **outbuf,
- size_t *outbytesleft)
+size_t
+uc_iconv (iconv_t cd, char **inbuf,
+ size_t *inbytesleft,
+ char **outbuf,
+ size_t *outbytesleft)
{
int ret;
@@ -42,7 +45,8 @@ size_t uc_iconv (iconv_t cd, char **inbuf,
return ret;
}
-int uc_iconv_close (iconv_t cd)
+int
+uc_iconv_close (iconv_t cd)
{
if (cd == (iconv_t)-1 || !cd) {
errno = EBADF;
@@ -53,7 +57,7 @@ int uc_iconv_close (iconv_t cd)
return 0;
}
-#ifdef __GNUC__
+#if defined(__GNUC__) && !defined(UNICONV_REPLACE_ICONV)
#define weak_alias(name, aliasname) _weak_alias(name, aliasname)
#define _weak_alias(name, aliasname) \
extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
@@ -65,3 +69,28 @@ weak_alias (uc_iconv, iconv)
weak_alias (uc_iconv_close, iconv_close)
#endif
+#ifdef UNICONV_REPLACE_ICONV
+#undef iconv_open
+#undef iconv
+#undef iconv_close
+
+iconv_t iconv_open(const char *to, const char *from)
+{
+ return uc_iconv_open(to, from);
+}
+
+size_t iconv (iconv_t cd, char **inbuf,
+ size_t *inbytesleft,
+ char **outbuf,
+ size_t *outbytesleft)
+{
+ return uc_iconv (cd, inbuf, inbytesleft, outbuf, outbytesleft);
+}
+
+int
+iconv_close (iconv_t cd)
+{
+ return uc_iconv_close (cd);
+}
+
+#endif