- Improve existing `read` and `readOffset` wrappers:
- Unix: Add `EINTR` retry handling and `checkInterrupt`
- Windows: Handle `ERROR_BROKEN_PIPE` as EOF, add `checkInterrupt`
- Add `write` wrapper with same treatment (`EINTR` on Unix, `checkInterrupt`)
- Improve many `windows/file-descriptor.cc` error messages with
`descriptorToPath`
- Move `readFull`, `readLine`, `writeFull` to common file, using the
platform wrappers instead of duplicating platform-specific logic.
These ones don't need any `EINTR` or interrupt checking either. They
only have `EGAIN` checking as Unix-specific code, but this is a temp
hack to be removed per #12688, so its fine that it goes in the
platform-agnostic file for now.
- Add `retryOnBlock` helper to abstract `EAGAIN`/`EWOULDBLOCK` poll-and-retry
logic (Unix only, needed for buildhook workaround #12688)
- Simplify `FdSource::readUnbuffered` to just call `nix::read`
- Remove now-dead `EINTR` handling from `drainFD` and `copyFdRange`
- `writeErr` better impl on Windows