| // -*- C++ -*- |
| //===------------------- support/xlocale/xlocale.h ------------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is dual licensed under the MIT and the University of Illinois Open |
| // Source Licenses. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // This is a shared implementation of a shim to provide extended locale support |
| // on top of libc's that don't support it (like Android's bionic, and Newlib). |
| // |
| // The 'illusion' only works when the specified locale is "C" or "POSIX", but |
| // that's about as good as we can do without implementing full xlocale support |
| // in the underlying libc. |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef _LIBCPP_SUPPORT_XLOCALE_XLOCALE_H |
| #define _LIBCPP_SUPPORT_XLOCALE_XLOCALE_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| static inline int isalnum_l(int c, locale_t) { |
| return isalnum(c); |
| } |
| |
| static inline int isalpha_l(int c, locale_t) { |
| return isalpha(c); |
| } |
| |
| static inline int isblank_l(int c, locale_t) { |
| return isblank(c); |
| } |
| |
| static inline int iscntrl_l(int c, locale_t) { |
| return iscntrl(c); |
| } |
| |
| static inline int isdigit_l(int c, locale_t) { |
| return isdigit(c); |
| } |
| |
| static inline int isgraph_l(int c, locale_t) { |
| return isgraph(c); |
| } |
| |
| static inline int islower_l(int c, locale_t) { |
| return islower(c); |
| } |
| |
| static inline int isprint_l(int c, locale_t) { |
| return isprint(c); |
| } |
| |
| static inline int ispunct_l(int c, locale_t) { |
| return ispunct(c); |
| } |
| |
| static inline int isspace_l(int c, locale_t) { |
| return isspace(c); |
| } |
| |
| static inline int isupper_l(int c, locale_t) { |
| return isupper(c); |
| } |
| |
| static inline int isxdigit_l(int c, locale_t) { |
| return isxdigit(c); |
| } |
| |
| static inline int iswalnum_l(wint_t c, locale_t) { |
| return iswalnum(c); |
| } |
| |
| static inline int iswalpha_l(wint_t c, locale_t) { |
| return iswalpha(c); |
| } |
| |
| static inline int iswblank_l(wint_t c, locale_t) { |
| return iswblank(c); |
| } |
| |
| static inline int iswcntrl_l(wint_t c, locale_t) { |
| return iswcntrl(c); |
| } |
| |
| static inline int iswdigit_l(wint_t c, locale_t) { |
| return iswdigit(c); |
| } |
| |
| static inline int iswgraph_l(wint_t c, locale_t) { |
| return iswgraph(c); |
| } |
| |
| static inline int iswlower_l(wint_t c, locale_t) { |
| return iswlower(c); |
| } |
| |
| static inline int iswprint_l(wint_t c, locale_t) { |
| return iswprint(c); |
| } |
| |
| static inline int iswpunct_l(wint_t c, locale_t) { |
| return iswpunct(c); |
| } |
| |
| static inline int iswspace_l(wint_t c, locale_t) { |
| return iswspace(c); |
| } |
| |
| static inline int iswupper_l(wint_t c, locale_t) { |
| return iswupper(c); |
| } |
| |
| static inline int iswxdigit_l(wint_t c, locale_t) { |
| return iswxdigit(c); |
| } |
| |
| static inline int toupper_l(int c, locale_t) { |
| return toupper(c); |
| } |
| |
| static inline int tolower_l(int c, locale_t) { |
| return tolower(c); |
| } |
| |
| static inline int towupper_l(int c, locale_t) { |
| return towupper(c); |
| } |
| |
| static inline int towlower_l(int c, locale_t) { |
| return towlower(c); |
| } |
| |
| static inline int strcoll_l(const char *s1, const char *s2, locale_t) { |
| return strcoll(s1, s2); |
| } |
| |
| static inline size_t strxfrm_l(char *dest, const char *src, size_t n, |
| locale_t) { |
| return strxfrm(dest, src, n); |
| } |
| |
| static inline size_t strftime_l(char *s, size_t max, const char *format, |
| const struct tm *tm, locale_t) { |
| return strftime(s, max, format, tm); |
| } |
| |
| static inline int wcscoll_l(const wchar_t *ws1, const wchar_t *ws2, locale_t) { |
| return wcscoll(ws1, ws2); |
| } |
| |
| static inline size_t wcsxfrm_l(wchar_t *dest, const wchar_t *src, size_t n, |
| locale_t) { |
| return wcsxfrm(dest, src, n); |
| } |
| |
| static inline long double strtold_l(const char *nptr, char **endptr, locale_t) { |
| return strtold(nptr, endptr); |
| } |
| |
| static inline long long strtoll_l(const char *nptr, char **endptr, int base, |
| locale_t) { |
| return strtoll(nptr, endptr, base); |
| } |
| |
| static inline unsigned long long strtoull_l(const char *nptr, char **endptr, |
| int base, locale_t) { |
| return strtoull(nptr, endptr, base); |
| } |
| |
| static inline long long wcstoll_l(const wchar_t *nptr, wchar_t **endptr, |
| int base, locale_t) { |
| return wcstoll(nptr, endptr, base); |
| } |
| |
| static inline unsigned long long wcstoull_l(const wchar_t *nptr, |
| wchar_t **endptr, int base, |
| locale_t) { |
| return wcstoull(nptr, endptr, base); |
| } |
| |
| static inline long double wcstold_l(const wchar_t *nptr, wchar_t **endptr, |
| locale_t) { |
| return wcstold(nptr, endptr); |
| } |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // _LIBCPP_SUPPORT_XLOCALE_XLOCALE_H |