status = DL_CALL_FCT (fct, (next_step, next_data, NULL, NULL, written, 1));
{  #ifdef DL_CALL_FCT status = DL_CALL_FCT (fct, (next_step, next_data, NULL, NULL, written, 1)); #else status = (*fct) (next_step, next_data, NULL, NULL, written, 1); #endif }
FUNCTION_NAME (struct gconv_step *step, struct gconv_step_data *data,	       const char **inbuf, const char *inbufend, size_t *written,	       int do_flush){  struct gconv_step *next_step = step + 1;  struct gconv_step_data *next_data = data + 1;  gconv_fct fct = next_step->fct;  int status;  /* If the function is called with no input this means we have to reset     to the initial state.  The possibly partly converted input is     dropped.  */  if (do_flush)    {      /* Call the steps down the chain if there are any.  */      if (data->is_last)	status = GCONV_OK;      else	{#ifdef EMIT_SHIFT_TO_INIT	  status = GCONV_OK;	  EMIT_SHIFT_TO_INIT;	  if (status == GCONV_OK)#endif	    /* Give the modules below the same chance.  */	    status = DL_CALL_FCT (fct, (next_step, next_data, NULL, NULL,					written, 1));	}    }  else    {      /* We preserve the initial values of the pointer variables.  */      const char *inptr = *inbuf;      char *outbuf = data->outbuf;      char *outend = data->outbufend;      char *outptr;      /* This variable is used to count the number of characters we	 actually converted.  */      size_t converted = 0;#ifdef PREPARE_LOOP      PREPARE_LOOP#endif      do	{	  /* Remember the start value for this round.  */	  inptr = *inbuf;	  /* The outbuf buffer is empty.  */	  outptr = outbuf;#ifdef SAVE_RESET_STATE	  SAVE_RESET_STATE (1);#endif	  if (FROM_DIRECTION)	    /* Run the conversion loop.  */	    status = FROM_LOOP ((const unsigned char **) inbuf,				(const unsigned char *) inbufend,				(unsigned char **) &outbuf,				(unsigned char *) outend,				data->statep, step->data, &converted				EXTRA_LOOP_ARGS);	  else	    /* Run the conversion loop.  */	    status = TO_LOOP ((const unsigned char **) inbuf,			      (const unsigned char *) inbufend,			      (unsigned char **) &outbuf,			      (unsigned char *) outend,			      data->statep, step->data, &converted			      EXTRA_LOOP_ARGS);	  /* If this is the last step leave the loop, there is nothgin             we can do.  */	  if (data->is_last)	    {	      /* Store information about how many bytes are available.  */	      data->outbuf = outbuf;	      /* Remember how many characters we converted.  */	      *written += converted;	      break;	    }	  /* Write out all output which was produced.  */	  if (outbuf > outptr)	    {	      const char *outerr = data->outbuf;	      int result;	      result = DL_CALL_FCT (fct, (next_step, next_data, &outerr,					  outbuf, written, 0));	      if (result != GCONV_EMPTY_INPUT)		{		  if (outerr != outbuf)		    {#ifdef RESET_INPUT_BUFFER		      RESET_INPUT_BUFFER;#else		      /* We have a problem with the in on of the functions			 below.  Undo the conversion upto the error point.  */		      size_t nstatus;		      /* Reload the pointers.  */		      *inbuf = inptr;		      outbuf = outptr;		      /* Reset the state.  */# ifdef SAVE_RESET_STATE		      SAVE_RESET_STATE (0);# endif		      if (FROM_DIRECTION)			/* Run the conversion loop.  */			nstatus = FROM_LOOP ((const unsigned char **) inbuf,					     (const unsigned char *) inbufend,					     (unsigned char **) &outbuf,					     (unsigned char *) outerr,					     data->statep, step->data,					     &converted EXTRA_LOOP_ARGS);		      else			/* Run the conversion loop.  */			nstatus = TO_LOOP ((const unsigned char **) inbuf,					   (const unsigned char *) inbufend,					   (unsigned char **) &outbuf,					   (unsigned char *) outerr,					   data->statep, step->data,					   &converted EXTRA_LOOP_ARGS);		      /* We must run out of output buffer space in this			 rerun.  */		      assert (outbuf == outerr);		      assert (nstatus == GCONV_FULL_OUTPUT);#endif	/* reset input buffer */		    }		  /* Change the status.  */		  status = result;		}	      else		/* All the output is consumed, we can make another run		   if everything was ok.  */		if (status == GCONV_FULL_OUTPUT)		  status = GCONV_OK;	    }	}      while (status == GCONV_OK);#ifdef END_LOOP      END_LOOP#endif      /* We finished one use of this step.  */      ++data->invocation_counter;    }  return status;}