summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mk/__wchar_h.d9
-rw-r--r--mk/all.mk1
-rw-r--r--mk/deps.mk4
-rw-r--r--mk/wcstok.d1
-rw-r--r--src/wchar/__wchar_h.c3
-rw-r--r--src/wchar/_wchar.h5
-rw-r--r--src/wchar/wcstok.c14
7 files changed, 31 insertions, 6 deletions
diff --git a/mk/__wchar_h.d b/mk/__wchar_h.d
new file mode 100644
index 00000000..bafec99b
--- /dev/null
+++ b/mk/__wchar_h.d
@@ -0,0 +1,9 @@
+libc_C.0: libc.a(__wchar_h.o)
+libc.a(__wchar_h.o): $(OBJDIR)/__wchar_h.o
+ @$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
+
+$(OBJDIR)/__wchar_h.o: src/wchar/__wchar_h.c
+$(OBJDIR)/__wchar_h.o: src/wchar/_wchar.h
+$(OBJDIR)/__wchar_h.o:
+ @mkdir -p $(@D)
+ $(CC) -c -o $@ $(CFLAGS) src/wchar/__wchar_h.c
diff --git a/mk/all.mk b/mk/all.mk
index 2267c8ad..3b0445e6 100644
--- a/mk/all.mk
+++ b/mk/all.mk
@@ -148,6 +148,7 @@ include mk/wcstoull.d
include mk/fwprintf.d
include mk/wscanf_s.d
include mk/wcsrtombs_s.d
+include mk/__wchar_h.d
include mk/putwchar.d
include mk/wcstof.d
include mk/fwprintf_s.d
diff --git a/mk/deps.mk b/mk/deps.mk
index 2c18fa6a..d135b05b 100644
--- a/mk/deps.mk
+++ b/mk/deps.mk
@@ -602,6 +602,10 @@ all: mk/wcsrtombs_s.d
mk/wcsrtombs_s.d: src/wchar/wcsrtombs_s.c
sh mk/deps.sh src/wchar/wcsrtombs_s.c
+all: mk/__wchar_h.d
+mk/__wchar_h.d: src/wchar/__wchar_h.c
+ sh mk/deps.sh src/wchar/__wchar_h.c
+
all: mk/putwchar.d
mk/putwchar.d: src/wchar/putwchar.c
sh mk/deps.sh src/wchar/putwchar.c
diff --git a/mk/wcstok.d b/mk/wcstok.d
index 6015ccd2..fe95889e 100644
--- a/mk/wcstok.d
+++ b/mk/wcstok.d
@@ -3,6 +3,7 @@ libc.a(wcstok.o): $(OBJDIR)/wcstok.o
@$(AR) $(ARFLAGS) $@ $(OBJDIR)/$%
$(OBJDIR)/wcstok.o: src/wchar/wcstok.c
+$(OBJDIR)/wcstok.o: src/wchar/_wchar.h
$(OBJDIR)/wcstok.o:
@mkdir -p $(@D)
$(CC) -c -o $@ $(CFLAGS) src/wchar/wcstok.c
diff --git a/src/wchar/__wchar_h.c b/src/wchar/__wchar_h.c
new file mode 100644
index 00000000..20eba1c2
--- /dev/null
+++ b/src/wchar/__wchar_h.c
@@ -0,0 +1,3 @@
+#include "_wchar.h"
+
+struct __wchar_h __wchar_h = { 0 };
diff --git a/src/wchar/_wchar.h b/src/wchar/_wchar.h
index e5d87c7e..9b3a0cb2 100644
--- a/src/wchar/_wchar.h
+++ b/src/wchar/_wchar.h
@@ -6,6 +6,11 @@
#include "_safety.h"
#include "locale/_locale.h"
+extern struct __wchar_h {
+ wchar_t **wcstok;
+ size_t nwcstok;
+} __wchar_h;
+
struct __mbstate_t {
unsigned int ctype_epoch;
enum { NONE, WTOMB, MBTOW } dir;
diff --git a/src/wchar/wcstok.c b/src/wchar/wcstok.c
index a9cf8d01..02d2f87e 100644
--- a/src/wchar/wcstok.c
+++ b/src/wchar/wcstok.c
@@ -1,19 +1,21 @@
-#if 0
-
#include <wchar.h>
+#include "_wchar.h"
wchar_t * wcstok(wchar_t * restrict s1, const wchar_t * restrict s2, wchar_t ** restrict ptr)
{
SIGNAL_SAFE(0);
/* TODO: overlap */
+ if (s1 == NULL) {
+ ASSERT_PREV(*ptr, __wchar_h.wcstok, __wchar_h.nwcstok, "wcstok");
+ }
+
+ (void)s1; (void)s2;
+ *ptr = s1;
+ ADD_PREV(*ptr, __wchar_h.wcstok, __wchar_h.nwcstok);
- (void)s1; (void)s2; (void)ptr;
return s1;
}
/*
STDC(199409)
*/
-
-
-#endif