| 303 | } |
| 304 | |
| 305 | ssize_t write_in_full(int fd, const void *buf, size_t count) |
| 306 | { |
| 307 | const char *p = buf; |
| 308 | ssize_t total = 0; |
| 309 | |
| 310 | while (count > 0) { |
| 311 | ssize_t written = xwrite(fd, p, count); |
| 312 | if (written < 0) |
| 313 | return -1; |
| 314 | if (!written) { |
| 315 | errno = ENOSPC; |
| 316 | return -1; |
| 317 | } |
| 318 | count -= written; |
| 319 | p += written; |
| 320 | total += written; |
| 321 | } |
| 322 | |
| 323 | return total; |
| 324 | } |
| 325 | |
| 326 | ssize_t pread_in_full(int fd, void *buf, size_t count, off_t offset) |
| 327 | { |