Lines Matching defs:pArchive

77 static int entryToIndex(const ZipArchive* pArchive, const ZipEntry entry)
80 if (ent < 0 || ent >= pArchive->mHashTableSize ||
81 pArchive->mHashTable[ent].name == NULL)
105 static void addToHash(ZipArchive* pArchive, const char* str, int strLen,
108 const int hashTableSize = pArchive->mHashTableSize;
114 while (pArchive->mHashTable[ent].name != NULL)
117 pArchive->mHashTable[ent].name = str;
118 pArchive->mHashTable[ent].nameLen = strLen;
145 ZipArchive* pArchive, off_t fileLength, size_t readAmount, u1* scanBuf)
205 * in pArchive.
208 &pArchive->mDirectoryMap) != 0)
214 pArchive->mNumEntries = numEntries;
215 pArchive->mDirectoryOffset = dirOffset;
229 ZipArchive* pArchive)
261 int result = mapCentralDirectory0(fd, debugFileName, pArchive,
274 static int parseZipArchive(ZipArchive* pArchive)
277 const u1* cdPtr = (const u1*)pArchive->mDirectoryMap.addr;
278 size_t cdLength = pArchive->mDirectoryMap.length;
279 int numEntries = pArchive->mNumEntries;
286 pArchive->mHashTableSize = dexRoundUpPower2(1 + (numEntries * 4) / 3);
287 pArchive->mHashTable = (ZipHashEntry*)
288 calloc(pArchive->mHashTableSize, sizeof(ZipHashEntry));
307 if (localHdrOffset >= pArchive->mDirectoryOffset) {
319 addToHash(pArchive, (const char*)ptr + kCDELen, fileNameLen, hash);
344 * On success, we fill out the contents of "pArchive" and return 0. On
347 int dexZipOpenArchive(const char* fileName, ZipArchive* pArchive)
351 ALOGV("Opening as zip '%s' %p", fileName, pArchive);
353 memset(pArchive, 0, sizeof(ZipArchive));
362 return dexZipPrepArchive(fd, fileName, pArchive);
368 * On success, we fill out the contents of "pArchive" and return 0.
370 int dexZipPrepArchive(int fd, const char* debugFileName, ZipArchive* pArchive)
374 memset(pArchive, 0, sizeof(*pArchive));
375 pArchive->mFd = fd;
377 if (mapCentralDirectory(fd, debugFileName, pArchive) != 0)
380 if (parseZipArchive(pArchive) != 0) {
390 dexZipCloseArchive(pArchive);
400 void dexZipCloseArchive(ZipArchive* pArchive)
402 ALOGV("Closing archive %p", pArchive);
404 if (pArchive->mFd >= 0)
405 close(pArchive->mFd);
407 sysReleaseShmem(&pArchive->mDirectoryMap);
409 free(pArchive->mHashTable);
412 pArchive->mDirectoryOffset = -1;
413 pArchive->mFd = -1;
414 pArchive->mNumEntries = -1;
415 pArchive->mHashTableSize = -1;
416 pArchive->mHashTable = NULL;
425 ZipEntry dexZipFindEntry(const ZipArchive* pArchive, const char* entryName)
429 const int hashTableSize = pArchive->mHashTableSize;
432 while (pArchive->mHashTable[ent].name != NULL) {
433 if (pArchive->mHashTable[ent].nameLen == nameLen &&
434 memcmp(pArchive->mHashTable[ent].name, entryName, nameLen) == 0)
454 ZipEntry findEntryByIndex(ZipArchive* pArchive, int idx)
456 if (idx < 0 || idx >= pArchive->mNumEntries) {
462 for (ent = 0; ent < pArchive->mHashTableSize; ent++) {
463 if (pArchive->mHashTable[ent].name != NULL) {
479 int dexZipGetEntryInfo(const ZipArchive* pArchive, ZipEntry entry,
483 int ent = entryToIndex(pArchive, entry);
493 pArchive->mDirectoryMap.addr;
495 pArchive->mHashTable[ent].name;
496 off_t cdOffset = pArchive->mDirectoryOffset;
539 if (lseek(pArchive->mFd, localHdrOffset, SEEK_SET) != localHdrOffset) {
544 TEMP_FAILURE_RETRY(read(pArchive->mFd, lfhBuf, sizeof(lfhBuf)));
696 int dexZipExtractEntryToFile(const ZipArchive* pArchive,
700 int ent = entryToIndex(pArchive, entry);
710 if (dexZipGetEntryInfo(pArchive, entry, &method, &uncompLen, &compLen,
715 if (lseek(pArchive->mFd, dataOffset, SEEK_SET) != dataOffset) {
721 if (sysCopyFileToFile(fd, pArchive->mFd, uncompLen) != 0)
724 if (inflateToFile(fd, pArchive->mFd, uncompLen, compLen) != 0)