From e82ce3c06eee6e2b3e68c3dbbcfdfe2a63463de7 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Thu, 7 Apr 2022 07:25:37 -0400 Subject: [PATCH] fd: pwrite returns ssize_t not int A subtle distinction, and not one that is particularly relevant to bees, but it does make toolchains complain. Signed-off-by: Zygo Blaxell --- lib/fd.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/fd.cc b/lib/fd.cc index 2f62567..e6d0430 100644 --- a/lib/fd.cc +++ b/lib/fd.cc @@ -361,7 +361,10 @@ namespace crucible { THROW_ERROR(invalid_argument, "pwrite: trying to write on a closed file descriptor"); } int rv = ::pwrite(fd, buf, size, offset); - if (rv != static_cast(size)) { + if (rv < 0) { + THROW_ERRNO("pwrite: could not write " << size << " bytes at fd " << name_fd(fd) << " offset " << offset); + } + if (rv != static_cast(size)) { THROW_ERROR(runtime_error, "pwrite: only " << rv << " of " << size << " bytes written at fd " << name_fd(fd) << " offset " << offset); } } @@ -392,7 +395,7 @@ namespace crucible { } THROW_ERRNO("read: " << size << " bytes"); } - if (rv > static_cast(size)) { + if (rv > static_cast(size)) { THROW_ERROR(runtime_error, "read: somehow read more bytes (" << rv << ") than requested (" << size << ")"); } if (rv == 0) break; @@ -441,7 +444,7 @@ namespace crucible { } THROW_ERRNO("pread: " << size << " bytes"); } - if (rv != static_cast(size)) { + if (rv != static_cast(size)) { THROW_ERROR(runtime_error, "pread: " << size << " bytes at fd " << name_fd(fd) << " offset " << offset << " returned " << rv); } break;