Re: [PATCH] stream_to_pack: xread does not guarantee to read all requested bytes
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 20, 2013, 18:27 UTC
- Message-ID
- <xmqq8uzw6wuw.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <CALWbr2yaQaCte6+Y3GEa8Hxyhq6GPS64aTNzkGo8pdpcd9ZVUg@mail.gmail.com>
Antoine Pelisse <apelisse@gmail.com> writes:
> I was actually wondering when it's better to use xread() over > read_in_full()?
When the caller wants to do more control over a read that may have to loop. For example, this loop in builtin/index-pack.c::fill()
do {
ssize_t ret = xread(input_fd, input_buffer + input_len,
sizeof(input_buffer) - input_len);
if (ret <= 0) {
if (!ret)
die(_("early EOF"));
die_errno(_("read error on input"));
}
input_len += ret;
if (from_stdin)
display_throughput(progress, consumed_bytes + input_len);
} while (input_len < min);cannot be replaced blindly with read_in_full() because (1) the caller wants to do the "display_throughput()" part in the loop, and (2) the caller wants to fill at least "min" bytes but can happily accept to read more up to the size of the input_buffer.