svn commit: r321436 - head/usr.bin/ar
Ed Maste
emaste at FreeBSD.org
Mon Jul 24 21:25:51 UTC 2017
Author: emaste
Date: Mon Jul 24 21:25:49 2017
New Revision: 321436
URL: https://svnweb.freebsd.org/changeset/base/321436
Log:
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
Modified:
head/usr.bin/ar/write.c
Modified: head/usr.bin/ar/write.c
==============================================================================
--- head/usr.bin/ar/write.c Mon Jul 24 19:17:13 2017 (r321435)
+++ head/usr.bin/ar/write.c Mon Jul 24 21:25:49 2017 (r321436)
@@ -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;
+ }
}
/*
More information about the svn-src-head
mailing list