diff --git a/src/p_mach.cpp b/src/p_mach.cpp index 1d5871f8..8787dd9b 100644 --- a/src/p_mach.cpp +++ b/src/p_mach.cpp @@ -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<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()