summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2010-10-04 07:41:11 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-10-04 07:41:11 -0700
commitac7540733cafcca5bdb1842e1ebcb396ba064583 (patch)
tree3d155d892096e2f1a02119eb94a0bd775e3de687
parent1f34ffd7e36de5d1a12d4a3901c3ac4e4e56cb99 (diff)
parentb58b27142a936aa76897a7040c08b8a0989a685b (diff)
downloadframeworks_base-ac7540733cafcca5bdb1842e1ebcb396ba064583.zip
frameworks_base-ac7540733cafcca5bdb1842e1ebcb396ba064583.tar.gz
frameworks_base-ac7540733cafcca5bdb1842e1ebcb396ba064583.tar.bz2
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
-rw-r--r--include/utils/ZipFileRO.h11
-rw-r--r--libs/utils/ZipFileRO.cpp26
2 files changed, 21 insertions, 16 deletions
diff --git a/include/utils/ZipFileRO.h b/include/utils/ZipFileRO.h
index 9668bde..e1ff780 100644
--- a/include/utils/ZipFileRO.h
+++ b/include/utils/ZipFileRO.h
@@ -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.
diff --git a/libs/utils/ZipFileRO.cpp b/libs/utils/ZipFileRO.cpp
index 9fcae72..bee86b2 100644
--- a/libs/utils/ZipFileRO.cpp
+++ b/libs/utils/ZipFileRO.cpp
@@ -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