diff --git a/library/wchar_wcscmp.c b/library/wchar_wcscmp.c index 0c8103d..c12ff67 100644 --- a/library/wchar_wcscmp.c +++ b/library/wchar_wcscmp.c @@ -40,6 +40,6 @@ int wcscmp(const wchar_t *s1, const wchar_t * s2) { - /* ZZZ unimplemented */ - return(0); + for (; *s1==*s2 && *s1 && *s2; s1++, s2++); + return *s1 - *s2; } diff --git a/library/wchar_wcscpy.c b/library/wchar_wcscpy.c index 94b2ad9..d71fa25 100644 --- a/library/wchar_wcscpy.c +++ b/library/wchar_wcscpy.c @@ -40,6 +40,7 @@ wchar_t * wcscpy(wchar_t *dest, const wchar_t *src) { - /* ZZZ unimplemented */ - return(NULL); + wchar_t *a = dest; + while ((*dest++ = *src++)); + return a; } diff --git a/library/wchar_wcslen.c b/library/wchar_wcslen.c index 9ecc861..cc7393a 100644 --- a/library/wchar_wcslen.c +++ b/library/wchar_wcslen.c @@ -37,9 +37,12 @@ /****************************************************************************/ +/* Implementation based on musl */ + size_t wcslen(const wchar_t *s) { - /* ZZZ unimplemented */ - return(0); + const wchar_t *a; + for (a=s; *s; s++); + return s-a; } diff --git a/library/wchar_wcsncat.c b/library/wchar_wcsncat.c index 3155dc0..c993592 100644 --- a/library/wchar_wcsncat.c +++ b/library/wchar_wcsncat.c @@ -37,9 +37,14 @@ /****************************************************************************/ +/* Implementation based on musl */ + wchar_t * wcsncat(wchar_t *dest, const wchar_t *src, size_t n) { - /* ZZZ unimplemented */ - return(NULL); + wchar_t *a = dest; + dest += wcslen(dest); + while (n && *src) n--, *dest++ = *src++; + *dest++ = 0; + return a; } diff --git a/library/wchar_wctob.c b/library/wchar_wctob.c index de9a668..704d657 100644 --- a/library/wchar_wctob.c +++ b/library/wchar_wctob.c @@ -40,6 +40,6 @@ int wctob(wint_t c) { - /* ZZZ unimplemented */ - return(0); + if (c < 128U) return c; + return EOF; } diff --git a/library/wchar_wmemchr.c b/library/wchar_wmemchr.c index 840911b..003a40c 100644 --- a/library/wchar_wmemchr.c +++ b/library/wchar_wmemchr.c @@ -37,9 +37,11 @@ /****************************************************************************/ +/* Implementation based on musl */ + wchar_t * wmemchr(const wchar_t *ptr, wchar_t val, size_t len) { - /* ZZZ unimplemented */ - return(NULL); + for (; len && *ptr != val; len--, ptr++); + return len ? (wchar_t *)ptr : 0; } diff --git a/library/wchar_wmemcmp.c b/library/wchar_wmemcmp.c index b43fe93..454f348 100644 --- a/library/wchar_wmemcmp.c +++ b/library/wchar_wmemcmp.c @@ -37,9 +37,11 @@ /****************************************************************************/ +/* Implementation based on musl */ + int wmemcmp(const wchar_t *ptr1, const wchar_t *ptr2, size_t len) { - /* ZZZ unimplemented */ - return(0); + for (; len && *ptr1==*ptr2; len--, ptr1++, ptr2++); + return len ? *ptr1-*ptr2 : 0; } diff --git a/library/wchar_wmemcpy.c b/library/wchar_wmemcpy.c index 230b7c3..95f1b36 100644 --- a/library/wchar_wmemcpy.c +++ b/library/wchar_wmemcpy.c @@ -37,9 +37,12 @@ /****************************************************************************/ +/* Implementation based on musl */ + wchar_t * wmemcpy(wchar_t *dest, const wchar_t *src, size_t len) { - /* ZZZ unimplemented */ - return(NULL); + wchar_t *a = dest; + while (len--) *dest++ = *src++; + return a; } diff --git a/library/wchar_wmemmove.c b/library/wchar_wmemmove.c index 809ed84..06ffb54 100644 --- a/library/wchar_wmemmove.c +++ b/library/wchar_wmemmove.c @@ -37,9 +37,15 @@ /****************************************************************************/ +/* Implementation based on musl */ + wchar_t * wmemmove(wchar_t *dest, const wchar_t * src, size_t len) { - /* ZZZ unimplemented */ - return(NULL); + wchar_t *d0 = dest; + if ((size_t)(dest-src) < len) + while (len--) dest[len] = src[len]; + else + while (len--) *dest++ = *src++; + return d0; } diff --git a/library/wchar_wmemset.c b/library/wchar_wmemset.c index a593d51..e584832 100644 --- a/library/wchar_wmemset.c +++ b/library/wchar_wmemset.c @@ -37,9 +37,12 @@ /****************************************************************************/ +/* Implementation based on musl */ + wchar_t * wmemset(wchar_t *ptr, int val, size_t len) { - /* ZZZ unimplemented */ - return(NULL); + wchar_t *ret = ptr; + while (len--) *ptr++ = val; + return ret; } diff --git a/library/wctype_iswalnum.c b/library/wctype_iswalnum.c index 14fd7b2..834ff00 100644 --- a/library/wctype_iswalnum.c +++ b/library/wctype_iswalnum.c @@ -37,9 +37,10 @@ /****************************************************************************/ +/* Implementation based on musl */ + int iswalnum(wint_t c) { - /* ZZZ unimplemented */ - return(0); + return iswdigit(c) || iswalpha(c); } diff --git a/library/wctype_iswalpha.c b/library/wctype_iswalpha.c index 8840140..d90c00f 100644 --- a/library/wctype_iswalpha.c +++ b/library/wctype_iswalpha.c @@ -35,11 +35,12 @@ #include #endif /* _WCTYPE_HEADERS_H */ +#include + /****************************************************************************/ int iswalpha(wint_t c) { - /* ZZZ unimplemented */ - return(0); + return isalpha(c); } diff --git a/library/wctype_iswblank.c b/library/wctype_iswblank.c index a28f969..11fb9f3 100644 --- a/library/wctype_iswblank.c +++ b/library/wctype_iswblank.c @@ -35,11 +35,14 @@ #include #endif /* _WCTYPE_HEADERS_H */ +#include + /****************************************************************************/ +/* Implementation based on musl */ + int iswblank(wint_t c) { - /* ZZZ unimplemented */ - return(0); + return isblank(c); } diff --git a/library/wctype_iswdigit.c b/library/wctype_iswdigit.c index dcb1595..46e5aeb 100644 --- a/library/wctype_iswdigit.c +++ b/library/wctype_iswdigit.c @@ -35,11 +35,12 @@ #include #endif /* _WCTYPE_HEADERS_H */ +#include + /****************************************************************************/ int iswdigit(wint_t c) { - /* ZZZ unimplemented */ - return(0); + return isdigit(c); }