James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame^] | 1 | From e685209746aabbbed0a9db54694b8ea1ca504163 Mon Sep 17 00:00:00 2001 |
| 2 | From: Tyler Veness <calcmogul@gmail.com> |
| 3 | Date: Wed, 18 May 2022 10:21:49 -0700 |
| 4 | Subject: [PATCH 1/2] Don't throw on write failure |
| 5 | |
| 6 | --- |
| 7 | include/fmt/format-inl.h | 4 +--- |
| 8 | include/fmt/xchar.h | 3 +-- |
| 9 | src/os.cc | 3 +-- |
| 10 | 3 files changed, 3 insertions(+), 7 deletions(-) |
| 11 | |
| 12 | diff --git a/include/fmt/format-inl.h b/include/fmt/format-inl.h |
| 13 | index 22b1ec8..abe4ff1 100644 |
| 14 | --- a/include/fmt/format-inl.h |
| 15 | +++ b/include/fmt/format-inl.h |
| 16 | @@ -79,9 +79,7 @@ FMT_FUNC void report_error(format_func func, int error_code, |
| 17 | // A wrapper around fwrite that throws on error. |
| 18 | inline void fwrite_fully(const void* ptr, size_t size, size_t count, |
| 19 | FILE* stream) { |
| 20 | - size_t written = std::fwrite(ptr, size, count, stream); |
| 21 | - if (written < count) |
| 22 | - FMT_THROW(system_error(errno, FMT_STRING("cannot write to file"))); |
| 23 | + std::fwrite(ptr, size, count, stream); |
| 24 | } |
| 25 | |
| 26 | #ifndef FMT_STATIC_THOUSANDS_SEPARATOR |
| 27 | diff --git a/include/fmt/xchar.h b/include/fmt/xchar.h |
| 28 | index 3b5bc15..fc3c67f 100644 |
| 29 | --- a/include/fmt/xchar.h |
| 30 | +++ b/include/fmt/xchar.h |
| 31 | @@ -200,8 +200,7 @@ inline void vprint(std::FILE* f, wstring_view fmt, wformat_args args) { |
| 32 | wmemory_buffer buffer; |
| 33 | detail::vformat_to(buffer, fmt, args); |
| 34 | buffer.push_back(L'\0'); |
| 35 | - if (std::fputws(buffer.data(), f) == -1) |
| 36 | - FMT_THROW(system_error(errno, FMT_STRING("cannot write to file"))); |
| 37 | + std::fputws(buffer.data(), f); |
| 38 | } |
| 39 | |
| 40 | inline void vprint(wstring_view fmt, wformat_args args) { |
| 41 | diff --git a/src/os.cc b/src/os.cc |
| 42 | index f388ead..2c49951 100644 |
| 43 | --- a/src/os.cc |
| 44 | +++ b/src/os.cc |
| 45 | @@ -277,8 +277,7 @@ std::size_t file::read(void* buffer, std::size_t count) { |
| 46 | std::size_t file::write(const void* buffer, std::size_t count) { |
| 47 | rwresult result = 0; |
| 48 | FMT_RETRY(result, FMT_POSIX_CALL(write(fd_, buffer, convert_rwcount(count)))); |
| 49 | - if (result < 0) FMT_THROW(system_error(errno, "cannot write to file")); |
| 50 | - return detail::to_unsigned(result); |
| 51 | + return count; |
| 52 | } |
| 53 | |
| 54 | file file::dup(int fd) { |