|
|
|
|
@ -102,16 +102,15 @@ bool offsets::load_offsets_at(std::istream & is, boost::uint32_t pos) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
char magic[12]; |
|
|
|
|
if(is.read(magic, std::streamsize(boost::size(magic))).fail()) { |
|
|
|
|
if(is.read(magic, std::streamsize(sizeof(magic))).fail()) { |
|
|
|
|
is.clear(); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
setup::version_constant version = 0; |
|
|
|
|
for(size_t i = 0; i < boost::size(known_setup_loader_versions); i++) { |
|
|
|
|
BOOST_STATIC_ASSERT(ARRAY_SIZE(known_setup_loader_versions[i].magic) |
|
|
|
|
== ARRAY_SIZE(magic)); |
|
|
|
|
if(!memcmp(magic, known_setup_loader_versions[i].magic, boost::size(magic))) { |
|
|
|
|
BOOST_STATIC_ASSERT(sizeof(known_setup_loader_versions[i].magic) == sizeof(magic)); |
|
|
|
|
if(!memcmp(magic, known_setup_loader_versions[i].magic, sizeof(magic))) { |
|
|
|
|
version = known_setup_loader_versions[i].version; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
@ -122,7 +121,7 @@ bool offsets::load_offsets_at(std::istream & is, boost::uint32_t pos) {
|
|
|
|
|
|
|
|
|
|
crypto::crc32 checksum; |
|
|
|
|
checksum.init(); |
|
|
|
|
checksum.update(magic, boost::size(magic)); |
|
|
|
|
checksum.update(magic, sizeof(magic)); |
|
|
|
|
|
|
|
|
|
if(version >= INNO_VERSION(5, 1, 5)) { |
|
|
|
|
boost::uint32_t revision = checksum.load<boost::uint32_t>(is); |
|
|
|
|
|