Home | History | Annotate | Download | only in xlocale
      1 // -*- C++ -*-
      2 //===------------------- support/xlocale/xlocale.h ------------------------===//
      3 //
      4 //                     The LLVM Compiler Infrastructure
      5 //
      6 // This file is dual licensed under the MIT and the University of Illinois Open
      7 // Source Licenses. See LICENSE.TXT for details.
      8 //
      9 //===----------------------------------------------------------------------===//
     10 // This is a shared implementation of a shim to provide extended locale support
     11 // on top of libc's that don't support it (like Android's bionic, and Newlib).
     12 //
     13 // The 'illusion' only works when the specified locale is "C" or "POSIX", but
     14 // that's about as good as we can do without implementing full xlocale support
     15 // in the underlying libc.
     16 //===----------------------------------------------------------------------===//
     17 
     18 #ifndef _LIBCPP_SUPPORT_XLOCALE_XLOCALE_H
     19 #define _LIBCPP_SUPPORT_XLOCALE_XLOCALE_H
     20 
     21 #ifdef __cplusplus
     22 extern "C" {
     23 #endif
     24 
     25 static inline int isalnum_l(int c, locale_t) {
     26   return isalnum(c);
     27 }
     28 
     29 static inline int isalpha_l(int c, locale_t) {
     30   return isalpha(c);
     31 }
     32 
     33 static inline int isblank_l(int c, locale_t) {
     34   return isblank(c);
     35 }
     36 
     37 static inline int iscntrl_l(int c, locale_t) {
     38   return iscntrl(c);
     39 }
     40 
     41 static inline int isdigit_l(int c, locale_t) {
     42   return isdigit(c);
     43 }
     44 
     45 static inline int isgraph_l(int c, locale_t) {
     46   return isgraph(c);
     47 }
     48 
     49 static inline int islower_l(int c, locale_t) {
     50   return islower(c);
     51 }
     52 
     53 static inline int isprint_l(int c, locale_t) {
     54   return isprint(c);
     55 }
     56 
     57 static inline int ispunct_l(int c, locale_t) {
     58   return ispunct(c);
     59 }
     60 
     61 static inline int isspace_l(int c, locale_t) {
     62   return isspace(c);
     63 }
     64 
     65 static inline int isupper_l(int c, locale_t) {
     66   return isupper(c);
     67 }
     68 
     69 static inline int isxdigit_l(int c, locale_t) {
     70   return isxdigit(c);
     71 }
     72 
     73 static inline int iswalnum_l(wint_t c, locale_t) {
     74   return iswalnum(c);
     75 }
     76 
     77 static inline int iswalpha_l(wint_t c, locale_t) {
     78   return iswalpha(c);
     79 }
     80 
     81 static inline int iswblank_l(wint_t c, locale_t) {
     82   return iswblank(c);
     83 }
     84 
     85 static inline int iswcntrl_l(wint_t c, locale_t) {
     86   return iswcntrl(c);
     87 }
     88 
     89 static inline int iswdigit_l(wint_t c, locale_t) {
     90   return iswdigit(c);
     91 }
     92 
     93 static inline int iswgraph_l(wint_t c, locale_t) {
     94   return iswgraph(c);
     95 }
     96 
     97 static inline int iswlower_l(wint_t c, locale_t) {
     98   return iswlower(c);
     99 }
    100 
    101 static inline int iswprint_l(wint_t c, locale_t) {
    102   return iswprint(c);
    103 }
    104 
    105 static inline int iswpunct_l(wint_t c, locale_t) {
    106   return iswpunct(c);
    107 }
    108 
    109 static inline int iswspace_l(wint_t c, locale_t) {
    110   return iswspace(c);
    111 }
    112 
    113 static inline int iswupper_l(wint_t c, locale_t) {
    114   return iswupper(c);
    115 }
    116 
    117 static inline int iswxdigit_l(wint_t c, locale_t) {
    118   return iswxdigit(c);
    119 }
    120 
    121 static inline int toupper_l(int c, locale_t) {
    122   return toupper(c);
    123 }
    124 
    125 static inline int tolower_l(int c, locale_t) {
    126   return tolower(c);
    127 }
    128 
    129 static inline int towupper_l(int c, locale_t) {
    130   return towupper(c);
    131 }
    132 
    133 static inline int towlower_l(int c, locale_t) {
    134   return towlower(c);
    135 }
    136 
    137 static inline int strcoll_l(const char *s1, const char *s2, locale_t) {
    138   return strcoll(s1, s2);
    139 }
    140 
    141 static inline size_t strxfrm_l(char *dest, const char *src, size_t n,
    142                                locale_t) {
    143   return strxfrm(dest, src, n);
    144 }
    145 
    146 static inline size_t strftime_l(char *s, size_t max, const char *format,
    147                                 const struct tm *tm, locale_t) {
    148   return strftime(s, max, format, tm);
    149 }
    150 
    151 static inline int wcscoll_l(const wchar_t *ws1, const wchar_t *ws2, locale_t) {
    152   return wcscoll(ws1, ws2);
    153 }
    154 
    155 static inline size_t wcsxfrm_l(wchar_t *dest, const wchar_t *src, size_t n,
    156                                locale_t) {
    157   return wcsxfrm(dest, src, n);
    158 }
    159 
    160 static inline long double strtold_l(const char *nptr, char **endptr, locale_t) {
    161   return strtold(nptr, endptr);
    162 }
    163 
    164 static inline long long strtoll_l(const char *nptr, char **endptr, int base,
    165                                   locale_t) {
    166   return strtoll(nptr, endptr, base);
    167 }
    168 
    169 static inline unsigned long long strtoull_l(const char *nptr, char **endptr,
    170                                             int base, locale_t) {
    171   return strtoull(nptr, endptr, base);
    172 }
    173 
    174 static inline long long wcstoll_l(const wchar_t *nptr, wchar_t **endptr,
    175                                   int base, locale_t) {
    176   return wcstoll(nptr, endptr, base);
    177 }
    178 
    179 static inline unsigned long long wcstoull_l(const wchar_t *nptr,
    180                                             wchar_t **endptr, int base,
    181                                             locale_t) {
    182   return wcstoull(nptr, endptr, base);
    183 }
    184 
    185 static inline long double wcstold_l(const wchar_t *nptr, wchar_t **endptr,
    186                                     locale_t) {
    187   return wcstold(nptr, endptr);
    188 }
    189 
    190 #ifdef __cplusplus
    191 }
    192 #endif
    193 
    194 #endif // _LIBCPP_SUPPORT_XLOCALE_XLOCALE_H
    195