Home | History | Annotate | Download | only in solaris
      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