| 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 | { |
no test coverage detected