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

Function LoadArchive

engine/resource/src/providers/provider_archive.cpp:125–162  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

123 }
124
125 static dmResourceProvider::Result LoadArchive(const dmURI::Parts* uri, dmResourceProvider::HArchiveInternal* out_archive)
126 {
127 GameArchiveFile* archive = new GameArchiveFile;
128 {
129 memcpy(&archive->m_BaseUri, uri, sizeof(dmURI::Parts));
130 // Remove the suffix, as we'll reuse this later
131 char* dot = strrchr(archive->m_BaseUri.m_Path, '.');
132 if (dot != 0 && strcmp(dot, ".dmanifest") == 0)
133 *dot = 0;
134 }
135
136 dmResource::Result m_result = dmResource::LoadManifest(&archive->m_BaseUri, &archive->m_Manifest);
137 if (dmResource::RESULT_OK != m_result)
138 {
139 DeleteArchive(archive);
140 return dmResourceProvider::RESULT_INVAL_ERROR;
141 }
142
143 // printf("Manifest:\n");
144 // dmResource::DebugPrintManifest(archive->m_Manifest);
145
146 dmResourceProvider::Result result = MountArchive(&archive->m_BaseUri, &archive->m_ArchiveIndex);
147 if (dmResourceProvider::RESULT_OK != result)
148 {
149 DeleteArchive(archive);
150 return result;
151 }
152
153 // printf("Archive:\n");
154 // dmResourceProviderArchivePrivate::DebugPrintArchiveIndex(archive->m_ArchiveIndex);
155
156 CreateEntryMap(archive);
157
158 archive->m_Manifest->m_ArchiveIndex = archive->m_ArchiveIndex;
159
160 *out_archive = (dmResourceProvider::HArchive)archive;
161 return dmResourceProvider::RESULT_OK;
162 }
163
164 static dmResourceProvider::Result Mount(const dmURI::Parts* uri, dmResourceProvider::HArchive base_archive, dmResourceProvider::HArchiveInternal* out_archive)
165 {

Callers 1

MountFunction · 0.85

Calls 4

DeleteArchiveFunction · 0.85
MountArchiveFunction · 0.85
LoadManifestFunction · 0.70
CreateEntryMapFunction · 0.70

Tested by

no test coverage detected