2 //===---------------------- __bsd_locale_fallbacks.h ----------------------===//
4 // The LLVM Compiler Infrastructure
6 // This file is dual licensed under the MIT and the University of Illinois Open
7 // Source Licenses. See LICENSE.TXT for details.
9 //===----------------------------------------------------------------------===//
10 // The BSDs have lots of *_l functions. This file provides reimplementations
11 // of those functions for non-BSD platforms.
12 //===----------------------------------------------------------------------===//
14 #ifndef _LIBCPP_BSD_LOCALE_FALLBACKS_DEFAULTS_H
15 #define _LIBCPP_BSD_LOCALE_FALLBACKS_DEFAULTS_H
20 _LIBCPP_BEGIN_NAMESPACE_STD
22 inline _LIBCPP_ALWAYS_INLINE
23 decltype(MB_CUR_MAX) __libcpp_mb_cur_max_l(locale_t __l)
25 __libcpp_locale_guard __current(__l);
29 inline _LIBCPP_ALWAYS_INLINE
30 wint_t __libcpp_btowc_l(int __c, locale_t __l)
32 __libcpp_locale_guard __current(__l);
36 inline _LIBCPP_ALWAYS_INLINE
37 int __libcpp_wctob_l(wint_t __c, locale_t __l)
39 __libcpp_locale_guard __current(__l);
43 inline _LIBCPP_ALWAYS_INLINE
44 size_t __libcpp_wcsnrtombs_l(char *__dest, const wchar_t **__src, size_t __nwc,
45 size_t __len, mbstate_t *__ps, locale_t __l)
47 __libcpp_locale_guard __current(__l);
48 return wcsnrtombs(__dest, __src, __nwc, __len, __ps);
51 inline _LIBCPP_ALWAYS_INLINE
52 size_t __libcpp_wcrtomb_l(char *__s, wchar_t __wc, mbstate_t *__ps, locale_t __l)
54 __libcpp_locale_guard __current(__l);
55 return wcrtomb(__s, __wc, __ps);
58 inline _LIBCPP_ALWAYS_INLINE
59 size_t __libcpp_mbsnrtowcs_l(wchar_t * __dest, const char **__src, size_t __nms,
60 size_t __len, mbstate_t *__ps, locale_t __l)
62 __libcpp_locale_guard __current(__l);
63 return mbsnrtowcs(__dest, __src, __nms, __len, __ps);
66 inline _LIBCPP_ALWAYS_INLINE
67 size_t __libcpp_mbrtowc_l(wchar_t *__pwc, const char *__s, size_t __n,
68 mbstate_t *__ps, locale_t __l)
70 __libcpp_locale_guard __current(__l);
71 return mbrtowc(__pwc, __s, __n, __ps);
74 inline _LIBCPP_ALWAYS_INLINE
75 int __libcpp_mbtowc_l(wchar_t *__pwc, const char *__pmb, size_t __max, locale_t __l)
77 __libcpp_locale_guard __current(__l);
78 return mbtowc(__pwc, __pmb, __max);
81 inline _LIBCPP_ALWAYS_INLINE
82 size_t __libcpp_mbrlen_l(const char *__s, size_t __n, mbstate_t *__ps, locale_t __l)
84 __libcpp_locale_guard __current(__l);
85 return mbrlen(__s, __n, __ps);
88 inline _LIBCPP_ALWAYS_INLINE
89 lconv *__libcpp_localeconv_l(locale_t __l)
91 __libcpp_locale_guard __current(__l);
95 inline _LIBCPP_ALWAYS_INLINE
96 size_t __libcpp_mbsrtowcs_l(wchar_t *__dest, const char **__src, size_t __len,
97 mbstate_t *__ps, locale_t __l)
99 __libcpp_locale_guard __current(__l);
100 return mbsrtowcs(__dest, __src, __len, __ps);
104 int __libcpp_snprintf_l(char *__s, size_t __n, locale_t __l, const char *__format, ...) {
106 va_start(__va, __format);
107 __libcpp_locale_guard __current(__l);
108 int __res = vsnprintf(__s, __n, __format, __va);
114 int __libcpp_asprintf_l(char **__s, locale_t __l, const char *__format, ...) {
116 va_start(__va, __format);
117 __libcpp_locale_guard __current(__l);
118 int __res = vasprintf(__s, __format, __va);
124 int __libcpp_sscanf_l(const char *__s, locale_t __l, const char *__format, ...) {
126 va_start(__va, __format);
127 __libcpp_locale_guard __current(__l);
128 int __res = vsscanf(__s, __format, __va);
133 _LIBCPP_END_NAMESPACE_STD
135 #endif // _LIBCPP_BSD_LOCALE_FALLBACKS_DEFAULTS_H