summaryrefslogtreecommitdiff
path: root/src/wchar/mbrtowc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wchar/mbrtowc.c')
-rw-r--r--src/wchar/mbrtowc.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/wchar/mbrtowc.c b/src/wchar/mbrtowc.c
index 16e2a937..aa7c4803 100644
--- a/src/wchar/mbrtowc.c
+++ b/src/wchar/mbrtowc.c
@@ -1,27 +1,29 @@
-#if 0
-
#include <wchar.h>
+#include "_wchar.h"
+GCC_SSE_HACK
size_t mbrtowc(wchar_t * restrict pwc, const char * restrict s, size_t n, mbstate_t * restrict ps)
{
+ static struct __mbstate_t internal = { 0 };
+ static mbstate_t ip = { &internal };
+
+ if (ps == NULL) {
+ ps = &ip;
+ }
+
SIGNAL_SAFE(0);
+ ASSERT_MBSTATE(ps, MBTOW, s, pwc);
/* TODO: overlap */
- (void)ps; (void)pwc; (void)n;
-
if (s == NULL) {
- s = "";
- n = 1;
+ return mbrtowc(NULL, "", 1, ps);
}
- /* TODO */
+ SET_MBSTATE(ps, MBTOW, s, pwc);
- return 0;
+ return n;
}
/*
STDC(199409)
*/
-
-
-#endif