/* * MT-safe version. */ wint_t fputwc(wchar_t wc, FILE *fp) { wint_t r; FLOCKFILE(fp); ORIENT(fp, 1); r = __fputwc(wc, fp); FUNLOCKFILE(fp); return (r); }
/* * MT-safe version. */ wint_t fputwc_l(wchar_t wc, FILE *fp, locale_t locale) { wint_t r; FIX_LOCALE(locale); FLOCKFILE(fp); r = __fputwc(wc, fp, locale); FUNLOCKFILE(fp); return (r); }
wint_t _fputwc_r (struct _reent *ptr, wchar_t wc, FILE *fp) { wint_t r; _newlib_flockfile_start (fp); ORIENT(fp, 1); r = __fputwc(ptr, wc, fp); _newlib_flockfile_end (fp); return r; }
/* * MT-safe version. */ wint_t fputwc_l(wchar_t wc, FILE *fp, locale_t locale) { wint_t r; FIX_LOCALE(locale); FLOCKFILE_CANCELSAFE(fp); ORIENT(fp, 1); r = __fputwc(wc, fp, locale); FUNLOCKFILE_CANCELSAFE(); return (r); }
/* * Like __fputwc, but handles fake string (__SSTR) files properly. * File must already be locked. */ static wint_t __xfputwc(wchar_t wc, FILE *fp) { mbstate_t mbs; char buf[MB_LEN_MAX]; struct __suio uio; struct __siov iov; size_t len; if ((fp->_flags & __SSTR) == 0) return (__fputwc(wc, fp)); mbs = initial_mbs; if ((len = wcrtomb(buf, wc, &mbs)) == (size_t)-1) { fp->_flags |= __SERR; return (WEOF); } uio.uio_iov = &iov; uio.uio_resid = len; uio.uio_iovcnt = 1; iov.iov_base = buf; iov.iov_len = len; return (__sfvwrite(fp, &uio) != EOF ? (wint_t)wc : WEOF); }