if (cd == (gconv_t) -1L) return GCONV_ILLEGAL_DESCRIPTOR;
__gconv (gconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf,	 size_t *outbytesleft, size_t *converted){  size_t last_step = cd->nsteps - 1;  size_t oldinbytes = *inbytesleft;  int result;  cd->data[last_step].outbuf = *outbuf;  cd->data[last_step].outbufavail = 0;  cd->data[last_step].outbufsize = *outbytesleft;  if (converted != NULL)    *converted = 0;  result = (*cd->steps->fct) (cd->steps, cd->data, *inbuf, inbytesleft,			      converted, inbuf == NULL || *inbuf == NULL);  *inbuf += oldinbytes - *inbytesleft;  *outbuf += cd->data[last_step].outbufavail;  *outbytesleft -= cd->data[last_step].outbufavail;  return result;}