MCPcopy Create free account
hub / github.com/defold/defold / VerifyArchiveIndex

Function VerifyArchiveIndex

engine/resource/src/resource_verify.cpp:143–188  ·  view source on GitHub ↗

For unit test

Source from the content-addressed store, hash-verified

141
142 // For unit test
143 int VerifyArchiveIndex(dmResourceArchive::HArchiveIndexContainer archive)
144 {
145 dmLogInfo("VerifyArchiveIndex: %p\n", archive);
146
147 uint8_t* hashes = 0;
148 //EntryData* entries = 0;
149
150 // If archive is loaded from file use the member arrays for hashes and entries, otherwise read with mem offsets.
151 if (!archive->m_IsMemMapped)
152 {
153 hashes = archive->m_ArchiveFileIndex->m_Hashes;
154 //entries = archive->m_ArchiveFileIndex->m_Entries;
155 }
156 else
157 {
158 //uint32_t entry_offset = dmEndian::ToNetwork(archive->m_ArchiveIndex->m_EntryDataOffset);
159 uint32_t hash_offset = dmEndian::ToNetwork(archive->m_ArchiveIndex->m_HashOffset);
160 hashes = (uint8_t*)((uintptr_t)archive->m_ArchiveIndex + hash_offset);
161 //entries = (EntryData*)((uintptr_t)archive->m_ArchiveIndex + entry_offset);
162 }
163
164 uint32_t hash_len = dmEndian::ToNetwork(archive->m_ArchiveIndex->m_HashLength);
165 uint32_t entry_count = dmEndian::ToNetwork(archive->m_ArchiveIndex->m_EntryDataCount);
166
167 const uint8_t* prevh = hashes;
168
169 for (uint32_t i = 0; i < entry_count; ++i)
170 {
171 const uint8_t* h = (hashes + dmResourceArchive::MAX_HASH * i);
172
173 int cmp = memcmp(prevh, h, dmResourceArchive::MAX_HASH);
174 if (cmp > 0)
175 {
176 char hash_buffer1[dmResourceArchive::MAX_HASH*2+1];
177 dmResource::BytesToHexString(prevh, hash_len, hash_buffer1, sizeof(hash_buffer1));
178 char hash_buffer2[dmResourceArchive::MAX_HASH*2+1];
179 dmResource::BytesToHexString(h, hash_len, hash_buffer2, sizeof(hash_buffer2));
180 dmLogError("Entry %3d: '%s' is not smaller than", i == 0 ? -1 : i-1, hash_buffer1);
181 dmLogError("Entry %3d: '%s'", i, hash_buffer2);
182 return cmp;
183 }
184
185 prevh = h;
186 }
187 return 0;
188 }
189}

Callers

nothing calls this directly

Calls 2

ToNetworkFunction · 0.85
BytesToHexStringFunction · 0.85

Tested by

no test coverage detected