mirror of
https://github.com/git/git.git
synced 2026-01-11 21:33:13 +09:00
reftable/stack: stop using read_in_full()
There is a single callsite of `read_in_full()` in the reftable library. Open-code the function to reduce our dependency on the Git library. Note that we only partially port over the logic from `read_in_full()` and its underlying `xread()` helper. Most importantly, the latter also knows to handle `EWOULDBLOCK` via `handle_nonblock()`. This logic is irrelevant for us though because the reftable library never sets the `O_NONBLOCK` option in the first place. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0394451348
commit
cb3e368b69
@ -115,13 +115,16 @@ out:
|
||||
|
||||
static int fd_read_lines(int fd, char ***namesp)
|
||||
{
|
||||
off_t size = lseek(fd, 0, SEEK_END);
|
||||
char *buf = NULL;
|
||||
int err = 0;
|
||||
off_t size;
|
||||
|
||||
size = lseek(fd, 0, SEEK_END);
|
||||
if (size < 0) {
|
||||
err = REFTABLE_IO_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = lseek(fd, 0, SEEK_SET);
|
||||
if (err < 0) {
|
||||
err = REFTABLE_IO_ERROR;
|
||||
@ -134,9 +137,16 @@ static int fd_read_lines(int fd, char ***namesp)
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (read_in_full(fd, buf, size) != size) {
|
||||
err = REFTABLE_IO_ERROR;
|
||||
goto done;
|
||||
for (off_t total_read = 0; total_read < size; ) {
|
||||
ssize_t bytes_read = read(fd, buf + total_read, size - total_read);
|
||||
if (bytes_read < 0 && (errno == EAGAIN || errno == EINTR))
|
||||
continue;
|
||||
if (bytes_read < 0 || !bytes_read) {
|
||||
err = REFTABLE_IO_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
total_read += bytes_read;
|
||||
}
|
||||
buf[size] = 0;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user