| Index: util/file/fd_io.cc
|
| diff --git a/util/file/fd_io.cc b/util/file/fd_io.cc
|
| index 942588002020cd1e7b43af45a015d9c4e8fd065e..46a3634fc7cda80e08ca6a83ec104170d6936b15 100644
|
| --- a/util/file/fd_io.cc
|
| +++ b/util/file/fd_io.cc
|
| @@ -16,6 +16,8 @@
|
|
|
| #include <unistd.h>
|
|
|
| +#include "base/logging.h"
|
| +#include "base/numerics/safe_conversions.h"
|
| #include "base/posix/eintr_wrapper.h"
|
|
|
| namespace {
|
| @@ -72,4 +74,34 @@ ssize_t WriteFD(int fd, const void* buffer, size_t size) {
|
| return ReadOrWrite<WriteTraits>(fd, buffer, size);
|
| }
|
|
|
| +void CheckedReadFD(int fd, void* buffer, size_t size) {
|
| + ssize_t expect = base::checked_cast<ssize_t>(size);
|
| + ssize_t rv = ReadFD(fd, buffer, size);
|
| + if (rv < 0) {
|
| + PCHECK(rv == expect) << "read";
|
| + } else {
|
| + CHECK_EQ(rv, expect) << "read";
|
| + }
|
| +}
|
| +
|
| +void CheckedWriteFD(int fd, const void* buffer, size_t size) {
|
| + ssize_t expect = base::checked_cast<ssize_t>(size);
|
| + ssize_t rv = WriteFD(fd, buffer, size);
|
| + if (rv < 0) {
|
| + PCHECK(rv == expect) << "write";
|
| + } else {
|
| + CHECK_EQ(rv, expect) << "write";
|
| + }
|
| +}
|
| +
|
| +void CheckedReadFDAtEOF(int fd) {
|
| + char c;
|
| + ssize_t rv = ReadFD(fd, &c, 1);
|
| + if (rv < 0) {
|
| + PCHECK(rv == 0) << "read";
|
| + } else {
|
| + CHECK_EQ(rv, 0) << "read";
|
| + }
|
| +}
|
| +
|
| } // namespace crashpad
|
|
|