scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit 4e9c575865375b57c0764a75775a84fb6c075550
parent dc1020739932d2daf3b963a7c4a7d18e5aaf654d
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Wed,  9 Nov 2022 21:27:14 +0100

libc: Remove mbstate_t handling

We only support UTF-8 that is stateless, so it does not make sense
to keep static variables and handle them when they are not going to
have any effect. We tried to keep this only in the lowest level but
it was generating too much edge cases with low benefit that it didn't
make sense.

Diffstat:
Msrc/libc/stdlib/mbstowcs.c | 4+---
Msrc/libc/stdlib/wcstombs.c | 4+---
Msrc/libc/wchar/fputwc.c | 4+---
Msrc/libc/wchar/mbrlen.c | 5-----
Msrc/libc/wchar/mbsrtowcs.c | 4----
Msrc/libc/wchar/wcsrtombs.c | 4----
6 files changed, 3 insertions(+), 22 deletions(-)

diff --git a/src/libc/stdlib/mbstowcs.c b/src/libc/stdlib/mbstowcs.c @@ -7,7 +7,5 @@ size_t mbstowcs(wchar_t *restrict dest, const char *restrict src, size_t n) { - mbstate_t p; - - return mbsrtowcs(dest, (void *) &src, n, memset(&p, 0, sizeof(p))); + return mbsrtowcs(dest, (void *) &src, n, NULL); } diff --git a/src/libc/stdlib/wcstombs.c b/src/libc/stdlib/wcstombs.c @@ -6,7 +6,5 @@ size_t wcstombs(char *restrict dest, const wchar_t *restrict src, size_t n) { - mbstate_t p; - - return wcsrtombs(dest, (void *) &src, n, memset(&p, 0, sizeof(p))); + return wcsrtombs(dest, (void *) &src, n, NULL); } diff --git a/src/libc/wchar/fputwc.c b/src/libc/wchar/fputwc.c @@ -9,11 +9,9 @@ wint_t _fputwc(wchar_t wc, FILE *fp, int *np) { int n; - mbstate_t state; char buf[MB_LEN_MAX]; - memset(&state, 0, sizeof(state)); - if ((n = wcrtomb(buf, wc, &state)) == -1) + if ((n = wcrtomb(buf, wc, NULL)) == -1) goto err; if (fwrite(buf, 1, n, fp) < n) goto err; diff --git a/src/libc/wchar/mbrlen.c b/src/libc/wchar/mbrlen.c @@ -5,10 +5,5 @@ size_t mbrlen(const char *restrict s, size_t n, mbstate_t *restrict ps) { - static mbstate_t p; - - if (!ps) - ps = &p; - return mbrtowc(NULL, s, n, ps); } diff --git a/src/libc/wchar/mbsrtowcs.c b/src/libc/wchar/mbsrtowcs.c @@ -9,10 +9,6 @@ mbsrtowcs(wchar_t *restrict dest, const char **restrict src, size_t len, { wchar_t wc; size_t cnt, n; - static mbstate_t p; - - if (!ps) - ps = &p; for (n = 0; ; n++) { cnt = mbrtowc(&wc, *src, MB_LEN_MAX, ps); diff --git a/src/libc/wchar/wcsrtombs.c b/src/libc/wchar/wcsrtombs.c @@ -11,10 +11,6 @@ wcsrtombs(char *restrict dest, const wchar_t **restrict src, size_t cnt, n; wchar_t wc; char buf[MB_LEN_MAX]; - static mbstate_t p; - - if (!ps) - ps = &p; for (n = 0; ; n += cnt) { wc = **src;