xref: /aosp_15_r20/external/musl/src/internal/locale_impl.h (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #ifndef _LOCALE_IMPL_H
2*c9945492SAndroid Build Coastguard Worker #define _LOCALE_IMPL_H
3*c9945492SAndroid Build Coastguard Worker 
4*c9945492SAndroid Build Coastguard Worker #include <locale.h>
5*c9945492SAndroid Build Coastguard Worker #include <stdlib.h>
6*c9945492SAndroid Build Coastguard Worker #include "libc.h"
7*c9945492SAndroid Build Coastguard Worker #include "pthread_impl.h"
8*c9945492SAndroid Build Coastguard Worker 
9*c9945492SAndroid Build Coastguard Worker #define LOCALE_NAME_MAX 23
10*c9945492SAndroid Build Coastguard Worker 
11*c9945492SAndroid Build Coastguard Worker struct __locale_map {
12*c9945492SAndroid Build Coastguard Worker 	const void *map;
13*c9945492SAndroid Build Coastguard Worker 	size_t map_size;
14*c9945492SAndroid Build Coastguard Worker 	char name[LOCALE_NAME_MAX+1];
15*c9945492SAndroid Build Coastguard Worker 	const struct __locale_map *next;
16*c9945492SAndroid Build Coastguard Worker };
17*c9945492SAndroid Build Coastguard Worker 
18*c9945492SAndroid Build Coastguard Worker extern hidden volatile int __locale_lock[1];
19*c9945492SAndroid Build Coastguard Worker 
20*c9945492SAndroid Build Coastguard Worker extern hidden const struct __locale_map __c_dot_utf8;
21*c9945492SAndroid Build Coastguard Worker extern hidden const struct __locale_struct __c_locale;
22*c9945492SAndroid Build Coastguard Worker extern hidden const struct __locale_struct __c_dot_utf8_locale;
23*c9945492SAndroid Build Coastguard Worker 
24*c9945492SAndroid Build Coastguard Worker hidden const struct __locale_map *__get_locale(int, const char *);
25*c9945492SAndroid Build Coastguard Worker hidden const char *__mo_lookup(const void *, size_t, const char *);
26*c9945492SAndroid Build Coastguard Worker hidden const char *__lctrans(const char *, const struct __locale_map *);
27*c9945492SAndroid Build Coastguard Worker hidden const char *__lctrans_cur(const char *);
28*c9945492SAndroid Build Coastguard Worker hidden const char *__lctrans_impl(const char *, const struct __locale_map *);
29*c9945492SAndroid Build Coastguard Worker hidden int __loc_is_allocated(locale_t);
30*c9945492SAndroid Build Coastguard Worker hidden char *__gettextdomain(void);
31*c9945492SAndroid Build Coastguard Worker 
32*c9945492SAndroid Build Coastguard Worker #define LOC_MAP_FAILED ((const struct __locale_map *)-1)
33*c9945492SAndroid Build Coastguard Worker 
34*c9945492SAndroid Build Coastguard Worker #define LCTRANS(msg, lc, loc) __lctrans(msg, (loc)->cat[(lc)])
35*c9945492SAndroid Build Coastguard Worker #define LCTRANS_CUR(msg) __lctrans_cur(msg)
36*c9945492SAndroid Build Coastguard Worker 
37*c9945492SAndroid Build Coastguard Worker #define C_LOCALE ((locale_t)&__c_locale)
38*c9945492SAndroid Build Coastguard Worker #define UTF8_LOCALE ((locale_t)&__c_dot_utf8_locale)
39*c9945492SAndroid Build Coastguard Worker 
40*c9945492SAndroid Build Coastguard Worker #define CURRENT_LOCALE (__pthread_self()->locale)
41*c9945492SAndroid Build Coastguard Worker 
42*c9945492SAndroid Build Coastguard Worker #define CURRENT_UTF8 (!!__pthread_self()->locale->cat[LC_CTYPE])
43*c9945492SAndroid Build Coastguard Worker 
44*c9945492SAndroid Build Coastguard Worker #undef MB_CUR_MAX
45*c9945492SAndroid Build Coastguard Worker #define MB_CUR_MAX (CURRENT_UTF8 ? 4 : 1)
46*c9945492SAndroid Build Coastguard Worker 
47*c9945492SAndroid Build Coastguard Worker #endif
48