Esempio n. 1
0
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;
}