|
30 | 30 | #include <__config>
|
31 | 31 | #include <__cstddef/size_t.h>
|
32 | 32 | #include <__std_mbstate_t.h>
|
33 |
| -#include <cstdarg> |
| 33 | +#include <__utility/forward.h> |
34 | 34 |
|
35 | 35 | #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
36 | 36 | # pragma GCC system_header
|
@@ -82,31 +82,32 @@ __libcpp_mbsrtowcs_l(wchar_t* __dest, const char** __src, size_t __len, mbstate_
|
82 | 82 | }
|
83 | 83 | #endif
|
84 | 84 |
|
85 |
| -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_ATTRIBUTE_FORMAT(__printf__, 4, 5) int __libcpp_snprintf_l( |
86 |
| - char* __s, size_t __n, locale_t __loc, const char* __format, ...) { |
87 |
| - va_list __va; |
88 |
| - va_start(__va, __format); |
89 |
| - int __res = ::vsnprintf_l(__s, __n, __loc, __format, __va); |
90 |
| - va_end(__va); |
91 |
| - return __res; |
| 85 | +template <class... _Args> |
| 86 | +_LIBCPP_HIDE_FROM_ABI int |
| 87 | +__libcpp_snprintf_l(char* __s, size_t __n, locale_t __loc, const char* __format, _Args&&... __args) { |
| 88 | + _LIBCPP_DIAGNOSTIC_PUSH |
| 89 | + _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wformat-nonliteral") |
| 90 | + _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wformat-nonliteral") |
| 91 | + return ::snprintf_l(__s, __n, __loc, __format, std::forward<_Args>(__args)...); |
| 92 | + _LIBCPP_DIAGNOSTIC_POP |
92 | 93 | }
|
93 | 94 |
|
94 |
| -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_ATTRIBUTE_FORMAT(__printf__, 3, 4) int __libcpp_asprintf_l( |
95 |
| - char** __s, locale_t __loc, const char* __format, ...) { |
96 |
| - va_list __va; |
97 |
| - va_start(__va, __format); |
98 |
| - int __res = ::vasprintf_l(__s, __loc, __format, __va); |
99 |
| - va_end(__va); |
100 |
| - return __res; |
| 95 | +template <class... _Args> |
| 96 | +_LIBCPP_HIDE_FROM_ABI int __libcpp_asprintf_l(char** __s, locale_t __loc, const char* __format, _Args&&... __args) { |
| 97 | + _LIBCPP_DIAGNOSTIC_PUSH |
| 98 | + _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wformat-nonliteral") |
| 99 | + _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wformat-nonliteral") |
| 100 | + return ::asprintf_l(__s, __loc, __format, std::forward<_Args>(__args)...); |
| 101 | + _LIBCPP_DIAGNOSTIC_POP |
101 | 102 | }
|
102 | 103 |
|
103 |
| -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_ATTRIBUTE_FORMAT(__scanf__, 3, 4) int __libcpp_sscanf_l( |
104 |
| - const char* __s, locale_t __loc, const char* __format, ...) { |
105 |
| - va_list __va; |
106 |
| - va_start(__va, __format); |
107 |
| - int __res = ::vsscanf_l(__s, __loc, __format, __va); |
108 |
| - va_end(__va); |
109 |
| - return __res; |
| 104 | +template <class... _Args> |
| 105 | +_LIBCPP_HIDE_FROM_ABI int __libcpp_sscanf_l(const char* __s, locale_t __loc, const char* __format, _Args&&... __args) { |
| 106 | + _LIBCPP_DIAGNOSTIC_PUSH |
| 107 | + _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wformat-nonliteral") |
| 108 | + _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wformat-nonliteral") |
| 109 | + return ::sscanf_l(__s, __loc, __format, std::forward<_Args>(__args)...); |
| 110 | + _LIBCPP_DIAGNOSTIC_POP |
110 | 111 | }
|
111 | 112 |
|
112 | 113 | _LIBCPP_END_NAMESPACE_STD
|
|
0 commit comments