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