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:
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;
+}