MCPcopy Create free account
hub / github.com/deathkiller/jazz2-native / AddFile

Method AddFile

Sources/Shared/IO/PakFile.cpp:930–1018  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

928 }
929
930 bool PakWriter::AddFile(Stream& stream, StringView path, PakPreferredCompression preferredCompression)
931 {
932 DEATH_ASSERT(_outputStream->IsValid(), "Invalid output stream specified", false);
933 DEATH_ASSERT(!path.empty() && path[path.size() - 1] != '/' && path[path.size() - 1] != '\\',
934 ("\"{}\" is not valid file path", String::nullTerminatedView(path).data()), false);
935
936 Array<PakFile::Item>* items = &_rootItems;
937 if (!_useHashIndex) {
938 PakFile::Item* parentItem = FindOrCreateParentItem(path);
939 if (parentItem != nullptr) {
940 items = &parentItem->ChildItems;
941 }
942 }
943
944 for (PakFile::Item& item : *items) {
945 if (item.Name == path) {
946 // File already exists in the .pak file
947 LOGW("File \"{}\" already exists in the .pak file", path);
948 return false;
949 }
950 }
951
952 PakFile::ItemFlags flags = PakFile::ItemFlags::None;
953 std::int64_t offset = _outputStream->GetPosition();
954 std::int64_t uncompressedSize, size;
955
956 switch (preferredCompression) {
957#if defined(WITH_ZLIB) || defined(WITH_MINIZ)
958 case PakPreferredCompression::Deflate: {
959 CopyToDeflate(stream, *_outputStream, uncompressedSize);
960 size = _outputStream->GetPosition() - offset;
961 DEATH_DEBUG_ASSERT(size > 0);
962 flags |= PakFile::ItemFlags(std::uint32_t(PakPreferredCompression::Deflate) << PakFile::CompressionFlagsShift);
963 break;
964 }
965#endif
966#if defined(WITH_LZ4)
967 case PakPreferredCompression::Lz4: {
968 CopyToLz4(stream, *_outputStream, uncompressedSize);
969 size = _outputStream->GetPosition() - offset;
970 DEATH_DEBUG_ASSERT(size > 0);
971 flags |= PakFile::ItemFlags(std::uint32_t(PakPreferredCompression::Lz4) << PakFile::CompressionFlagsShift);
972 break;
973 }
974#endif
975#if defined(WITH_ZSTD)
976 case PakPreferredCompression::Zstd: {
977 CopyToZstd(stream, *_outputStream, uncompressedSize);
978 size = _outputStream->GetPosition() - offset;
979 DEATH_DEBUG_ASSERT(size > 0);
980 flags |= PakFile::ItemFlags(std::uint32_t(PakPreferredCompression::Zstd) << PakFile::CompressionFlagsShift);
981 break;
982 }
983#endif
984#if defined(WITH_LZMA2)
985 case PakPreferredCompression::Lzma2Compressed: {
986 CopyToLzma2(stream, *_outputStream, uncompressedSize);
987 size = _outputStream->GetPosition() - offset;

Callers 4

ConvertSfxListMethod · 0.80
ConvertMenuImageMethod · 0.80
ImportAnimationsMethod · 0.80
ImportAudioSamplesMethod · 0.80

Calls 15

DEATH_ASSERTFunction · 0.85
CopyToDeflateFunction · 0.85
ItemFlagsEnum · 0.85
CopyToLz4Function · 0.85
CopyToZstdFunction · 0.85
CopyToLzma2Function · 0.85
arrayAppendFunction · 0.85
FileNameToHashFunction · 0.85
CopyToMethod · 0.80
ItemClass · 0.70
IsValidMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected