about summary refs log tree commit diff
path: root/iconv/gconv.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2005-12-19 07:26:29 +0000
committerUlrich Drepper <drepper@redhat.com>2005-12-19 07:26:29 +0000
commit915a6c51c5d8127e87ef797ee23e04e4f92b4c4f (patch)
tree4c7f9881c4b6b3ab049688dc22e969c44e8fbcf9 /iconv/gconv.c
parent477aa8698f7963b0984c15016f62f99efe4bb0b5 (diff)
downloadglibc-915a6c51c5d8127e87ef797ee23e04e4f92b4c4f.tar.gz
glibc-915a6c51c5d8127e87ef797ee23e04e4f92b4c4f.tar.xz
glibc-915a6c51c5d8127e87ef797ee23e04e4f92b4c4f.zip
* iconv/gconv.c: Demangle pointers before use if necessary. cvs/fedora-glibc-20051219T1003
	* iconv/gconv_cache.c: Likewise.
	* iconv/skeleton.c: Likewise.
	* libio/iofwide.c: Likewise.
	* wcsmbs/btowc.c: Likewise.
	* wcsmbs/mbrtowc.c: Likewise.
	* wcsmbs/mbsnrtowcs.c: Likewise.
	* wcsmbs/mbsrtowcs_l.c: Likewise.
	* wcsmbs/wcrtomb.c: Likewise.
	* wcsmbs/wcsnrtombs.c: Likewise.
	* wcsmbs/wcsrtombs.c: Likewise.
	* wcsmbs/wctob.c: Likewise.
	* iconv_gconv_db.c: Likewise.  After init functions returns mangle
	btowc pointer if necessary.
	* iconv/gconv_dl.c: Mangle function pointers retrieved from dlsym.
Diffstat (limited to 'iconv/gconv.c')
-rw-r--r--iconv/gconv.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/iconv/gconv.c b/iconv/gconv.c
index f3f49b7db3..cd43d3d6fb 100644
--- a/iconv/gconv.c
+++ b/iconv/gconv.c
@@ -1,6 +1,6 @@
 /* Convert characters in input buffer using conversion descriptor to
    output buffer.
-   Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1997-2001, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -20,10 +20,13 @@
    02111-1307 USA.  */
 
 #include <assert.h>
-#include <gconv_int.h>
-#include <sys/param.h>
 #include <dlfcn.h>
 #include <stddef.h>
+#include <sys/param.h>
+
+#include <gconv_int.h>
+#include <sysdep.h>
+
 
 int
 internal_function
@@ -45,9 +48,15 @@ __gconv (__gconv_t cd, const unsigned char **inbuf,
   cd->__data[last_step].__outbuf = outbuf != NULL ? *outbuf : NULL;
   cd->__data[last_step].__outbufend = outbufend;
 
+  __gconv_fct fct = cd->__steps->__fct;
+#ifdef PTR_DEMANGLE
+  if (cd->__steps->__shlib_handle != NULL)
+    PTR_DEMANGLE (fct);
+#endif
+
   if (inbuf == NULL || *inbuf == NULL)
     /* We just flush.  */
-    result = DL_CALL_FCT (cd->__steps->__fct,
+    result = DL_CALL_FCT (fct,
 			  (cd->__steps, cd->__data, NULL, NULL, NULL,
 			   irreversible,
 			   cd->__data[last_step].__outbuf == NULL ? 2 : 1, 0));
@@ -60,7 +69,7 @@ __gconv (__gconv_t cd, const unsigned char **inbuf,
       do
 	{
 	  last_start = *inbuf;
-	  result = DL_CALL_FCT (cd->__steps->__fct,
+	  result = DL_CALL_FCT (fct,
 				(cd->__steps, cd->__data, inbuf, inbufend,
 				 NULL, irreversible, 0, 0));
 	}