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

This commit is contained in:
Kenny Root
2010-10-04 07:28:20 -07:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 16 deletions

View File

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

View File

@@ -86,6 +86,16 @@ using namespace android;
*/
#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
* valid range.
@@ -122,7 +132,7 @@ status_t ZipFileRO::open(const char* zipFileName)
mFileLength = lseek(fd, 0, SEEK_END);
if (mFileLength < kEOCDLen) {
close(fd);
TEMP_FAILURE_RETRY(close(fd));
return UNKNOWN_ERROR;
}
@@ -152,7 +162,7 @@ status_t ZipFileRO::open(const char* zipFileName)
bail:
free(mFileName);
mFileName = NULL;
close(fd);
TEMP_FAILURE_RETRY(close(fd));
return UNKNOWN_ERROR;
}
@@ -512,12 +522,14 @@ bool ZipFileRO::getEntryInfo(ZipEntryRO entry, int* pMethod, size_t* pUncompLen,
LOGW("failed reading lfh from offset %ld\n", localHdrOffset);
return false;
}
}
if (get4LE(lfhBuf) != kLFHSignature) {
LOGW("didn't find signature at start of lfh, offset=%ld (got 0x%08lx, expected 0x%08x)\n",
localHdrOffset, get4LE(lfhBuf), kLFHSignature);
return false;
if (get4LE(lfhBuf) != kLFHSignature) {
off_t actualOffset = lseek(mFd, 0, SEEK_CUR);
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;
}
}
off_t dataOffset = localHdrOffset + kLFHLen