am b58b2714: Merge "ZipFileRO: moar logging and wrap close" into gingerbread

Merge commit 'b58b27142a936aa76897a7040c08b8a0989a685b' into gingerbread-plus-aosp

* commit 'b58b27142a936aa76897a7040c08b8a0989a685b':
  ZipFileRO: moar logging and wrap close
This commit is contained in:
Kenny Root
2010-10-04 07:41:11 -07:00
committed by Android Git Automerger
2 changed files with 21 additions and 16 deletions

View File

@@ -64,15 +64,8 @@ public:
mNumEntries(-1), mDirectoryOffset(-1), mNumEntries(-1), mDirectoryOffset(-1),
mHashTableSize(-1), mHashTable(NULL) mHashTableSize(-1), mHashTable(NULL)
{} {}
~ZipFileRO() {
free(mHashTable); ~ZipFileRO();
if (mDirectoryMap)
mDirectoryMap->release();
if (mFd >= 0)
close(mFd);
if (mFileName)
free(mFileName);
}
/* /*
* Open an archive. * Open an archive.

View File

@@ -86,6 +86,16 @@ using namespace android;
*/ */
#define kZipEntryAdj 10000 #define kZipEntryAdj 10000
ZipFileRO::~ZipFileRO() {
free(mHashTable);
if (mDirectoryMap)
mDirectoryMap->release();
if (mFd >= 0)
TEMP_FAILURE_RETRY(close(mFd));
if (mFileName)
free(mFileName);
}
/* /*
* Convert a ZipEntryRO to a hash table index, verifying that it's in a * Convert a ZipEntryRO to a hash table index, verifying that it's in a
* valid range. * valid range.
@@ -122,7 +132,7 @@ status_t ZipFileRO::open(const char* zipFileName)
mFileLength = lseek(fd, 0, SEEK_END); mFileLength = lseek(fd, 0, SEEK_END);
if (mFileLength < kEOCDLen) { if (mFileLength < kEOCDLen) {
close(fd); TEMP_FAILURE_RETRY(close(fd));
return UNKNOWN_ERROR; return UNKNOWN_ERROR;
} }
@@ -152,7 +162,7 @@ status_t ZipFileRO::open(const char* zipFileName)
bail: bail:
free(mFileName); free(mFileName);
mFileName = NULL; mFileName = NULL;
close(fd); TEMP_FAILURE_RETRY(close(fd));
return UNKNOWN_ERROR; return UNKNOWN_ERROR;
} }
@@ -512,13 +522,15 @@ bool ZipFileRO::getEntryInfo(ZipEntryRO entry, int* pMethod, size_t* pUncompLen,
LOGW("failed reading lfh from offset %ld\n", localHdrOffset); LOGW("failed reading lfh from offset %ld\n", localHdrOffset);
return false; return false;
} }
}
if (get4LE(lfhBuf) != kLFHSignature) { if (get4LE(lfhBuf) != kLFHSignature) {
LOGW("didn't find signature at start of lfh, offset=%ld (got 0x%08lx, expected 0x%08x)\n", off_t actualOffset = lseek(mFd, 0, SEEK_CUR);
localHdrOffset, get4LE(lfhBuf), kLFHSignature); LOGW("didn't find signature at start of lfh; wanted: offset=%ld data=0x%08x; "
"got: offset=%zd data=0x%08lx\n",
localHdrOffset, kLFHSignature, (size_t)actualOffset, get4LE(lfhBuf));
return false; return false;
} }
}
off_t dataOffset = localHdrOffset + kLFHLen off_t dataOffset = localHdrOffset + kLFHLen
+ get2LE(lfhBuf + kLFHNameLen) + get2LE(lfhBuf + kLFHExtraLen); + get2LE(lfhBuf + kLFHNameLen) + get2LE(lfhBuf + kLFHExtraLen);