James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 1 | From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 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 +-- |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 9 | src/os.cc | 4 +--- |
| 10 | 3 files changed, 3 insertions(+), 8 deletions(-) |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 11 | |
| 12 | diff --git a/include/fmt/format-inl.h b/include/fmt/format-inl.h |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 13 | index dac2d437a41ab7b0b4e72895212b5a972ada73a9..af6ba74d618f29c77339e8a82906cccd26a2efa4 100644 |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 14 | --- a/include/fmt/format-inl.h |
| 15 | +++ b/include/fmt/format-inl.h |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 16 | @@ -75,9 +75,7 @@ FMT_FUNC void report_error(format_func func, int error_code, |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 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 |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 28 | index 625ec36922e9bcc44a76b3c40792cb08ede63813..0f79c1720a4c855bb7088381e93af08eae56d66c 100644 |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 29 | --- a/include/fmt/xchar.h |
| 30 | +++ b/include/fmt/xchar.h |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 31 | @@ -220,8 +220,7 @@ inline void vprint(std::FILE* f, wstring_view fmt, wformat_args args) { |
| 32 | auto buf = wmemory_buffer(); |
| 33 | detail::vformat_to(buf, fmt, args); |
| 34 | buf.push_back(L'\0'); |
| 35 | - if (std::fputws(buf.data(), f) == -1) |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 36 | - FMT_THROW(system_error(errno, FMT_STRING("cannot write to file"))); |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 37 | + std::fputws(buf.data(), f); |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 38 | } |
| 39 | |
| 40 | inline void vprint(wstring_view fmt, wformat_args args) { |
| 41 | diff --git a/src/os.cc b/src/os.cc |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 42 | index bca410e945e0347d349e06179906a43b38b56a5c..d7ded50f9870a885d1ce1835fecc4f740858127a 100644 |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 43 | --- a/src/os.cc |
| 44 | +++ b/src/os.cc |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 45 | @@ -258,9 +258,7 @@ long long file::size() const { |
| 46 | std::size_t file::read(void* buffer, std::size_t count) { |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 47 | rwresult result = 0; |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 48 | FMT_RETRY(result, FMT_POSIX_CALL(read(fd_, buffer, convert_rwcount(count)))); |
| 49 | - if (result < 0) |
| 50 | - FMT_THROW(system_error(errno, FMT_STRING("cannot read from file"))); |
James Kuszmaul | cf32412 | 2023-01-14 14:07:17 -0800 | [diff] [blame] | 51 | - return detail::to_unsigned(result); |
| 52 | + return count; |
| 53 | } |
| 54 | |
James Kuszmaul | b13e13f | 2023-11-22 20:44:04 -0800 | [diff] [blame^] | 55 | std::size_t file::write(const void* buffer, std::size_t count) { |