1// -*- C++ -*- 2//===---------------------- __bsd_locale_fallbacks.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// The BSDs have lots of *_l functions. This file provides reimplementations 10// of those functions for non-BSD platforms. 11//===----------------------------------------------------------------------===// 12 13#ifndef _LIBCPP_BSD_LOCALE_FALLBACKS_DEFAULTS_H 14#define _LIBCPP_BSD_LOCALE_FALLBACKS_DEFAULTS_H 15 16#include <stdlib.h> 17#include <stdarg.h> 18#include <memory> 19 20#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 21#pragma GCC system_header 22#endif 23 24_LIBCPP_BEGIN_NAMESPACE_STD 25 26inline _LIBCPP_INLINE_VISIBILITY 27decltype(MB_CUR_MAX) __libcpp_mb_cur_max_l(locale_t __l) 28{ 29 __libcpp_locale_guard __current(__l); 30 return MB_CUR_MAX; 31} 32 33inline _LIBCPP_INLINE_VISIBILITY 34wint_t __libcpp_btowc_l(int __c, locale_t __l) 35{ 36 __libcpp_locale_guard __current(__l); 37 return btowc(__c); 38} 39 40inline _LIBCPP_INLINE_VISIBILITY 41int __libcpp_wctob_l(wint_t __c, locale_t __l) 42{ 43 __libcpp_locale_guard __current(__l); 44 return wctob(__c); 45} 46 47inline _LIBCPP_INLINE_VISIBILITY 48size_t __libcpp_wcsnrtombs_l(char *__dest, const wchar_t **__src, size_t __nwc, 49 size_t __len, mbstate_t *__ps, locale_t __l) 50{ 51 __libcpp_locale_guard __current(__l); 52 return wcsnrtombs(__dest, __src, __nwc, __len, __ps); 53} 54 55inline _LIBCPP_INLINE_VISIBILITY 56size_t __libcpp_wcrtomb_l(char *__s, wchar_t __wc, mbstate_t *__ps, locale_t __l) 57{ 58 __libcpp_locale_guard __current(__l); 59 return wcrtomb(__s, __wc, __ps); 60} 61 62inline _LIBCPP_INLINE_VISIBILITY 63size_t __libcpp_mbsnrtowcs_l(wchar_t * __dest, const char **__src, size_t __nms, 64 size_t __len, mbstate_t *__ps, locale_t __l) 65{ 66 __libcpp_locale_guard __current(__l); 67 return mbsnrtowcs(__dest, __src, __nms, __len, __ps); 68} 69 70inline _LIBCPP_INLINE_VISIBILITY 71size_t __libcpp_mbrtowc_l(wchar_t *__pwc, const char *__s, size_t __n, 72 mbstate_t *__ps, locale_t __l) 73{ 74 __libcpp_locale_guard __current(__l); 75 return mbrtowc(__pwc, __s, __n, __ps); 76} 77 78inline _LIBCPP_INLINE_VISIBILITY 79int __libcpp_mbtowc_l(wchar_t *__pwc, const char *__pmb, size_t __max, locale_t __l) 80{ 81 __libcpp_locale_guard __current(__l); 82 return mbtowc(__pwc, __pmb, __max); 83} 84 85inline _LIBCPP_INLINE_VISIBILITY 86size_t __libcpp_mbrlen_l(const char *__s, size_t __n, mbstate_t *__ps, locale_t __l) 87{ 88 __libcpp_locale_guard __current(__l); 89 return mbrlen(__s, __n, __ps); 90} 91 92inline _LIBCPP_INLINE_VISIBILITY 93lconv *__libcpp_localeconv_l(locale_t __l) 94{ 95 __libcpp_locale_guard __current(__l); 96 return localeconv(); 97} 98 99inline _LIBCPP_INLINE_VISIBILITY 100size_t __libcpp_mbsrtowcs_l(wchar_t *__dest, const char **__src, size_t __len, 101 mbstate_t *__ps, locale_t __l) 102{ 103 __libcpp_locale_guard __current(__l); 104 return mbsrtowcs(__dest, __src, __len, __ps); 105} 106 107inline 108int __libcpp_snprintf_l(char *__s, size_t __n, locale_t __l, const char *__format, ...) { 109 va_list __va; 110 va_start(__va, __format); 111 __libcpp_locale_guard __current(__l); 112 int __res = vsnprintf(__s, __n, __format, __va); 113 va_end(__va); 114 return __res; 115} 116 117inline 118int __libcpp_asprintf_l(char **__s, locale_t __l, const char *__format, ...) { 119 va_list __va; 120 va_start(__va, __format); 121 __libcpp_locale_guard __current(__l); 122 int __res = vasprintf(__s, __format, __va); 123 va_end(__va); 124 return __res; 125} 126 127inline 128int __libcpp_sscanf_l(const char *__s, locale_t __l, const char *__format, ...) { 129 va_list __va; 130 va_start(__va, __format); 131 __libcpp_locale_guard __current(__l); 132 int __res = vsscanf(__s, __format, __va); 133 va_end(__va); 134 return __res; 135} 136 137_LIBCPP_END_NAMESPACE_STD 138 139#endif // _LIBCPP_BSD_LOCALE_FALLBACKS_DEFAULTS_H 140