scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit c116f1bb33716f7161b108b6636a3d1171c7c85e
parent 0e6a91f0ad480a0a2e1745679c3cf712f19b4719
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Mon,  7 Nov 2022 13:42:27 +0100

libc/wchar: Add fputwc()

Diffstat:
Msrc/libc/objs/common-objs.mk | 1+
Msrc/libc/wchar/Makefile | 1+
Asrc/libc/wchar/fputwc.c | 25+++++++++++++++++++++++++
3 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/src/libc/objs/common-objs.mk b/src/libc/objs/common-objs.mk @@ -118,6 +118,7 @@ COMMON_OBJS =\ time/mktime.$O\ time/strftime.$O\ time/tz.$O\ + wchar/fputwc.$O\ wchar/mbrlen.$O\ wchar/mbrtowc.$O\ wchar/mbsrtowcs.$O\ diff --git a/src/libc/wchar/Makefile b/src/libc/wchar/Makefile @@ -4,6 +4,7 @@ include $(PROJECTDIR)/scripts/rules.mk include ../rules.mk OBJS =\ + fputwc.$O\ mbrlen.$O\ mbrtowc.$O\ mbsrtowcs.$O\ diff --git a/src/libc/wchar/fputwc.c b/src/libc/wchar/fputwc.c @@ -0,0 +1,25 @@ +#include <limits.h> +#include <stdio.h> +#include <string.h> +#include <wchar.h> + +#undef fputwc + +wint_t +fputwc(wchar_t wc, FILE *fp) +{ + int n; + mbstate_t state; + char buf[MB_LEN_MAX]; + + memset(&state, 0, sizeof(state)); + if ((n = wcrtomb(buf, wc, &state)) == -1) + goto err; + if (fwrite(buf, 1, n, fp) < n) + goto err; + return wc; + +err: + fp->flags |= _IOERR; + return WEOF; +}