fix PackMachFat::unpack for test mode ("-t"): fo==NULL

This commit is contained in:
John Reiser 2011-07-11 14:37:40 -07:00
parent 9c5d0ff2ff
commit 36bc14e884

View File

@ -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()