Move read_in_full() and write_in_full() to wrapper.c
A few compat/* layer functions call these functions, but we would really want to keep them thin, without depending too much on the libgit proper. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
7df1709c36
commit
559e840b74
38
wrapper.c
38
wrapper.c
@ -133,6 +133,44 @@ ssize_t xwrite(int fd, const void *buf, size_t len)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ssize_t read_in_full(int fd, void *buf, size_t count)
|
||||||
|
{
|
||||||
|
char *p = buf;
|
||||||
|
ssize_t total = 0;
|
||||||
|
|
||||||
|
while (count > 0) {
|
||||||
|
ssize_t loaded = xread(fd, p, count);
|
||||||
|
if (loaded <= 0)
|
||||||
|
return total ? total : loaded;
|
||||||
|
count -= loaded;
|
||||||
|
p += loaded;
|
||||||
|
total += loaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
ssize_t write_in_full(int fd, const void *buf, size_t count)
|
||||||
|
{
|
||||||
|
const char *p = buf;
|
||||||
|
ssize_t total = 0;
|
||||||
|
|
||||||
|
while (count > 0) {
|
||||||
|
ssize_t written = xwrite(fd, p, count);
|
||||||
|
if (written < 0)
|
||||||
|
return -1;
|
||||||
|
if (!written) {
|
||||||
|
errno = ENOSPC;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
count -= written;
|
||||||
|
p += written;
|
||||||
|
total += written;
|
||||||
|
}
|
||||||
|
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
int xdup(int fd)
|
int xdup(int fd)
|
||||||
{
|
{
|
||||||
int ret = dup(fd);
|
int ret = dup(fd);
|
||||||
|
@ -45,44 +45,6 @@ void maybe_flush_or_die(FILE *f, const char *desc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t read_in_full(int fd, void *buf, size_t count)
|
|
||||||
{
|
|
||||||
char *p = buf;
|
|
||||||
ssize_t total = 0;
|
|
||||||
|
|
||||||
while (count > 0) {
|
|
||||||
ssize_t loaded = xread(fd, p, count);
|
|
||||||
if (loaded <= 0)
|
|
||||||
return total ? total : loaded;
|
|
||||||
count -= loaded;
|
|
||||||
p += loaded;
|
|
||||||
total += loaded;
|
|
||||||
}
|
|
||||||
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t write_in_full(int fd, const void *buf, size_t count)
|
|
||||||
{
|
|
||||||
const char *p = buf;
|
|
||||||
ssize_t total = 0;
|
|
||||||
|
|
||||||
while (count > 0) {
|
|
||||||
ssize_t written = xwrite(fd, p, count);
|
|
||||||
if (written < 0)
|
|
||||||
return -1;
|
|
||||||
if (!written) {
|
|
||||||
errno = ENOSPC;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
count -= written;
|
|
||||||
p += written;
|
|
||||||
total += written;
|
|
||||||
}
|
|
||||||
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
void fsync_or_die(int fd, const char *msg)
|
void fsync_or_die(int fd, const char *msg)
|
||||||
{
|
{
|
||||||
if (fsync(fd) < 0) {
|
if (fsync(fd) < 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user