fputwc.c 605 字节
Newer Older
R
Rich Felker 已提交
1 2 3 4 5 6 7 8 9 10
#include "stdio_impl.h"

wint_t __fputwc_unlocked(wchar_t c, FILE *f)
{
	char mbc[MB_LEN_MAX];
	int l;

	f->mode |= f->mode+1;

	if (isascii(c)) {
11
		c = putc_unlocked(c, f);
R
Rich Felker 已提交
12
	} else if (f->wpos + MB_LEN_MAX < f->wend) {
13
		l = wctomb((void *)f->wpos, c);
R
Rich Felker 已提交
14 15 16 17
		if (l < 0) c = WEOF;
		else f->wpos += l;
	} else {
		l = wctomb(mbc, c);
18
		if (l < 0 || __fwritex((void *)mbc, l, f) < l) c = WEOF;
R
Rich Felker 已提交
19 20 21 22 23 24 25 26 27
	}
	return c;
}

wint_t fputwc(wchar_t c, FILE *f)
{
	FLOCK(f);
	c = __fputwc_unlocked(c, f);
	FUNLOCK(f);
R
Rich Felker 已提交
28
	return c;
R
Rich Felker 已提交
29 30 31 32
}

weak_alias(__fputwc_unlocked, fputwc_unlocked);
weak_alias(__fputwc_unlocked, putwc_unlocked);