1// -*- C++ -*-
2//===--------------- support/xlocale/__posix_l_fallback.h -----------------===//
3//
4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9// These are reimplementations of some extended locale functions ( *_l ) that
10// are normally part of POSIX.  This shared implementation provides parts of the
11// extended locale support for libc's that normally don't have any (like
12// Android's bionic and Newlib).
13//===----------------------------------------------------------------------===//
14
15#ifndef _LIBCPP_SUPPORT_XLOCALE_POSIX_L_FALLBACK_H
16#define _LIBCPP_SUPPORT_XLOCALE_POSIX_L_FALLBACK_H
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22inline _LIBCPP_INLINE_VISIBILITY int isalnum_l(int c, locale_t) {
23  return ::isalnum(c);
24}
25
26inline _LIBCPP_INLINE_VISIBILITY int isalpha_l(int c, locale_t) {
27  return ::isalpha(c);
28}
29
30inline _LIBCPP_INLINE_VISIBILITY int isblank_l(int c, locale_t) {
31  return ::isblank(c);
32}
33
34inline _LIBCPP_INLINE_VISIBILITY int iscntrl_l(int c, locale_t) {
35  return ::iscntrl(c);
36}
37
38inline _LIBCPP_INLINE_VISIBILITY int isdigit_l(int c, locale_t) {
39  return ::isdigit(c);
40}
41
42inline _LIBCPP_INLINE_VISIBILITY int isgraph_l(int c, locale_t) {
43  return ::isgraph(c);
44}
45
46inline _LIBCPP_INLINE_VISIBILITY int islower_l(int c, locale_t) {
47  return ::islower(c);
48}
49
50inline _LIBCPP_INLINE_VISIBILITY int isprint_l(int c, locale_t) {
51  return ::isprint(c);
52}
53
54inline _LIBCPP_INLINE_VISIBILITY int ispunct_l(int c, locale_t) {
55  return ::ispunct(c);
56}
57
58inline _LIBCPP_INLINE_VISIBILITY int isspace_l(int c, locale_t) {
59  return ::isspace(c);
60}
61
62inline _LIBCPP_INLINE_VISIBILITY int isupper_l(int c, locale_t) {
63  return ::isupper(c);
64}
65
66inline _LIBCPP_INLINE_VISIBILITY int isxdigit_l(int c, locale_t) {
67  return ::isxdigit(c);
68}
69
70inline _LIBCPP_INLINE_VISIBILITY int iswalnum_l(wint_t c, locale_t) {
71  return ::iswalnum(c);
72}
73
74inline _LIBCPP_INLINE_VISIBILITY int iswalpha_l(wint_t c, locale_t) {
75  return ::iswalpha(c);
76}
77
78inline _LIBCPP_INLINE_VISIBILITY int iswblank_l(wint_t c, locale_t) {
79  return ::iswblank(c);
80}
81
82inline _LIBCPP_INLINE_VISIBILITY int iswcntrl_l(wint_t c, locale_t) {
83  return ::iswcntrl(c);
84}
85
86inline _LIBCPP_INLINE_VISIBILITY int iswdigit_l(wint_t c, locale_t) {
87  return ::iswdigit(c);
88}
89
90inline _LIBCPP_INLINE_VISIBILITY int iswgraph_l(wint_t c, locale_t) {
91  return ::iswgraph(c);
92}
93
94inline _LIBCPP_INLINE_VISIBILITY int iswlower_l(wint_t c, locale_t) {
95  return ::iswlower(c);
96}
97
98inline _LIBCPP_INLINE_VISIBILITY int iswprint_l(wint_t c, locale_t) {
99  return ::iswprint(c);
100}
101
102inline _LIBCPP_INLINE_VISIBILITY int iswpunct_l(wint_t c, locale_t) {
103  return ::iswpunct(c);
104}
105
106inline _LIBCPP_INLINE_VISIBILITY int iswspace_l(wint_t c, locale_t) {
107  return ::iswspace(c);
108}
109
110inline _LIBCPP_INLINE_VISIBILITY int iswupper_l(wint_t c, locale_t) {
111  return ::iswupper(c);
112}
113
114inline _LIBCPP_INLINE_VISIBILITY int iswxdigit_l(wint_t c, locale_t) {
115  return ::iswxdigit(c);
116}
117
118inline _LIBCPP_INLINE_VISIBILITY int toupper_l(int c, locale_t) {
119  return ::toupper(c);
120}
121
122inline _LIBCPP_INLINE_VISIBILITY int tolower_l(int c, locale_t) {
123  return ::tolower(c);
124}
125
126inline _LIBCPP_INLINE_VISIBILITY wint_t towupper_l(wint_t c, locale_t) {
127  return ::towupper(c);
128}
129
130inline _LIBCPP_INLINE_VISIBILITY wint_t towlower_l(wint_t c, locale_t) {
131  return ::towlower(c);
132}
133
134inline _LIBCPP_INLINE_VISIBILITY int strcoll_l(const char *s1, const char *s2,
135                                               locale_t) {
136  return ::strcoll(s1, s2);
137}
138
139inline _LIBCPP_INLINE_VISIBILITY size_t strxfrm_l(char *dest, const char *src,
140                                                  size_t n, locale_t) {
141  return ::strxfrm(dest, src, n);
142}
143
144inline _LIBCPP_INLINE_VISIBILITY size_t strftime_l(char *s, size_t max,
145                                                   const char *format,
146                                                   const struct tm *tm, locale_t) {
147  return ::strftime(s, max, format, tm);
148}
149
150inline _LIBCPP_INLINE_VISIBILITY int wcscoll_l(const wchar_t *ws1,
151                                               const wchar_t *ws2, locale_t) {
152  return ::wcscoll(ws1, ws2);
153}
154
155inline _LIBCPP_INLINE_VISIBILITY size_t wcsxfrm_l(wchar_t *dest, const wchar_t *src,
156                                                  size_t n, locale_t) {
157  return ::wcsxfrm(dest, src, n);
158}
159
160#ifdef __cplusplus
161}
162#endif
163
164#endif // _LIBCPP_SUPPORT_XLOCALE_POSIX_L_FALLBACK_H
165