xref: /haiku/headers/private/libroot/locale/ThreadLocale.h (revision 44cceee67e056d8e34cb017d5f5c07b9fac874c0)
1 /*
2  * Copyright 2022, Trung Nguyen, trungnt282910@gmail.com
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 
6 
7 #ifndef _THREAD_LOCALE_H
8 #define _THREAD_LOCALE_H
9 
10 
11 #include "LocaleBackend.h"
12 
13 
14 namespace BPrivate {
15 namespace Libroot {
16 
17 
18 // This struct is taken from glibc's __locale_struct
19 // from xlocale.h.
20 // It will also be used by glibc so it should have the same
21 // layout.
22 struct GlibcLocaleStruct {
23     void *__locales[7]; /* 7 = __LC_LAST. */
24 
25     const unsigned short int *__ctype_b;
26     const int *__ctype_tolower;
27     const int *__ctype_toupper;
28 };
29 
30 
31 // Taken from glibc's bits/locale.h
32 // glibc uses different codes from our the native locale.h.
33 // This should be the values used for the indexes
34 // in GlibcLocaleStruct.
35 enum {
36     GLIBC_LC_CTYPE = 0,
37     GLIBC_LC_NUMERIC = 1,
38     GLIBC_LC_TIME = 2,
39     GLIBC_LC_COLLATE = 3,
40     GLIBC_LC_MONETARY = 4,
41     GLIBC_LC_MESSAGES = 5,
42     GLIBC_LC_ALL = 6,
43 };
44 
45 
46 // The pointer in the TLS will point to this struct.
47 struct ThreadLocale {
48     GlibcLocaleStruct   glibcLocaleStruct;
49     LocaleBackendData*  threadLocaleInfo;
50 };
51 
52 
53 ThreadLocale* GetCurrentThreadLocale();
54 
55 
56 }	// namespace Libroot
57 }	// namespace BPrivate
58 
59 
60 #endif	// _THREAD_LOCALE_H
61