Protect against locking formatters

This commit is contained in:
Victor Zverovich
2024-03-02 17:23:02 -08:00
parent 4fcc317dc9
commit 3bc6cc1e63
3 changed files with 69 additions and 9 deletions
+6 -4
View File
@@ -1677,15 +1677,17 @@ FMT_FUNC void print(std::FILE* f, string_view text) {
} // namespace detail
FMT_FUNC void vprint(std::FILE* f, string_view fmt, format_args args) {
if (detail::file_ref(f).is_buffered()) {
auto&& buffer = detail::file_print_buffer(f);
return detail::vformat_to(buffer, fmt, args);
}
auto buffer = memory_buffer();
detail::vformat_to(buffer, fmt, args);
detail::print(f, {buffer.data(), buffer.size()});
}
FMT_FUNC void vprint_locked(std::FILE* f, string_view fmt, format_args args) {
if (!detail::file_ref(f).is_buffered()) return vprint(f, fmt, args);
auto&& buffer = detail::file_print_buffer(f);
return detail::vformat_to(buffer, fmt, args);
}
FMT_FUNC void vprintln(std::FILE* f, string_view fmt, format_args args) {
auto buffer = memory_buffer();
detail::vformat_to(buffer, fmt, args);