Hello, certainly not. First of all _Thread_local is a C11 feature, out of reach for a portable library implementation still for some years. Then the requirement that this is a static state per function is a fixed requirement in the standard. No way out of that. Jens Am Freitag, den 08.05.2015, 15:36 +0800 schrieb 罗勇刚(Yonggang Luo) : > 218933012b1f0f052f91ac39ee5cc6daba99237d > src/multibyte/mbrtowc.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/src/multibyte/mbrtowc.c b/src/multibyte/mbrtowc.c > index e7b3654..de8d5ae 100644 > --- a/src/multibyte/mbrtowc.c > +++ b/src/multibyte/mbrtowc.c > @@ -8,15 +8,15 @@ > #include > #include "internal.h" > > +_Thread_local static mbstate_t internal_state; > size_t mbrtowc(wchar_t *restrict wc, const char *restrict src, size_t > n, mbstate_t *restrict st) > { > - static unsigned internal_state; > unsigned c; > const unsigned char *s = (const void *)src; > const unsigned N = n; > wchar_t dummy; > > - if (!st) st = (void *)&internal_state; > + if (!st) st = &internal_state; > c = *(unsigned *)st; > > if (!s) { > -- :: INRIA Nancy Grand Est ::: Camus ::::::: ICube/ICPS ::: :: ::::::::::::::: office Strasbourg : +33 368854536 :: :: :::::::::::::::::::::: gsm France : +33 651400183 :: :: ::::::::::::::: gsm international : +49 15737185122 :: :: http://icube-icps.unistra.fr/index.php/Jens_Gustedt ::