1 //////////////////////////////////////////////////////////////////////////////// 2 // Minimal xlocale implementation for Solaris. This implements the subset of 3 // the xlocale APIs that libc++ depends on. 4 //////////////////////////////////////////////////////////////////////////////// 5 #ifndef __XLOCALE_H_INCLUDED 6 #define __XLOCALE_H_INCLUDED 7 8 #ifdef __cplusplus 9 extern "C" { 10 #endif 11 12 13 typedef struct _LC_locale_t* locale_t; 14 15 #define LC_COLLATE_MASK (1<<0) 16 #define LC_CTYPE_MASK (1<<1) 17 #define LC_MESSAGES_MASK (1<<2) 18 #define LC_MONETARY_MASK (1<<3) 19 #define LC_NUMERIC_MASK (1<<4) 20 #define LC_TIME_MASK (1<<5) 21 #define LC_ALL_MASK (LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MESSAGES_MASK | \ 22 LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK) 23 24 #define LC_GLOBAL_LOCALE ((locale_t)-1) 25 26 size_t __mb_cur_max(locale_t l); 27 #define MB_CUR_MAX_L(l) __mb_cur_max(l) 28 29 locale_t newlocale(int mask, const char * locale, locale_t base); 30 void freelocale(locale_t loc); 31 32 wint_t btowc_l(int __c, locale_t __l); 33 34 int wctob_l(wint_t __c, locale_t __l); 35 36 size_t wcrtomb_l(char *__s, wchar_t __wc, mbstate_t *__ps, locale_t __l); 37 38 size_t mbrtowc_l(wchar_t *__pwc, const char *__s, size_t __n, 39 mbstate_t *__ps, locale_t __l); 40 41 int mbtowc_l(wchar_t *__pwc, const char *__pmb, size_t __max, locale_t __l); 42 43 size_t mbrlen_l(const char *__s, size_t __n, mbstate_t *__ps, locale_t __l); 44 45 struct lconv *localeconv_l(locale_t __l); 46 47 size_t mbsrtowcs_l(wchar_t *__dest, const char **__src, size_t __len, 48 mbstate_t *__ps, locale_t __l); 49 50 int sprintf_l(char *__s, locale_t __l, const char *__format, ...); 51 52 int snprintf_l(char *__s, size_t __n, locale_t __l, const char *__format, ...); 53 54 int asprintf_l(char **__s, locale_t __l, const char *__format, ...); 55 56 int sscanf_l(const char *__s, locale_t __l, const char *__format, ...); 57 58 int isalnum_l(int,locale_t); 59 int isalpha_l(int,locale_t); 60 int isblank_l(int,locale_t); 61 int iscntrl_l(int,locale_t); 62 int isdigit_l(int,locale_t); 63 int isgraph_l(int,locale_t); 64 int islower_l(int,locale_t); 65 int isprint_l(int,locale_t); 66 int ispunct_l(int,locale_t); 67 int isspace_l(int,locale_t); 68 int isupper_l(int,locale_t); 69 int isxdigit_l(int,locale_t); 70 71 int iswalnum_l(wchar_t,locale_t); 72 int iswalpha_l(wchar_t,locale_t); 73 int iswblank_l(wchar_t,locale_t); 74 int iswcntrl_l(wchar_t,locale_t); 75 int iswdigit_l(wchar_t,locale_t); 76 int iswgraph_l(wchar_t,locale_t); 77 int iswlower_l(wchar_t,locale_t); 78 int iswprint_l(wchar_t,locale_t); 79 int iswpunct_l(wchar_t,locale_t); 80 int iswspace_l(wchar_t,locale_t); 81 int iswupper_l(wchar_t,locale_t); 82 int iswxdigit_l(wchar_t,locale_t); 83 84 int iswctype_l(wint_t, wctype_t, locale_t); 85 86 int toupper_l(int __c, locale_t __l); 87 int tolower_l(int __c, locale_t __l); 88 wint_t towupper_l(wint_t __c, locale_t __l); 89 wint_t towlower_l(wint_t __c, locale_t __l); 90 91 92 int strcoll_l(const char *__s1, const char *__s2, locale_t __l); 93 int wcscoll_l(const wchar_t *__s1, const wchar_t *__s2, locale_t __l); 94 size_t strftime_l(char *__s, size_t __size, const char *__fmt, const struct tm 95 *__tm, locale_t __l); 96 97 size_t strxfrm_l(char *__s1, const char *__s2, size_t __n, locale_t __l); 98 99 size_t wcsxfrm_l(wchar_t *__ws1, const wchar_t *__ws2, size_t __n, 100 locale_t __l); 101 102 103 104 size_t 105 mbsnrtowcs_l(wchar_t * __restrict dst, const char ** __restrict src, 106 size_t nms, size_t len, mbstate_t * __restrict ps, locale_t loc); 107 108 109 size_t 110 wcsnrtombs_l(char * __restrict dst, const wchar_t ** __restrict src, 111 size_t nwc, size_t len, mbstate_t * __restrict ps, locale_t loc); 112 113 locale_t __cloc(void); 114 115 // FIXME: These are quick-and-dirty hacks to make things pretend to work 116 static inline 117 long long strtoll_l(const char *__nptr, char **__endptr, 118 int __base, locale_t __loc) { 119 return strtoll(__nptr, __endptr, __base); 120 } 121 static inline 122 long strtol_l(const char *__nptr, char **__endptr, 123 int __base, locale_t __loc) { 124 return strtol(__nptr, __endptr, __base); 125 } 126 static inline 127 long double strtold_l(const char *__nptr, char **__endptr, 128 locale_t __loc) { 129 return strtold(__nptr, __endptr); 130 } 131 static inline 132 unsigned long long strtoull_l(const char *__nptr, char **__endptr, 133 int __base, locale_t __loc) { 134 return strtoull(__nptr, __endptr, __base); 135 } 136 static inline 137 unsigned long strtoul_l(const char *__nptr, char **__endptr, 138 int __base, locale_t __loc) { 139 return strtoul(__nptr, __endptr, __base); 140 } 141 142 #ifdef __cplusplus 143 } 144 #endif 145 146 #endif 147