Use _CALL_DL_FCT to call function from dynamically loaded object.
authordrepper <drepper>
Thu, 18 Jun 1998 16:49:56 +0000 (16:49 +0000)
committerdrepper <drepper>
Thu, 18 Jun 1998 16:49:56 +0000 (16:49 +0000)
iconv/gconv.c
iconv/gconv_db.c
iconv/skeleton.c

index 24dc21e..9484fc8 100644 (file)
@@ -22,6 +22,7 @@
 #include <assert.h>
 #include <gconv.h>
 #include <sys/param.h>
 #include <assert.h>
 #include <gconv.h>
 #include <sys/param.h>
+#include <elf/ldsodefs.h>
 
 
 int
 
 
 int
@@ -40,7 +41,8 @@ __gconv (gconv_t cd, const char **inbuf, const char *inbufend, char **outbuf,
 
   if (inbuf == NULL || *inbuf == NULL)
     /* We just flush.  */
 
   if (inbuf == NULL || *inbuf == NULL)
     /* We just flush.  */
-    result = (*cd->steps->fct) (cd->steps, cd->data, NULL, NULL, converted, 1);
+    result = _CALL_DL_FCT (cd->steps->fct,
+                          (cd->steps, cd->data, NULL, NULL, converted, 1));
   else
     {
       const char *last_start;
   else
     {
       const char *last_start;
@@ -52,8 +54,9 @@ __gconv (gconv_t cd, const char **inbuf, const char *inbufend, char **outbuf,
       do
        {
          last_start = *inbuf;
       do
        {
          last_start = *inbuf;
-         result = (*cd->steps->fct) (cd->steps, cd->data, inbuf, inbufend,
-                                     converted, 0);
+         result = _CALL_DL_FCT (cd->steps->fct,
+                                (cd->steps, cd->data, inbuf, inbufend,
+                                 converted, 0));
        }
       while (result == GCONV_EMPTY_INPUT && last_start != *inbuf
             && *inbuf + cd->steps->min_needed_from <= inbufend);
        }
       while (result == GCONV_EMPTY_INPUT && last_start != *inbuf
             && *inbuf + cd->steps->min_needed_from <= inbufend);
index b98cc8f..2c66249 100644 (file)
@@ -22,6 +22,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <bits/libc-lock.h>
 #include <stdlib.h>
 #include <string.h>
 #include <bits/libc-lock.h>
+#include <elf/ldsodefs.h>
 
 #include <gconv_int.h>
 
 
 #include <gconv_int.h>
 
@@ -154,7 +155,7 @@ free_derivation (void *p)
 
   for (cnt = 0; cnt < deriv->nsteps; ++cnt)
     if (deriv->steps[cnt].end_fct)
 
   for (cnt = 0; cnt < deriv->nsteps; ++cnt)
     if (deriv->steps[cnt].end_fct)
-      (*deriv->steps[cnt].end_fct) (&deriv->steps[cnt]);
+      _CALL_DL_FCT (deriv->steps[cnt].end_fct, (&deriv->steps[cnt]));
 
   free ((struct gconv_step *) deriv->steps);
   free (deriv);
 
   free ((struct gconv_step *) deriv->steps);
   free (deriv);
@@ -220,7 +221,7 @@ gen_steps (struct derivation_step *best, const char *toset,
 
          /* Call the init function.  */
          if (result[step_cnt].init_fct != NULL)
 
          /* Call the init function.  */
          if (result[step_cnt].init_fct != NULL)
-           (*result[step_cnt].init_fct) (&result[step_cnt]);
+           _CALL_DL_FCT (result[step_cnt].init_fct, (&result[step_cnt]));
 
          current = current->last;
        }
 
          current = current->last;
        }
@@ -231,7 +232,7 @@ gen_steps (struct derivation_step *best, const char *toset,
          while (++step_cnt < *nsteps)
            {
              if (result[step_cnt].end_fct != NULL)
          while (++step_cnt < *nsteps)
            {
              if (result[step_cnt].end_fct != NULL)
-               (*result[step_cnt].end_fct) (&result[step_cnt]);
+               _CALL_DL_FCT (result[step_cnt].end_fct, (&result[step_cnt]));
 #ifndef STATIC_GCONV
              __gconv_release_shlib (result[step_cnt].shlib_handle);
 #endif
 #ifndef STATIC_GCONV
              __gconv_release_shlib (result[step_cnt].shlib_handle);
 #endif
index 418247f..19e737a 100644 (file)
@@ -82,6 +82,7 @@
 #define __need_size_t
 #define __need_NULL
 #include <stddef.h>
 #define __need_size_t
 #define __need_NULL
 #include <stddef.h>
+#include <elf/ldsodefs.h>
 
 
 /* The direction objects.  */
 
 
 /* The direction objects.  */
@@ -218,7 +219,8 @@ FUNCTION_NAME (struct gconv_step *step, struct gconv_step_data *data,
          if (status == GCONV_OK)
 #endif
            /* Give the modules below the same chance.  */
          if (status == GCONV_OK)
 #endif
            /* Give the modules below the same chance.  */
-           status = (*fct) (next_step, next_data, NULL, NULL, written, 1);
+           status = _CALL_DL_FCT (fct, (next_step, next_data, NULL, NULL,
+                                        written, 1));
        }
     }
   else
        }
     }
   else
@@ -284,8 +286,8 @@ FUNCTION_NAME (struct gconv_step *step, struct gconv_step_data *data,
              const char *outerr = data->outbuf;
              int result;
 
              const char *outerr = data->outbuf;
              int result;
 
-             result = (*fct) (next_step, next_data, &outerr, outbuf,
-                              written, 0);
+             result = _CALL_DL_FCT (fct, (next_step, next_data, &outerr,
+                                          outbuf, written, 0));
 
              if (result != GCONV_EMPTY_INPUT)
                {
 
              if (result != GCONV_EMPTY_INPUT)
                {