diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2016-11-18 13:36:45 -0800 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2016-11-18 13:38:43 -0800 |
| commit | 26a8ed58becf42c2c448aa9ee7621ed2c26319fc (patch) | |
| tree | 147e6e64cd0388108f56f305d0bd075c5050b1ac /toolsrc/src/coff_file_reader.cpp | |
| parent | ba28195eb8ead2724400c6d0cdf123dbfadadffb (diff) | |
| download | vcpkg-26a8ed58becf42c2c448aa9ee7621ed2c26319fc.tar.gz vcpkg-26a8ed58becf42c2c448aa9ee7621ed2c26319fc.zip | |
[coff] Use the offsets_array to go to archive members. Fixes #292
Diffstat (limited to 'toolsrc/src/coff_file_reader.cpp')
| -rw-r--r-- | toolsrc/src/coff_file_reader.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/toolsrc/src/coff_file_reader.cpp b/toolsrc/src/coff_file_reader.cpp index e8bb6089c..3bf7922f5 100644 --- a/toolsrc/src/coff_file_reader.cpp +++ b/toolsrc/src/coff_file_reader.cpp @@ -236,6 +236,11 @@ namespace vcpkg { namespace COFFFileReader struct marker_t { + void set_to_offset(const fpos_t position) + { + this->m_absolute_position = position; + } + void set_to_current_pos(fstream& fs) { this->m_absolute_position = fs.tellg().seekpos(); @@ -289,15 +294,14 @@ namespace vcpkg { namespace COFFFileReader std::set<MachineType> machine_types; // Next we have the obj and pseudo-object files - for (uint32_t i = 0; i < offsets.data.size(); i++) + for (const uint32_t offset : offsets.data) { - const archive_member_header header = archive_member_header::read(fs); + marker.set_to_offset(offset + archive_member_header::HEADER_SIZE); // Skip the header, no need to read it. + marker.seek_to_marker(fs); const uint16_t first_two_bytes = peek_value_from_stream<uint16_t>(fs); const bool isImportHeader = getMachineType(first_two_bytes) == MachineType::UNKNOWN; const MachineType machine = isImportHeader ? import_header::read(fs).machineType() : coff_file_header::read(fs).machineType(); machine_types.insert(machine); - marker.advance_by(archive_member_header::HEADER_SIZE + header.member_size()); - marker.seek_to_marker(fs); } return {std::vector<MachineType>(machine_types.cbegin(), machine_types.cend())}; |
