fix PackMachFat::unpack for test mode ("-t"): fo==NULL
This commit is contained in:
parent
9c5d0ff2ff
commit
36bc14e884
@ -1351,15 +1351,19 @@ void PackMachFat::pack(OutputFile *fo)
|
||||
|
||||
void PackMachFat::unpack(OutputFile *fo)
|
||||
{
|
||||
fo->seek(0, SEEK_SET);
|
||||
fo->write(&fat_head, sizeof(fat_head.fat) +
|
||||
fat_head.fat.nfat_arch * sizeof(fat_head.arch[0]));
|
||||
if (fo) { // test mode ("-t") sets fo = NULL
|
||||
fo->seek(0, SEEK_SET);
|
||||
fo->write(&fat_head, sizeof(fat_head.fat) +
|
||||
fat_head.fat.nfat_arch * sizeof(fat_head.arch[0]));
|
||||
}
|
||||
unsigned length;
|
||||
for (unsigned j=0; j < fat_head.fat.nfat_arch; ++j) {
|
||||
unsigned base = fo->unset_extent(); // actual length
|
||||
unsigned base = (fo ? fo->unset_extent() : 0); // actual length
|
||||
base += ~(~0u<<fat_head.arch[j].align) & (0-base); // align up
|
||||
fo->seek(base, SEEK_SET);
|
||||
fo->set_extent(base, ~0u);
|
||||
if (fo) {
|
||||
fo->seek(base, SEEK_SET);
|
||||
fo->set_extent(base, ~0u);
|
||||
}
|
||||
|
||||
ph.u_file_size = fat_head.arch[j].size;
|
||||
fi->set_extent(fat_head.arch[j].offset, fat_head.arch[j].size);
|
||||
@ -1418,13 +1422,15 @@ void PackMachFat::unpack(OutputFile *fo)
|
||||
} break;
|
||||
} // switch cputype
|
||||
fat_head.arch[j].offset = base;
|
||||
length = fo->unset_extent();
|
||||
length = (fo ? fo->unset_extent() : 0);
|
||||
fat_head.arch[j].size = length - base;
|
||||
}
|
||||
fo->unset_extent();
|
||||
fo->seek(0, SEEK_SET);
|
||||
fo->rewrite(&fat_head, sizeof(fat_head.fat) +
|
||||
fat_head.fat.nfat_arch * sizeof(fat_head.arch[0]));
|
||||
if (fo) {
|
||||
fo->unset_extent();
|
||||
fo->seek(0, SEEK_SET);
|
||||
fo->rewrite(&fat_head, sizeof(fat_head.fat) +
|
||||
fat_head.fat.nfat_arch * sizeof(fat_head.arch[0]));
|
||||
}
|
||||
}
|
||||
|
||||
bool PackMachFat::canPack()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user