| 112 | ~PosixSequentialFile() override { close(fd_); } |
| 113 | |
| 114 | Status Read(size_t n, Slice* result, char* scratch) override { |
| 115 | Status status; |
| 116 | while (true) { |
| 117 | ::ssize_t read_size = ::read(fd_, scratch, n); |
| 118 | if (read_size < 0) { // Read error. |
| 119 | if (errno == EINTR) { |
| 120 | continue; // Retry |
| 121 | } |
| 122 | status = PosixError(filename_, errno); |
| 123 | break; |
| 124 | } |
| 125 | *result = Slice(scratch, read_size); |
| 126 | break; |
| 127 | } |
| 128 | return status; |
| 129 | } |
| 130 | |
| 131 | Status Skip(uint64_t n) override { |
| 132 | if (::lseek(fd_, n, SEEK_CUR) == static_cast<off_t>(-1)) { |