ar: handle partial writes from archive_write_data
libarchive may limit a single archive_write_data call to handling 0x7fffffff bytes. Add a loop to handle partial writes. Reviewed by: kib, jhb MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D11715
This commit is contained in:
parent
dcbe705600
commit
3f71a0c918
@ -586,10 +586,17 @@ prefault_buffer(const char *buf, size_t s)
|
||||
static void
|
||||
write_data(struct bsdar *bsdar, struct archive *a, const void *buf, size_t s)
|
||||
{
|
||||
ssize_t written;
|
||||
|
||||
prefault_buffer(buf, s);
|
||||
if (archive_write_data(a, buf, s) != (ssize_t)s)
|
||||
bsdar_errc(bsdar, EX_SOFTWARE, 0, "%s",
|
||||
archive_error_string(a));
|
||||
while (s > 0) {
|
||||
written = archive_write_data(a, buf, s);
|
||||
if (written < 0)
|
||||
bsdar_errc(bsdar, EX_SOFTWARE, 0, "%s",
|
||||
archive_error_string(a));
|
||||
buf = (const char *)buf + written;
|
||||
s -= written;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user