diff options
-rw-r--r-- | mk/__wchar_h.d | 9 | ||||
-rw-r--r-- | mk/all.mk | 1 | ||||
-rw-r--r-- | mk/deps.mk | 4 | ||||
-rw-r--r-- | mk/wcstok.d | 1 | ||||
-rw-r--r-- | src/wchar/__wchar_h.c | 3 | ||||
-rw-r--r-- | src/wchar/_wchar.h | 5 | ||||
-rw-r--r-- | src/wchar/wcstok.c | 14 |
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 @@ -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 @@ -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 |