+ chunk_tab->cur_offset += vecs[i].iov_len;
+ }
+ for (;;) {
+ ssize_t bytes_written;
+
+ bytes_written = writev(out_fd, vecs, nvecs);
+ if (bytes_written <= 0) {
+ if (bytes_written < 0 && errno == EINTR)
+ continue;
+ else if (bytes_written == 0)
+ errno = EIO;
+ ERROR_WITH_ERRNO("Failed to write WIM chunks");
+ ret = WIMLIB_ERR_WRITE;
+ break;
+ }
+ bytes_remaining -= bytes_written;
+ if (bytes_remaining <= 0) {
+ ret = 0;
+ break;
+ }
+ while (bytes_written >= 0) {
+ wimlib_assert(nvecs != 0);
+ if (bytes_written >= vecs[0].iov_len) {
+ vecs++;
+ nvecs--;
+ bytes_written -= vecs[0].iov_len;
+ } else {
+ vecs[0].iov_base += bytes_written;
+ vecs[0].iov_len -= bytes_written;
+ bytes_written = 0;
+ }
+ }