/* convert record_header2 -> record_header and fetch external body */ void export_record(const record_header2 &hd2, render_buf &output, input_file &input) { record_header hd; memcpy(hd.key, hd2.key, sizeof(record_header::key)); hd.flags = hd2.flags; hd.crc = hd2.crc; hd.body_size = hd2.body_size; output.put(hd); if (!hd2.is_body_present) { input.set_file_pos(hd2.body_pos); file_size_t sz = hd2.body_size; while (sz != 0) { mem_chunk buf = output.get_free_mem().sub_chunk(0, std::min<file_size_t>(sz, SIZE_MAX)); if (!input.read(buf)) { throw std::runtime_error( format_message( "Data corrupt %s (+%"PRId64")", input.get_file_path().c_str(), input.get_file_pos())); } output.write(buf); sz -= buf.size(); } } }