Skip to content

Commit

Permalink
[wpiutil] Modify fmt to not throw on write failure
Browse files Browse the repository at this point in the history
  • Loading branch information
calcmogul committed Jan 14, 2022
1 parent e78cd49 commit 6435f31
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 6 deletions.
40 changes: 40 additions & 0 deletions upstream_utils/fmt-dont-throw-on-write-failure.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
diff --git a/wpiutil/src/main/native/fmtlib/include/fmt/format-inl.h b/wpiutil/src/main/native/fmtlib/include/fmt/format-inl.h
index 2c51c50ae..cc89abdd3 100644
--- a/wpiutil/src/main/native/fmtlib/include/fmt/format-inl.h
+++ b/wpiutil/src/main/native/fmtlib/include/fmt/format-inl.h
@@ -92,8 +92,7 @@ FMT_FUNC void report_error(format_func func, int error_code,
// A wrapper around fwrite that throws on error.
inline void fwrite_fully(const void* ptr, size_t size, size_t count,
FILE* stream) {
- size_t written = std::fwrite(ptr, size, count, stream);
- if (written < count) FMT_THROW(system_error(errno, "cannot write to file"));
+ std::fwrite(ptr, size, count, stream);
}

#ifndef FMT_STATIC_THOUSANDS_SEPARATOR
diff --git a/wpiutil/src/main/native/fmtlib/include/fmt/xchar.h b/wpiutil/src/main/native/fmtlib/include/fmt/xchar.h
index 55825077f..9acb893fa 100644
--- a/wpiutil/src/main/native/fmtlib/include/fmt/xchar.h
+++ b/wpiutil/src/main/native/fmtlib/include/fmt/xchar.h
@@ -207,8 +207,7 @@ inline void vprint(std::FILE* f, wstring_view fmt, wformat_args args) {
wmemory_buffer buffer;
detail::vformat_to(buffer, fmt, args);
buffer.push_back(L'\0');
- if (std::fputws(buffer.data(), f) == -1)
- FMT_THROW(system_error(errno, FMT_STRING("cannot write to file")));
+ std::fputws(buffer.data(), f);
}

inline void vprint(wstring_view fmt, wformat_args args) {
diff --git a/wpiutil/src/main/native/fmtlib/src/os.cpp b/wpiutil/src/main/native/fmtlib/src/os.cpp
index 04b4dc506..e65b40fa5 100644
--- a/wpiutil/src/main/native/fmtlib/src/os.cpp
+++ b/wpiutil/src/main/native/fmtlib/src/os.cpp
@@ -277,7 +277,6 @@ std::size_t file::read(void* buffer, std::size_t count) {
std::size_t file::write(const void* buffer, std::size_t count) {
rwresult result = 0;
FMT_RETRY(result, FMT_POSIX_CALL(write(fd_, buffer, convert_rwcount(count))));
- if (result < 0) FMT_THROW(system_error(errno, "cannot write to file"));
return detail::to_unsigned(result);
}

5 changes: 4 additions & 1 deletion upstream_utils/update_fmt.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import os
import shutil

from upstream_utils import setup_upstream_repo, comment_out_invalid_includes, walk_cwd_and_copy_if
from upstream_utils import setup_upstream_repo, comment_out_invalid_includes, walk_cwd_and_copy_if, apply_patches


def main():
Expand Down Expand Up @@ -31,6 +31,9 @@ def main():
comment_out_invalid_includes(
f, [os.path.join(wpiutil, "src/main/native/fmtlib/include")])

apply_patches(root,
["upstream_utils/fmt-dont-throw-on-write-failure.patch"])


if __name__ == "__main__":
main()
3 changes: 1 addition & 2 deletions wpiutil/src/main/native/fmtlib/include/fmt/format-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,7 @@ FMT_FUNC void report_error(format_func func, int error_code,
// A wrapper around fwrite that throws on error.
inline void fwrite_fully(const void* ptr, size_t size, size_t count,
FILE* stream) {
size_t written = std::fwrite(ptr, size, count, stream);
if (written < count) FMT_THROW(system_error(errno, "cannot write to file"));
std::fwrite(ptr, size, count, stream);
}

#ifndef FMT_STATIC_THOUSANDS_SEPARATOR
Expand Down
3 changes: 1 addition & 2 deletions wpiutil/src/main/native/fmtlib/include/fmt/xchar.h
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,7 @@ inline void vprint(std::FILE* f, wstring_view fmt, wformat_args args) {
wmemory_buffer buffer;
detail::vformat_to(buffer, fmt, args);
buffer.push_back(L'\0');
if (std::fputws(buffer.data(), f) == -1)
FMT_THROW(system_error(errno, FMT_STRING("cannot write to file")));
std::fputws(buffer.data(), f);
}

inline void vprint(wstring_view fmt, wformat_args args) {
Expand Down
1 change: 0 additions & 1 deletion wpiutil/src/main/native/fmtlib/src/os.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,6 @@ std::size_t file::read(void* buffer, std::size_t count) {
std::size_t file::write(const void* buffer, std::size_t count) {
rwresult result = 0;
FMT_RETRY(result, FMT_POSIX_CALL(write(fd_, buffer, convert_rwcount(count))));
if (result < 0) FMT_THROW(system_error(errno, "cannot write to file"));
return detail::to_unsigned(result);
}

Expand Down

0 comments on commit 6435f31

Please sign in to comment.