EpadResult ExtractFromWad(RandomInStream &in, OutStream &out, std::string &key_file) { WadMetadata metadata; auto result = ExtractWadMetadata(in, in.GetCount(), metadata); in.Seek(metadata.payload_offset); if(result != EpadResult::Success) return result; Botan::SecureVector<byte> buffer; buffer.resize(metadata.payload_size != 0 ? metadata.payload_size : in.GetCount()); in.Read(buffer.data(), buffer.size()); out.Write(buffer.data(), buffer.size()); key_file.clear(); if(metadata.key_file_offset != kInvalid) { key_file.resize(metadata.key_file_size); in.Seek(metadata.key_file_offset); in.Read(reinterpret_cast<byte *>(&*key_file.begin()), metadata.key_file_size); } return EpadResult::Success; }