diff options
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/libc.h | 8 | ||||
-rw-r--r-- | src/internal/locale_impl.h | 18 |
2 files changed, 23 insertions, 3 deletions
diff --git a/src/internal/libc.h b/src/internal/libc.h index fb4d9bc0..037d16b6 100644 --- a/src/internal/libc.h +++ b/src/internal/libc.h @@ -5,6 +5,11 @@ #include <stdio.h> #include <limits.h> +struct __locale_struct { + int ctype_utf8; + char *messages_name; +}; + struct __libc { int has_thread_pointer; int can_do_threads; @@ -16,6 +21,9 @@ struct __libc { int ofl_lock[2]; size_t tls_size; size_t page_size; + volatile int uselocale_cnt; + volatile int bytelocale_cnt_minus_1; + struct __locale_struct global_locale; }; extern size_t __hwcap; diff --git a/src/internal/locale_impl.h b/src/internal/locale_impl.h index f41c6f24..2747b85a 100644 --- a/src/internal/locale_impl.h +++ b/src/internal/locale_impl.h @@ -1,5 +1,17 @@ #include <locale.h> +#include <stdlib.h> +#include "libc.h" +#include "pthread_impl.h" -struct __locale_struct { - int dummy; -}; +#define LOCALE_NAME_MAX 15 + +int __setlocalecat(locale_t, int, const char *); + +#define CURRENT_LOCALE \ + (libc.uselocale_cnt ? __pthread_self()->locale : &libc.global_locale) + +#define CURRENT_UTF8 \ + (libc.bytelocale_cnt_minus_1<0 || __pthread_self()->locale->ctype_utf8) + +#undef MB_CUR_MAX +#define MB_CUR_MAX (CURRENT_UTF8 ? 4 : 1) |