bool csArchive::WriteCentralDirectory (FILE *temp) { int n, count = 0; size_t cdroffs = ftell (temp); for (n = 0; n < dir.Length (); n++) { ArchiveEntry *f = dir.Get (n); if (IsDeleted (f->filename)) continue; if (!f->WriteCDFH (temp)) return false; count++; } /* endwhile */ for (n = 0; n < lazy.Length (); n++) { ArchiveEntry *f = lazy.Get (n); if (!f->WriteCDFH (temp)) return false; count++; } /* endwhile */ /* Write end-of-central-directory record */ ZIP_end_central_dir_record ecdr; memset (&ecdr, 0, sizeof (ecdr)); ecdr.num_entries_centrl_dir_ths_disk = count; ecdr.total_entries_central_dir = count; ecdr.size_central_directory = ftell (temp) - cdroffs; ecdr.offset_start_central_directory = cdroffs; ecdr.zipfile_comment_length = comment_length; if (!WriteECDR (ecdr, temp)) return false; return true; }