libc/fputwc: fix the return value truncated from stdio interface

Signed-off-by: guoshichao <guoshichao@xiaomi.com>
This commit is contained in:
guoshichao 2024-04-25 16:52:12 +08:00 committed by Xiang Xiao
parent d74e37d9db
commit ddc6e31740

View File

@ -60,22 +60,27 @@
wint_t fputwc_unlocked(wchar_t c, FAR FILE *f) wint_t fputwc_unlocked(wchar_t c, FAR FILE *f)
{ {
char mbc[MB_LEN_MAX]; char mbc[MB_LEN_MAX];
wint_t wc;
int l; int l;
if (isascii(c)) if (isascii(c))
{ {
c = putc_unlocked(c, f); wc = putc_unlocked(c, f);
} }
else else
{ {
l = wctomb(mbc, c); l = wctomb(mbc, c);
if (l < 0 || lib_fwrite_unlocked(mbc, l, f) < l) if (l < 0 || lib_fwrite_unlocked(mbc, l, f) < l)
{ {
c = WEOF; wc = WEOF;
}
else
{
wc = c;
} }
} }
return c; return wc;
} }
/**************************************************************************** /****************************************************************************
@ -97,9 +102,9 @@ wint_t fputwc_unlocked(wchar_t c, FAR FILE *f)
wint_t fputwc(wchar_t c, FAR FILE *f) wint_t fputwc(wchar_t c, FAR FILE *f)
{ {
flockfile(f); flockfile(f);
c = fputwc_unlocked(c, f); wint_t wc = fputwc_unlocked(c, f);
funlockfile(f); funlockfile(f);
return c; return wc;
} }
#endif /* CONFIG_FILE_STREAM */ #endif /* CONFIG_FILE_STREAM */