Ejemplo n.º 1
0
wint_t
__fputwc (struct _reent *ptr,
	wchar_t wc,
	FILE *fp)
{
  char buf[MB_LEN_MAX];
  size_t i, len;

  if (MB_CUR_MAX == 1 && wc > 0 && wc <= UCHAR_MAX)
    {
      /*
       * Assume single-byte locale with no special encoding.
       * A more careful test would be to check
       * _CurrentRuneLocale->encoding.
       */
      *buf = (unsigned char)wc;
      len = 1;
    }
  else
    {
      if ((len = _wcrtomb_r (ptr, buf, wc, &fp->_mbstate)) == (size_t) -1)
	{
	  fp->_flags |= __SERR;
	  return WEOF;
	}
    }

  for (i = 0; i < len; i++)
    if (__sputc_r (ptr, (unsigned char) buf[i], fp) == EOF)
      return WEOF;

  return (wint_t) wc;
}
Ejemplo n.º 2
0
Archivo: putc.c Proyecto: Earlz/earlzos
/*
 * A subroutine version of the macro putc.
 */

#undef putc

int
_DEFUN(_putc_r, (ptr, c, fp),
       struct _reent *ptr _AND
       int c _AND
       register FILE *fp)
{
  int result;
  CHECK_INIT (ptr, fp);
  _newlib_flockfile_start (fp);
  result = __sputc_r (ptr, c, fp);
  _newlib_flockfile_end (fp);
  return result;
}

#ifndef _REENT_ONLY
int
_DEFUN(putc, (c, fp),
       int c _AND
       register FILE *fp)
{
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
  int result;
  CHECK_INIT (_REENT, fp);
  _newlib_flockfile_start (fp);
  result = __sputc_r (_REENT, c, fp);