diff options
author | Jakob Kaivo <jkk@ung.org> | 2019-02-08 18:42:39 -0500 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2019-02-08 18:42:39 -0500 |
commit | 7ef8a7379f7f7d09e71ccae2a0b688c3cd80423f (patch) | |
tree | 092ab0aed1769117fd7b28b8592f6f96b0e0d5af /src/wchar | |
parent | 6acf19370e8adff79cd83b257d3f04aeaf2a59dd (diff) |
merge sources into single tree
Diffstat (limited to 'src/wchar')
70 files changed, 969 insertions, 0 deletions
diff --git a/src/wchar/FILE.ref b/src/wchar/FILE.ref new file mode 100644 index 00000000..5d9aa059 --- /dev/null +++ b/src/wchar/FILE.ref @@ -0,0 +1,3 @@ +#include <wchar.h> +REFERENCE(stdio/FILE.c) +STDC(199409) diff --git a/src/wchar/NULL.ref b/src/wchar/NULL.ref new file mode 100644 index 00000000..251fc86a --- /dev/null +++ b/src/wchar/NULL.ref @@ -0,0 +1,3 @@ +#include <wchar.h> +REFERENCE(stddef/NULL.c) +STDC(199409) diff --git a/src/wchar/WCHAR_MAX.c b/src/wchar/WCHAR_MAX.c new file mode 100644 index 00000000..de021945 --- /dev/null +++ b/src/wchar/WCHAR_MAX.c @@ -0,0 +1,6 @@ +#include <wchar.h> +#define WCHAR_MAX (0x1FFFF) + +/* +STDC(199409) +*/ diff --git a/src/wchar/WCHAR_MIN.c b/src/wchar/WCHAR_MIN.c new file mode 100644 index 00000000..dbf961db --- /dev/null +++ b/src/wchar/WCHAR_MIN.c @@ -0,0 +1,6 @@ +#include <wchar.h> +#define WCHAR_MIN (0) + +/* +STDC(199409) +*/ diff --git a/src/wchar/WEOF.ref b/src/wchar/WEOF.ref new file mode 100644 index 00000000..e8aa99f1 --- /dev/null +++ b/src/wchar/WEOF.ref @@ -0,0 +1,3 @@ +#include <wchar.h> +REFERENCE(wctype/WEOF.c) +STDC(199409) diff --git a/src/wchar/btowc.c b/src/wchar/btowc.c new file mode 100644 index 00000000..dd986119 --- /dev/null +++ b/src/wchar/btowc.c @@ -0,0 +1,21 @@ +#include <wchar.h> +#include "locale.h" +#include "string.h" + +wint_t btowc(int c) +{ + char *l = setlocale(LC_CTYPE, NULL); + + if (!strcmp(l, "C") || !strcmp(l, "POSIX")) { + if (c <= 127) { + return (unsigned char)c; + } + } + + /* conversion */ + return WEOF; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/fgetwc.c b/src/wchar/fgetwc.c new file mode 100644 index 00000000..30d98083 --- /dev/null +++ b/src/wchar/fgetwc.c @@ -0,0 +1,35 @@ +#include <wchar.h> +#include "stdio.h" +#include "nonstd/io.h" +#include "limits.h" + +wint_t fgetwc(FILE * stream) +{ + if (fwide(stream, 1) <= 0) { + + return WEOF; + } + + flockfile(stream); + stream->orientation = -1; + + char mbr[MB_LEN_MAX+1] = {0}; + int n = 0; + mbstate_t ps = 0; + wint_t wc = 0; + + /* FIXME: check for (size_t)-2 and (size_t)-1 from mbrtowc */ + do { + mbr[n++] = getc_unlocked(stream); + ps = 0; + } while (mbrtowc(&wc, mbr, n, &ps) != 0); + + stream->orientation = 1; + funlockfile(stream); + + return wc; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/fgetws.c b/src/wchar/fgetws.c new file mode 100644 index 00000000..5262a79d --- /dev/null +++ b/src/wchar/fgetws.c @@ -0,0 +1,37 @@ +#include <wchar.h> +#include "stdio.h" +#include "nonstd/assert.h" + +wchar_t * fgetws(wchar_t * restrict s, int n, FILE * restrict stream) +{ + ASSERT_NONNULL(s); + ASSERT_NONNULL(stream); + + if (fwide(stream, 1) <= 0) { + /* not a wide stream */ + return NULL; + } + + int i; + for (i = 0; i < n; i++) { + s[i] = fgetwc(stream); + if (s[i] == WEOF) { + if (feof(stream)) { + s[i] = L'\0'; + return s; + } + /* read or encoding error */ + return NULL; + } + if (s[i] == L'\0') { + break; + } + } + s[i] = L'\0'; + + return s; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/fputwc.c b/src/wchar/fputwc.c new file mode 100644 index 00000000..e7b9c503 --- /dev/null +++ b/src/wchar/fputwc.c @@ -0,0 +1,41 @@ +#include <wchar.h> +#include "stdio.h" +#include "nonstd/io.h" +#include "limits.h" +#include "errno.h" + +wint_t fputwc(wchar_t c, FILE * stream) +{ + size_t i; + + if (fwide(stream, 1) <= 0) { + /* not a wide stream */ + return WEOF; + } + + flockfile(stream); + stream->orientation = -1; + + char mbs[MB_LEN_MAX+1] = {0}; + mbstate_t ps = 0; + size_t len = wcrtomb(mbs, c, &ps); + + if (len == (size_t)-1) { + errno = EILSEQ; + return WEOF; + } + + /* FIXME: check for errors here */ + for (i = 0; i < len; i++) { + fputc(mbs[i], stream); + } + + stream->orientation = 1; + funlockfile(stream); + + return c; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/fputws.c b/src/wchar/fputws.c new file mode 100644 index 00000000..69c0aec3 --- /dev/null +++ b/src/wchar/fputws.c @@ -0,0 +1,12 @@ +#include <wchar.h> +#include "stdio.h" + +int fputws(const wchar_t * restrict s, FILE * restrict stream) +{ + (void)s; (void)stream; + return -1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/fwide.c b/src/wchar/fwide.c new file mode 100644 index 00000000..a1401a42 --- /dev/null +++ b/src/wchar/fwide.c @@ -0,0 +1,18 @@ +#include <wchar.h> +#include "stdio.h" +#include "nonstd/io.h" +#include "nonstd/assert.h" + +int fwide(FILE * stream, int mode) +{ + ASSERT_NONNULL(stream); + + if (stream->orientation == 0) { + stream->orientation = mode; + } + return stream->orientation; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/fwprintf.c b/src/wchar/fwprintf.c new file mode 100644 index 00000000..540405f9 --- /dev/null +++ b/src/wchar/fwprintf.c @@ -0,0 +1,16 @@ +#include <wchar.h> +#include "stdio.h" +#include "stdarg.h" + +int fwprintf(FILE * restrict stream, const wchar_t * restrict format, ...) +{ + va_list ap; + va_start(ap, format); + int ret = vfwprintf(stream, format, ap); + va_end(ap); + return ret; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/fwscanf.c b/src/wchar/fwscanf.c new file mode 100644 index 00000000..63324366 --- /dev/null +++ b/src/wchar/fwscanf.c @@ -0,0 +1,20 @@ +#include <wchar.h> +#include "stdio.h" +#include "stdarg.h" + +int fwscanf(FILE * restrict stream, const wchar_t * restrict format, ...) +{ + /* + va_list ap; + va_start(ap, format); + int ret = vfwscanf(stream, format, ap); + va_end(ap); + return ret; + */ + (void)stream; (void)format; + return -1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/getwc.c b/src/wchar/getwc.c new file mode 100644 index 00000000..6783e93c --- /dev/null +++ b/src/wchar/getwc.c @@ -0,0 +1,11 @@ +#include <wchar.h> +#include "stdio.h" + +wint_t getwc(FILE * stream) +{ + return fgetwc(stream); +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/getwchar.c b/src/wchar/getwchar.c new file mode 100644 index 00000000..8d4efa06 --- /dev/null +++ b/src/wchar/getwchar.c @@ -0,0 +1,11 @@ +#include <wchar.h> +#include "stdio.h" + +wint_t getwchar(void) +{ + return getwc(stdin); +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/mbrlen.c b/src/wchar/mbrlen.c new file mode 100644 index 00000000..dd0af70b --- /dev/null +++ b/src/wchar/mbrlen.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +size_t mbrlen(const char * restrict s, size_t n, mbstate_t * restrict ps) +{ + static mbstate_t internal = 0; + return mbrtowc(NULL, s, n, ps != NULL ? ps : &internal); +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/mbrtowc.c b/src/wchar/mbrtowc.c new file mode 100644 index 00000000..f6795d7f --- /dev/null +++ b/src/wchar/mbrtowc.c @@ -0,0 +1,19 @@ +#include <wchar.h> + +size_t mbrtowc(wchar_t * restrict pwc, const char * restrict s, size_t n, mbstate_t * restrict ps) +{ + (void)ps; (void)pwc; (void)n; + + if (s == NULL) { + s = ""; + n = 1; + } + + /* TODO */ + + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/mbsinit.c b/src/wchar/mbsinit.c new file mode 100644 index 00000000..f3d7b44f --- /dev/null +++ b/src/wchar/mbsinit.c @@ -0,0 +1,14 @@ +#include <wchar.h> + +int mbsinit(const mbstate_t * ps) +{ + if (ps == NULL || *ps == 0) { + return 1; + } + + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/mbsrtowcs.c b/src/wchar/mbsrtowcs.c new file mode 100644 index 00000000..12f5e6a1 --- /dev/null +++ b/src/wchar/mbsrtowcs.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +size_t mbsrtowcs(wchar_t * restrict dst, const char * restrict src, size_t len, mbstate_t * restrict ps) +{ + (void)dst; (void)src; (void)len; (void)ps; + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/mbstate_t.c b/src/wchar/mbstate_t.c new file mode 100644 index 00000000..d29ecfa5 --- /dev/null +++ b/src/wchar/mbstate_t.c @@ -0,0 +1,6 @@ +#include <wchar.h> +typedef int mbstate_t; + +/* +STDC(199409) +*/ diff --git a/src/wchar/putwc.c b/src/wchar/putwc.c new file mode 100644 index 00000000..58154c49 --- /dev/null +++ b/src/wchar/putwc.c @@ -0,0 +1,11 @@ +#include <wchar.h> +#include "stdio.h" + +wint_t putwc(wchar_t c, FILE * stream) +{ + return fputwc(c, stream); +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/putwchar.c b/src/wchar/putwchar.c new file mode 100644 index 00000000..291c45e9 --- /dev/null +++ b/src/wchar/putwchar.c @@ -0,0 +1,11 @@ +#include <wchar.h> +#include "stdio.h" + +wint_t putwchar(wchar_t c) +{ + return putwc(c, stdout); +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/size_t.ref b/src/wchar/size_t.ref new file mode 100644 index 00000000..a5058ebc --- /dev/null +++ b/src/wchar/size_t.ref @@ -0,0 +1,3 @@ +#include <wchar.h> +REFERENCE(stddef/size_t.c) +STDC(199409) diff --git a/src/wchar/struct_tm.c b/src/wchar/struct_tm.c new file mode 100644 index 00000000..a33f964c --- /dev/null +++ b/src/wchar/struct_tm.c @@ -0,0 +1,6 @@ +#include <wchar.h> +struct tm; + +/* +STDC(199409) +*/ diff --git a/src/wchar/swprintf.c b/src/wchar/swprintf.c new file mode 100644 index 00000000..1b9ef406 --- /dev/null +++ b/src/wchar/swprintf.c @@ -0,0 +1,15 @@ +#include <wchar.h> +#include "stdarg.h" + +int swprintf(wchar_t * restrict s, size_t n, const wchar_t * restrict format, ...) +{ + va_list ap; + va_start(ap, format); + int ret = vswprintf(s, n, format, ap); + va_end(ap); + return ret; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/swscanf.c b/src/wchar/swscanf.c new file mode 100644 index 00000000..2f10842a --- /dev/null +++ b/src/wchar/swscanf.c @@ -0,0 +1,19 @@ +#include <wchar.h> +#include "stdarg.h" + +int swscanf(const wchar_t * restrict s, const wchar_t * restrict format, ...) +{ + /* + va_list ap; + va_start(ap, format); + int ret = vswscanf(s, format, ap); + va_end(ap); + return ret; + */ + (void)s; (void)format; + return -1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/ungetwc.c b/src/wchar/ungetwc.c new file mode 100644 index 00000000..7c40ddb5 --- /dev/null +++ b/src/wchar/ungetwc.c @@ -0,0 +1,12 @@ +#include <wchar.h> +#include "stdio.h" + +wint_t ungetwc(wint_t c, FILE * stream) +{ + (void)c; (void)stream; + return -1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/va_list.ref b/src/wchar/va_list.ref new file mode 100644 index 00000000..ead1b4e1 --- /dev/null +++ b/src/wchar/va_list.ref @@ -0,0 +1,3 @@ +#include <wchar.h> +REFERENCE(stdarg/va_list.c) +STDC(199409) diff --git a/src/wchar/vfwprintf.c b/src/wchar/vfwprintf.c new file mode 100644 index 00000000..fbff917f --- /dev/null +++ b/src/wchar/vfwprintf.c @@ -0,0 +1,25 @@ +#include <wchar.h> +#include "stdio.h" +#include "stdarg.h" +#include "stdlib.h" + +int vfwprintf(FILE * restrict stream, const wchar_t * restrict format, va_list arg) +{ + /* + va_list ap; + va_copy(ap, arg); + int len = vsnwprintf(NULL, 0, format, arg); + wchar_t *buf = malloc((len + 1) * sizeof(wchar_t)); + len = vsnwprintf(buf, len, format, ap); + va_end(ap); + len = (int)fwrite(buf, sizeof(*buf), len, stream); + free(buf); + return len; + */ + (void)stream; (void)format; (void)arg; + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/vfwscanf.c b/src/wchar/vfwscanf.c new file mode 100644 index 00000000..75451ac6 --- /dev/null +++ b/src/wchar/vfwscanf.c @@ -0,0 +1,10 @@ +#include "stdio.h" +#include <wchar.h> + +int vfwscanf(FILE * restrict stream, const wchar_t * restrict format, va_list arg) +{ +} + +/* +STDC(199901) +*/ diff --git a/src/wchar/vswprintf.c b/src/wchar/vswprintf.c new file mode 100644 index 00000000..63169a59 --- /dev/null +++ b/src/wchar/vswprintf.c @@ -0,0 +1,12 @@ +#include "stdarg.h" +#include <wchar.h> + +int vswprintf(wchar_t * restrict s, size_t n, const wchar_t * restrict format, va_list arg) +{ + (void)s; (void)n; (void)format; (void)arg; + return -1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/vswscanf.c b/src/wchar/vswscanf.c new file mode 100644 index 00000000..b0896b75 --- /dev/null +++ b/src/wchar/vswscanf.c @@ -0,0 +1,9 @@ +#include <wchar.h> + +int vswscanf(const wchar_t * restrict s, const wchar_t * restrict format, va_list arg) +{ +} + +/* +STDC(199901) +*/ diff --git a/src/wchar/vwprintf.c b/src/wchar/vwprintf.c new file mode 100644 index 00000000..1f983489 --- /dev/null +++ b/src/wchar/vwprintf.c @@ -0,0 +1,11 @@ +#include <wchar.h> +#include "stdio.h" + +int vwprintf(const wchar_t * restrict format, va_list arg) +{ + return vfwprintf(stdout, format, arg); +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/vwscanf.c b/src/wchar/vwscanf.c new file mode 100644 index 00000000..757224a4 --- /dev/null +++ b/src/wchar/vwscanf.c @@ -0,0 +1,11 @@ +#include <wchar.h> +#include "stdarg.h" + +int vwscanf(const wchar_t * restrict format, va_list arg) +{ + return vfwscanf(stdin, format, arg); +} + +/* +STDC(199901) +*/ diff --git a/src/wchar/wchar_t.ref b/src/wchar/wchar_t.ref new file mode 100644 index 00000000..7fef322e --- /dev/null +++ b/src/wchar/wchar_t.ref @@ -0,0 +1,3 @@ +#include <wchar.h> +REFERENCE(stddef/wchar_t.c) +STDC(199409) diff --git a/src/wchar/wcrtomb.c b/src/wchar/wcrtomb.c new file mode 100644 index 00000000..f68c2177 --- /dev/null +++ b/src/wchar/wcrtomb.c @@ -0,0 +1,19 @@ +#include <wchar.h> +#include "limits.h" + +size_t wcrtomb(char * restrict s, wchar_t wc, mbstate_t * restrict ps) +{ + char buf[MB_LEN_MAX+1]; + if (s == NULL) { + s = buf; + wc = L'\0'; + } + (void)wc; (void)ps; + + /* do stuff */ + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcscat.c b/src/wchar/wcscat.c new file mode 100644 index 00000000..8ffec24f --- /dev/null +++ b/src/wchar/wcscat.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +wchar_t * wcscat(wchar_t * restrict s1, const wchar_t * restrict s2) +{ + wcscpy(s1 + wcslen(s1), s2); + return s1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcschr.c b/src/wchar/wcschr.c new file mode 100644 index 00000000..cc206ed8 --- /dev/null +++ b/src/wchar/wcschr.c @@ -0,0 +1,17 @@ +#include <wchar.h> + +wchar_t * wcschr(const wchar_t * s, wchar_t c) +{ + while (*s) { + if (*s == c) { + return (wchar_t*) s; + } + s++; + } + + return NULL; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcscmp.c b/src/wchar/wcscmp.c new file mode 100644 index 00000000..d07d9a10 --- /dev/null +++ b/src/wchar/wcscmp.c @@ -0,0 +1,25 @@ +#include <wchar.h> +#include "nonstd/assert.h" + +int wcscmp(const wchar_t * s1, const wchar_t * s2) +{ + ASSERT_NONNULL(s1); + ASSERT_NONNULL(s2); + + while (*s1 == *s2 && *s1 != L'\0') { + s1++; + s2++; + } + + if (*s1 > *s2) { + return 1; + } else if (*s1 < *s2) { + return -1; + } + + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcscoll.c b/src/wchar/wcscoll.c new file mode 100644 index 00000000..097a2cc4 --- /dev/null +++ b/src/wchar/wcscoll.c @@ -0,0 +1,15 @@ +#include <wchar.h> + +int wcscoll(const wchar_t * s1, const wchar_t * s2) +{ + /* + wchar_t *collated_s1 = s1; + wchar_t *collated_s2 = s2; + */ + /* wcsxfrm */ + return wcscmp(s1, s2); +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcscpy.c b/src/wchar/wcscpy.c new file mode 100644 index 00000000..2f92bc3f --- /dev/null +++ b/src/wchar/wcscpy.c @@ -0,0 +1,10 @@ +#include <wchar.h> + +wchar_t * wcscpy(wchar_t * restrict s1, const wchar_t * restrict s2) +{ + return wcsncpy(s1, s2, wcslen(s2)); +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcscspn.c b/src/wchar/wcscspn.c new file mode 100644 index 00000000..0c300a4a --- /dev/null +++ b/src/wchar/wcscspn.c @@ -0,0 +1,21 @@ +#include <wchar.h> +#include "nonstd/assert.h" + +size_t wcscspn(const wchar_t * s1, const wchar_t * s2) +{ + size_t i; + + ASSERT_NONNULL(s1); + ASSERT_NONNULL(s2); + + for (i = 0; s1[i] != L'\0'; i++) { + if (s1[i] == L'\0' || wcschr(s2, s1[i]) == NULL) { + return i; + } + } + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcsftime.c b/src/wchar/wcsftime.c new file mode 100644 index 00000000..ddca082d --- /dev/null +++ b/src/wchar/wcsftime.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +size_t wcsftime(wchar_t * restrict s, size_t maxsize, const wchar_t * restrict format, const struct tm * restrict timeptr) +{ + (void)s; (void)maxsize; (void)format; (void)timeptr; + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcslen.c b/src/wchar/wcslen.c new file mode 100644 index 00000000..5b4ec7be --- /dev/null +++ b/src/wchar/wcslen.c @@ -0,0 +1,14 @@ +#include <wchar.h> + +size_t wcslen(const wchar_t * s) +{ + size_t l = 0; + while (s[l] != L'\0') { + l++; + } + return l; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcsncat.c b/src/wchar/wcsncat.c new file mode 100644 index 00000000..8dccba65 --- /dev/null +++ b/src/wchar/wcsncat.c @@ -0,0 +1,12 @@ +#include <wchar.h> + +wchar_t * wcsncat(wchar_t * restrict s1, const wchar_t * restrict s2, size_t n) +{ + wcsncpy(s1 + wcslen(s1), s2, n); + /* ensure trailing nul */ + return s1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcsncmp.c b/src/wchar/wcsncmp.c new file mode 100644 index 00000000..d41899f4 --- /dev/null +++ b/src/wchar/wcsncmp.c @@ -0,0 +1,24 @@ +#include <wchar.h> +#include "nonstd/assert.h" + +int wcsncmp(const wchar_t * s1, const wchar_t * s2, size_t n) +{ + size_t i; + + ASSERT_NONNULL(s1); + ASSERT_NONNULL(s2); + + for (i = 0; i < n; i++) { + if (s1[i] > s2[i]) { + return 1; + } else if (s1[i] < s2[i]) { + return -1; + } + } + + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcsncpy.c b/src/wchar/wcsncpy.c new file mode 100644 index 00000000..ebae8133 --- /dev/null +++ b/src/wchar/wcsncpy.c @@ -0,0 +1,18 @@ +#include <wchar.h> + +wchar_t * wcsncpy(wchar_t * restrict s1, const wchar_t * restrict s2, size_t n) +{ + size_t i; + int nul = 0; + for (i = 0; i < n; i++) { + s1[i] = nul ? s2[i] : L'\0'; + if (s1[i] == L'\0') { + nul = 1; + } + } + return s1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcspbrk.c b/src/wchar/wcspbrk.c new file mode 100644 index 00000000..d1553fd1 --- /dev/null +++ b/src/wchar/wcspbrk.c @@ -0,0 +1,17 @@ +#include <wchar.h> + +wchar_t * wcspbrk(const wchar_t * s1, const wchar_t * s2) +{ + int i; + for (i = 0; s1[i] != L'\0'; i++) { + if (wcschr(s2, s1[i]) != NULL) { + return (wchar_t*)s1 + i; + } + } + + return NULL; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcsrchr.c b/src/wchar/wcsrchr.c new file mode 100644 index 00000000..291dc6f4 --- /dev/null +++ b/src/wchar/wcsrchr.c @@ -0,0 +1,17 @@ +#include <wchar.h> + +wchar_t * wcsrchr(const wchar_t * s, wchar_t c) +{ + wchar_t *last = NULL; + while (*s) { + if (*s == c) { + last = (wchar_t*)s; + } + s++; + } + return last; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcsrtombs.c b/src/wchar/wcsrtombs.c new file mode 100644 index 00000000..8df0bedf --- /dev/null +++ b/src/wchar/wcsrtombs.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +size_t wcsrtombs(char * restrict dst, const wchar_t ** restrict src, size_t len, mbstate_t * restrict ps) +{ + (void)dst; (void)src; (void)len; (void)ps; + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcsspn.c b/src/wchar/wcsspn.c new file mode 100644 index 00000000..50cd0e02 --- /dev/null +++ b/src/wchar/wcsspn.c @@ -0,0 +1,17 @@ +#include <wchar.h> + +size_t wcsspn(const wchar_t * s1, const wchar_t * s2) +{ + size_t i; + for (i = 0; s1[i] != L'\0'; i++) { + if (wcschr(s2, s1[i]) == NULL) { + return i; + } + } + + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcsstr.c b/src/wchar/wcsstr.c new file mode 100644 index 00000000..22cf9fa7 --- /dev/null +++ b/src/wchar/wcsstr.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +wchar_t * wcsstr(const wchar_t * s1, const wchar_t * s2) +{ + (void)s2; + return (wchar_t*)s1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcstod.c b/src/wchar/wcstod.c new file mode 100644 index 00000000..d8eeef74 --- /dev/null +++ b/src/wchar/wcstod.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +double wcstod(const wchar_t * restrict nptr, wchar_t ** restrict endptr) +{ + (void)nptr; (void)endptr; + return 0.0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcstof.c b/src/wchar/wcstof.c new file mode 100644 index 00000000..c9de199b --- /dev/null +++ b/src/wchar/wcstof.c @@ -0,0 +1,9 @@ +#include <wchar.h> + +float wcstof(const wchar_t * restrict nptr, wchar_t ** restrict endptr) +{ +} + +/* +STDC(199901) +*/ diff --git a/src/wchar/wcstok.c b/src/wchar/wcstok.c new file mode 100644 index 00000000..0c40f5d9 --- /dev/null +++ b/src/wchar/wcstok.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +wchar_t * wcstok(wchar_t * restrict s1, const wchar_t * restrict s2, wchar_t ** restrict ptr) +{ + (void)s1; (void)s2; (void)ptr; + return s1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcstol.c b/src/wchar/wcstol.c new file mode 100644 index 00000000..5d4a605d --- /dev/null +++ b/src/wchar/wcstol.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +long int wcstol(const wchar_t * restrict nptr, wchar_t ** restrict endptr, int base) +{ + (void)nptr; (void)endptr; (void)base; + return 0L; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcstold.c b/src/wchar/wcstold.c new file mode 100644 index 00000000..32001008 --- /dev/null +++ b/src/wchar/wcstold.c @@ -0,0 +1,9 @@ +#include <wchar.h> + +long double wcstold(const wchar_t * restrict nptr, wchar_t ** restrict endptr) +{ +} + +/* +STDC(199901) +*/ diff --git a/src/wchar/wcstoll.c b/src/wchar/wcstoll.c new file mode 100644 index 00000000..fc231433 --- /dev/null +++ b/src/wchar/wcstoll.c @@ -0,0 +1,9 @@ +#include <wchar.h> + +long long int wcstoll(const wchar_t * restrict nptr, wchar_t ** restrict endptr, int base) +{ +} + +/* +STDC(199901) +*/ diff --git a/src/wchar/wcstoul.c b/src/wchar/wcstoul.c new file mode 100644 index 00000000..8fcaeb8e --- /dev/null +++ b/src/wchar/wcstoul.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +unsigned long int wcstoul(const wchar_t * restrict nptr, wchar_t ** restrict endptr, int base) +{ + (void)nptr; (void)endptr; (void)base; + return 0UL; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wcstoull.c b/src/wchar/wcstoull.c new file mode 100644 index 00000000..92e12e59 --- /dev/null +++ b/src/wchar/wcstoull.c @@ -0,0 +1,9 @@ +#include <wchar.h> + +unsigned long long int wcstoull(const wchar_t * restrict nptr, wchar_t ** restrict endptr, int base) +{ +} + +/* +STDC(199901) +*/ diff --git a/src/wchar/wcsxfrm.c b/src/wchar/wcsxfrm.c new file mode 100644 index 00000000..acc87510 --- /dev/null +++ b/src/wchar/wcsxfrm.c @@ -0,0 +1,11 @@ +#include <wchar.h> + +size_t wcsxfrm(wchar_t * restrict s1, const wchar_t * restrict s2, size_t n) +{ + (void)s1; (void)s2; (void)n; + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wctob.c b/src/wchar/wctob.c new file mode 100644 index 00000000..fb110e0b --- /dev/null +++ b/src/wchar/wctob.c @@ -0,0 +1,22 @@ +#include <wchar.h> +#include "locale.h" +#include "string.h" +#include "stdio.h" + +int wctob(wint_t c) +{ + char *l = setlocale(LC_CTYPE, NULL); + + if (!strcmp(l, "C") || !strcmp(l, "POSIX")) { + if (c <= 127) { + return c; + } + } + + /* conversion */ + return EOF; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wint_t.ref b/src/wchar/wint_t.ref new file mode 100644 index 00000000..387f9fa3 --- /dev/null +++ b/src/wchar/wint_t.ref @@ -0,0 +1,3 @@ +#include <wchar.h> +REFERENCE(wctype/wint_t.c) +STDC(199409) diff --git a/src/wchar/wmemchr.c b/src/wchar/wmemchr.c new file mode 100644 index 00000000..b6d9ac7b --- /dev/null +++ b/src/wchar/wmemchr.c @@ -0,0 +1,21 @@ +#include <wchar.h> +#include "nonstd/assert.h" + +wchar_t * wmemchr(const wchar_t * s, wchar_t c, size_t n) +{ + size_t i; + + ASSERT_NONNULL(s); + + for (i = 0; i < n; i++) { + if (s[i] == c) { + return (wchar_t*)s + i; + } + } + + return NULL; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wmemcmp.c b/src/wchar/wmemcmp.c new file mode 100644 index 00000000..d3c2ce52 --- /dev/null +++ b/src/wchar/wmemcmp.c @@ -0,0 +1,20 @@ +#include <wchar.h> + +int wmemcmp(const wchar_t * s1, const wchar_t * s2, size_t n) +{ + size_t i; + + for (i = 0; i < n; i++) { + if (s1[i] > s2[i]) { + return 1; + } else if (s1[i] < s2[i]) { + return -1; + } + } + + return 0; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wmemcpy.c b/src/wchar/wmemcpy.c new file mode 100644 index 00000000..0b583011 --- /dev/null +++ b/src/wchar/wmemcpy.c @@ -0,0 +1,14 @@ +#include <wchar.h> + +wchar_t * wmemcpy(wchar_t * restrict s1, const wchar_t * restrict s2, size_t n) +{ + size_t i; + for (i = 0; i < n; i++) { + s1[i] = s2[i]; + } + return s1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wmemmove.c b/src/wchar/wmemmove.c new file mode 100644 index 00000000..11fd35dc --- /dev/null +++ b/src/wchar/wmemmove.c @@ -0,0 +1,15 @@ +#include <wchar.h> +#include "stdlib.h" + +wchar_t * wmemmove(wchar_t * s1, const wchar_t * s2, size_t n) +{ + wchar_t *tmp = malloc(n * sizeof(wchar_t)); + wmemcpy(tmp, s2, n); + wmemcpy(s1, tmp, n); + free(tmp); + return s1; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wmemset.c b/src/wchar/wmemset.c new file mode 100644 index 00000000..9b6ebe6d --- /dev/null +++ b/src/wchar/wmemset.c @@ -0,0 +1,14 @@ +#include <wchar.h> + +wchar_t * wmemset(wchar_t * s, wchar_t c, size_t n) +{ + size_t i; + for (i = 0; i < n; i++) { + s[i] = c; + } + return s; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wprintf.c b/src/wchar/wprintf.c new file mode 100644 index 00000000..9394e785 --- /dev/null +++ b/src/wchar/wprintf.c @@ -0,0 +1,15 @@ +#include <wchar.h> +#include "stdarg.h" + +int wprintf(const wchar_t * restrict format, ...) +{ + va_list ap; + va_start(ap, format); + int ret = vwprintf(format, ap); + va_end(ap); + return ret; +} + +/* +STDC(199409) +*/ diff --git a/src/wchar/wscanf.c b/src/wchar/wscanf.c new file mode 100644 index 00000000..abd74a33 --- /dev/null +++ b/src/wchar/wscanf.c @@ -0,0 +1,19 @@ +#include <wchar.h> +#include "stdarg.h" + +int wscanf(const wchar_t * restrict format, ...) +{ + /* + va_list ap; + va_start(ap, format); + int ret = vwscanf(format, ap); + va_end(ap); + return ret; + */ + (void)format; + return -1; +} + +/* +STDC(199409) +*/ |