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:
@@ -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.
|
||||||
|
|||||||
@@ -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,12 +522,14 @@ 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; "
|
||||||
return false;
|
"got: offset=%zd data=0x%08lx\n",
|
||||||
|
localHdrOffset, kLFHSignature, (size_t)actualOffset, get4LE(lfhBuf));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
off_t dataOffset = localHdrOffset + kLFHLen
|
off_t dataOffset = localHdrOffset + kLFHLen
|
||||||
|
|||||||
Reference in New Issue
Block a user