summaryrefslogtreecommitdiff
path: root/src/nonstd/__libc_per_thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nonstd/__libc_per_thread.c')
-rw-r--r--src/nonstd/__libc_per_thread.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/nonstd/__libc_per_thread.c b/src/nonstd/__libc_per_thread.c
new file mode 100644
index 00000000..5cc2f2a5
--- /dev/null
+++ b/src/nonstd/__libc_per_thread.c
@@ -0,0 +1,28 @@
+#include "nonstd/internal.h"
+#include "locale.h"
+#include "nonstd/locale.h"
+
+#if defined __STDC_VERSION__ && 201112L <= __STDC_VERSION__ && !defined __STDC_NO_THREADS__
+#define THREAD_LOCAL static _Thread_local
+#else
+#define THREAD_LOCAL static
+#endif
+
+void *__libc_per_thread(LIBC_INTERNAL variable)
+{
+ THREAD_LOCAL int errno;
+ THREAD_LOCAL struct __locale_t *locale;
+
+ switch (variable) {
+ case ERRNO:
+ return &errno;
+
+ case THREAD_LOCALE:
+ return &locale;
+
+ default:
+ break;
+ }
+
+ return (void*)0;
+}