On 04/08, Paul Eggert wrote:
> Simply switching from safe_read to full_read would lose an errno value if
> there's an I/O error, so that patch alone wouldn't suffice for GNU 'tar'.

Can you elaborate? I can't find a code path that loses the errno.

'full_read' breaks if safe_read returns an error (-1), preserving errno. It only
overwrites errno if read returns 0/EOF, which should never happen in
create_regular_file's case as we know the exact size of the file at the point,
so the only way it hits that path is if the file really shrunk.

size_t n_rw = safe_rw (fd, ptr, count);
if (n_rw == (size_t) -1)
  break;
if (n_rw == 0)
  {
    errno = ZERO_BYTE_TRANSFER_ERRNO;
    break;
  }

Perhaps this has to do with some minute detail of how read works that I'm
unfamiliar with?

Reply via email to