svn commit: r321770 - stable/11/usr.bin/ar
Ed Maste
emaste at FreeBSD.org
Mon Jul 31 08:19:46 UTC 2017
Author: emaste
Date: Mon Jul 31 08:19:44 2017
New Revision: 321770
URL: https://svnweb.freebsd.org/changeset/base/321770
Log:
MFC r321436: 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.
Sponsored by: The FreeBSD Foundation
Modified:
stable/11/usr.bin/ar/write.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/usr.bin/ar/write.c
==============================================================================
--- stable/11/usr.bin/ar/write.c Mon Jul 31 08:16:12 2017 (r321769)
+++ stable/11/usr.bin/ar/write.c Mon Jul 31 08:19:44 2017 (r321770)
@@ -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-all
mailing list