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