MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / rebuildZip

Method rebuildZip

Engine/source/core/util/zip/zipArchive.cpp:416–513  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

414// zip is created, delete the old one and rename the new one.
415
416bool ZipArchive::rebuildZip()
417{
418 String newZipName;
419 FileStream tempFile;
420 Stream *zipFile = mStream;
421
422 // FIXME [tom, 1/24/2007] Temporary for expediting testing
423 if(mFilename == NULL)
424 return false;
425
426 if(mMode == ReadWrite)
427 {
428 newZipName = String(mFilename) + ".new";
429
430 if(! tempFile.open(newZipName, mMode == Write ? Torque::FS::File::Write : Torque::FS::File::ReadWrite))
431 return false;
432
433 zipFile = &tempFile;
434 }
435
436 // Copy any unmodified files
437 for(S32 i = 0;i < mEntries.size();++i)
438 {
439 ZipEntry *entry = mEntries[i];
440
441 // Directories are internal only for lookup purposes
442 if(entry->mIsDirectory || (entry->mCD.mInternalFlags & (CDFileDirty | CDFileDeleted)))
443 continue;
444
445 copyFileToNewZip(&entry->mCD, zipFile);
446 }
447
448 // Copy any dirty files
449 for(S32 i = 0;i < mTempFiles.size();++i)
450 {
451 ZipTempStream *zts = mTempFiles[i];
452
453 writeDirtyFileToNewZip(zts, zipFile);
454 zts->close();
455 delete zts;
456 mTempFiles[i] = NULL;
457 }
458 mTempFiles.clear();
459
460 // Write central directory
461 mEOCD.mCDOffset = zipFile->getPosition();
462 mEOCD.mNumEntriesInThisCD = 0;
463
464 for(S32 i = 0;i < mEntries.size();++i)
465 {
466 ZipEntry *entry = mEntries[i];
467
468 // [tom, 1/24/2007] Directories are internal only for lookup purposes
469 if(entry->mIsDirectory || (entry->mCD.mInternalFlags & CDFileDeleted) != 0)
470 continue;
471
472 ++mEOCD.mNumEntriesInThisCD;
473 if(! entry->mCD.write(zipFile))

Callers

nothing calls this directly

Calls 9

RenameFunction · 0.85
RemoveFunction · 0.85
openMethod · 0.65
closeMethod · 0.65
StringClass · 0.50
sizeMethod · 0.45
clearMethod · 0.45
getPositionMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected