Skip to content

Commit 0ffaeed

Browse files
committed
Use variadics instead of non-existent function on Windows
1 parent c51b48b commit 0ffaeed

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

libcxx/include/__locale_dir/locale_base_api/bsd_locale_defaults.h

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#include <__config>
3131
#include <__cstddef/size_t.h>
3232
#include <__std_mbstate_t.h>
33-
#include <cstdarg>
33+
#include <__utility/forward.h>
3434

3535
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
3636
# pragma GCC system_header
@@ -82,31 +82,32 @@ __libcpp_mbsrtowcs_l(wchar_t* __dest, const char** __src, size_t __len, mbstate_
8282
}
8383
#endif
8484

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
9293
}
9394

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
101102
}
102103

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
110111
}
111112

112113
_LIBCPP_END_NAMESPACE_STD

0 commit comments

Comments
 (0)