Use readv for a 15% speed increase in dwarfsextract

This commit is contained in:
Marcus Holland-Moritz 2021-02-28 23:42:45 +01:00
parent 149c80daf9
commit 6f16454771

View File

@ -150,10 +150,12 @@ int dwarfsextract(int argc, char** argv) {
auto do_archive = [&](::archive_entry* ae, entry_view entry) {
check_result(::archive_write_header(a, ae));
if (auto size = ::archive_entry_size(ae); size > 0) {
std::vector<char> buf(size);
int fh = fs.open(entry);
fs.read(fh, buf.data(), buf.size());
check_result(::archive_write_data(a, buf.data(), buf.size()));
iovec_read_buf irb;
fs.readv(fh, irb, size, 0);
for (auto const& iov : irb.buf) {
check_result(::archive_write_data(a, iov.iov_base, iov.iov_len));
}
}
};