summaryrefslogtreecommitdiffstats
path: root/libs/utils/ZipFileRO.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/utils/ZipFileRO.cpp')
-rw-r--r--libs/utils/ZipFileRO.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/libs/utils/ZipFileRO.cpp b/libs/utils/ZipFileRO.cpp
index cad7720..cc62213 100644
--- a/libs/utils/ZipFileRO.cpp
+++ b/libs/utils/ZipFileRO.cpp
@@ -118,7 +118,7 @@ ZipFileRO::~ZipFileRO() {
*/
int ZipFileRO::entryToIndex(const ZipEntryRO entry) const
{
- long ent = ((long) entry) - kZipEntryAdj;
+ long ent = ((intptr_t) entry) - kZipEntryAdj;
if (ent < 0 || ent >= mHashTableSize || mHashTable[ent].name == NULL) {
ALOGW("Invalid ZipEntryRO %p (%ld)\n", entry, ent);
return -1;
@@ -320,6 +320,25 @@ bool ZipFileRO::mapCentralDirectory(void)
return true;
}
+
+/*
+ * Round up to the next highest power of 2.
+ *
+ * Found on http://graphics.stanford.edu/~seander/bithacks.html.
+ */
+static unsigned int roundUpPower2(unsigned int val)
+{
+ val--;
+ val |= val >> 1;
+ val |= val >> 2;
+ val |= val >> 4;
+ val |= val >> 8;
+ val |= val >> 16;
+ val++;
+
+ return val;
+}
+
bool ZipFileRO::parseZipArchive(void)
{
bool result = false;
@@ -459,7 +478,7 @@ ZipEntryRO ZipFileRO::findEntryByIndex(int idx) const
for (int ent = 0; ent < mHashTableSize; ent++) {
if (mHashTable[ent].name != NULL) {
if (idx-- == 0)
- return (ZipEntryRO) (ent + kZipEntryAdj);
+ return (ZipEntryRO) (intptr_t)(ent + kZipEntryAdj);
}
}