summaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/libc.h8
-rw-r--r--src/internal/locale_impl.h18
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)