diff options
Diffstat (limited to 'src/posix_extras.cc')
-rw-r--r-- | src/posix_extras.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/posix_extras.cc b/src/posix_extras.cc index ac6e3b2..7b82f0a 100644 --- a/src/posix_extras.cc +++ b/src/posix_extras.cc @@ -141,6 +141,21 @@ void File::UTimeNs(const char* const path, const timespec& access, } } +size_t File::Write(const off_t offset, + const std::vector<std::uint8_t>& to_write) { + size_t bytes_written = 0; + while (bytes_written < to_write.size()) { + const ssize_t pwrite_result = pwrite( + fd_, to_write.data() + bytes_written, to_write.size() - bytes_written, + offset + static_cast<off_t>(bytes_written)); + if (pwrite_result == -1) { + throw SystemError(); + } + bytes_written += static_cast<size_t>(pwrite_result); + } + return bytes_written; +} + int File::Duplicate() const { int result; if ((result = dup(fd_)) == -1) { |