diff options
-rw-r--r-- | cmds/bootanimation/BootAnimation.cpp | 2 | ||||
-rw-r--r-- | cmds/idmap/create.cpp | 2 | ||||
-rw-r--r-- | cmds/idmap/scan.cpp | 13 | ||||
-rw-r--r-- | core/jni/com_android_internal_content_NativeLibraryHelper.cpp | 27 | ||||
-rw-r--r-- | include/androidfw/Asset.h | 7 | ||||
-rw-r--r-- | include/androidfw/ZipFileRO.h | 16 | ||||
-rw-r--r-- | include/androidfw/ZipUtils.h | 5 | ||||
-rw-r--r-- | libs/androidfw/Asset.cpp | 12 | ||||
-rw-r--r-- | libs/androidfw/AssetManager.cpp | 10 | ||||
-rw-r--r-- | libs/androidfw/ZipFileRO.cpp | 7 |
10 files changed, 49 insertions, 52 deletions
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp index 21dc1e2..fba462b 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -530,7 +530,7 @@ bool BootAnimation::movie() if (leaf.size() > 0) { for (size_t j=0 ; j<pcount ; j++) { if (path == animation.parts[j].path) { - int method; + uint16_t method; // supports only stored png files if (mZip->getEntryInfo(entry, &method, NULL, NULL, NULL, NULL, NULL)) { if (method == ZipFileRO::kCompressStored) { diff --git a/cmds/idmap/create.cpp b/cmds/idmap/create.cpp index 16532b8..41395f1 100644 --- a/cmds/idmap/create.cpp +++ b/cmds/idmap/create.cpp @@ -23,7 +23,7 @@ namespace { if (entry == NULL) { return -1; } - if (!zip->getEntryInfo(entry, NULL, NULL, NULL, NULL, NULL, reinterpret_cast<long*>(crc))) { + if (!zip->getEntryInfo(entry, NULL, NULL, NULL, NULL, NULL, crc)) { return -1; } zip->releaseEntry(entry); diff --git a/cmds/idmap/scan.cpp b/cmds/idmap/scan.cpp index 84158d3..612a7eb 100644 --- a/cmds/idmap/scan.cpp +++ b/cmds/idmap/scan.cpp @@ -1,4 +1,5 @@ #include <dirent.h> +#include <inttypes.h> #include <sys/stat.h> #include "idmap.h" @@ -130,14 +131,14 @@ namespace { ALOGW("%s: failed to find entry AndroidManifest.xml\n", __FUNCTION__); return -1; } - size_t uncompLen = 0; - int method; + uint32_t uncompLen = 0; + uint16_t method; if (!zip->getEntryInfo(entry, &method, &uncompLen, NULL, NULL, NULL, NULL)) { ALOGW("%s: failed to read entry info\n", __FUNCTION__); return -1; } if (method != ZipFileRO::kCompressDeflated) { - ALOGW("%s: cannot handle zip compression method %d\n", __FUNCTION__, method); + ALOGW("%s: cannot handle zip compression method %" PRIu16 "\n", __FUNCTION__, method); return -1; } FileMap *dataMap = zip->createEntryFileMap(entry); @@ -147,19 +148,19 @@ namespace { } char *buf = new char[uncompLen]; if (NULL == buf) { - ALOGW("%s: failed to allocate %zd byte\n", __FUNCTION__, uncompLen); + ALOGW("%s: failed to allocate %" PRIu32 " byte\n", __FUNCTION__, uncompLen); delete dataMap; return -1; } StreamingZipInflater inflater(dataMap, uncompLen); if (inflater.read(buf, uncompLen) < 0) { - ALOGW("%s: failed to inflate %zd byte\n", __FUNCTION__, uncompLen); + ALOGW("%s: failed to inflate %" PRIu32 " byte\n", __FUNCTION__, uncompLen); delete[] buf; delete dataMap; return -1; } - int priority = parse_manifest(buf, uncompLen, target_package_name); + int priority = parse_manifest(buf, static_cast<size_t>(uncompLen), target_package_name); delete[] buf; delete dataMap; return priority; diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp index 9307ff9..a526223 100644 --- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp +++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp @@ -105,8 +105,8 @@ isFilenameSafe(const char* filename) } static bool -isFileDifferent(const char* filePath, size_t fileSize, time_t modifiedTime, - long zipCrc, struct stat64* st) +isFileDifferent(const char* filePath, uint32_t fileSize, time_t modifiedTime, + uint32_t zipCrc, struct stat64* st) { if (lstat64(filePath, st) < 0) { // File is not found or cannot be read. @@ -134,7 +134,9 @@ isFileDifferent(const char* filePath, size_t fileSize, time_t modifiedTime, return true; } - long crc = crc32(0L, Z_NULL, 0); + // uLong comes from zlib.h. It's a bit of a wart that they're + // potentially using a 64-bit type for a 32-bit CRC. + uLong crc = crc32(0L, Z_NULL, 0); unsigned char crcBuffer[16384]; ssize_t numBytes; while ((numBytes = TEMP_FAILURE_RETRY(read(fd, crcBuffer, sizeof(crcBuffer)))) > 0) { @@ -142,9 +144,9 @@ isFileDifferent(const char* filePath, size_t fileSize, time_t modifiedTime, } close(fd); - ALOGV("%s: crc = %lx, zipCrc = %lx\n", filePath, crc, zipCrc); + ALOGV("%s: crc = %lx, zipCrc = %" PRIu32 "\n", filePath, crc, zipCrc); - if (crc != zipCrc) { + if (crc != static_cast<uLong>(zipCrc)) { return true; } @@ -155,13 +157,13 @@ static install_status_t sumFiles(JNIEnv*, void* arg, ZipFileRO* zipFile, ZipEntryRO zipEntry, const char*) { size_t* total = (size_t*) arg; - size_t uncompLen; + uint32_t uncompLen; if (!zipFile->getEntryInfo(zipEntry, NULL, &uncompLen, NULL, NULL, NULL, NULL)) { return INSTALL_FAILED_INVALID_APK; } - *total += uncompLen; + *total += static_cast<size_t>(uncompLen); return INSTALL_SUCCEEDED; } @@ -181,12 +183,11 @@ copyFileIfChanged(JNIEnv *env, void* arg, ZipFileRO* zipFile, ZipEntryRO zipEntr ScopedUtfChars nativeLibPath(env, *javaNativeLibPath); - size_t uncompLen; - long when; - long crc; - time_t modTime; + uint32_t uncompLen; + uint32_t when; + uint32_t crc; - int method; + uint16_t method; off64_t offset; if (!zipFile->getEntryInfo(zipEntry, &method, &uncompLen, NULL, &offset, &when, &crc)) { @@ -233,7 +234,7 @@ copyFileIfChanged(JNIEnv *env, void* arg, ZipFileRO* zipFile, ZipEntryRO zipEntr // Only copy out the native file if it's different. struct tm t; ZipUtils::zipTimeToTimespec(when, &t); - modTime = mktime(&t); + const time_t modTime = mktime(&t); struct stat64 st; if (!isFileDifferent(localFileName, uncompLen, modTime, crc, &st)) { return INSTALL_SUCCEEDED; diff --git a/include/androidfw/Asset.h b/include/androidfw/Asset.h index 1fe0e06..ee77e97 100644 --- a/include/androidfw/Asset.h +++ b/include/androidfw/Asset.h @@ -182,11 +182,11 @@ private: /* * Create the asset from a memory-mapped file segment with compressed - * data. "method" is a Zip archive compression method constant. + * data. * * The asset takes ownership of the FileMap. */ - static Asset* createFromCompressedMap(FileMap* dataMap, int method, + static Asset* createFromCompressedMap(FileMap* dataMap, size_t uncompressedLen, AccessMode mode); @@ -286,8 +286,7 @@ public: * * On success, the object takes ownership of "fd". */ - status_t openChunk(FileMap* dataMap, int compressionMethod, - size_t uncompressedLen); + status_t openChunk(FileMap* dataMap, size_t uncompressedLen); /* * Standard Asset interfaces. diff --git a/include/androidfw/ZipFileRO.h b/include/androidfw/ZipFileRO.h index ad5be12..1410d87 100644 --- a/include/androidfw/ZipFileRO.h +++ b/include/androidfw/ZipFileRO.h @@ -35,6 +35,7 @@ #include <utils/FileMap.h> #include <utils/threads.h> +#include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -68,9 +69,9 @@ typedef void* ZipEntryRO; class ZipFileRO { public: /* Zip compression methods we support */ - enum { - kCompressStored = 0, // no compression - kCompressDeflated = 8, // standard deflate + enum : uint16_t { + kCompressStored = 0, + kCompressDeflated = 8 }; /* @@ -108,10 +109,10 @@ public: /* * Copy the filename into the supplied buffer. Returns 0 on success, - * -1 if "entry" is invalid, or the filename length if it didn't fit. The + * -1 if "entry" is invalid, or the filename length if it didn't fit. The * length, and the returned string, include the null-termination. */ - int getEntryFileName(ZipEntryRO entry, char* buffer, int bufLen) const; + int getEntryFileName(ZipEntryRO entry, char* buffer, size_t bufLen) const; /* * Get the vital stats for an entry. Pass in NULL pointers for anything @@ -122,8 +123,9 @@ public: * Returns "false" if "entry" is bogus or if the data in the Zip file * appears to be bad. */ - bool getEntryInfo(ZipEntryRO entry, int* pMethod, size_t* pUncompLen, - size_t* pCompLen, off64_t* pOffset, long* pModWhen, long* pCrc32) const; + bool getEntryInfo(ZipEntryRO entry, uint16_t* pMethod, uint32_t* pUncompLen, + uint32_t* pCompLen, off64_t* pOffset, uint32_t* pModWhen, + uint32_t* pCrc32) const; /* * Create a new FileMap object that maps a subset of the archive. For diff --git a/include/androidfw/ZipUtils.h b/include/androidfw/ZipUtils.h index 6bea25a..094eaa8 100644 --- a/include/androidfw/ZipUtils.h +++ b/include/androidfw/ZipUtils.h @@ -20,6 +20,7 @@ #ifndef __LIBS_ZIPUTILS_H #define __LIBS_ZIPUTILS_H +#include <stdint.h> #include <stdio.h> #include <time.h> @@ -63,8 +64,8 @@ public: /* * Utility function to convert ZIP's time format to a timespec struct. */ - static inline void zipTimeToTimespec(long when, struct tm* timespec) { - const long date = when >> 16; + static inline void zipTimeToTimespec(uint32_t when, struct tm* timespec) { + const uint32_t date = when >> 16; timespec->tm_year = ((date >> 9) & 0x7F) + 80; // Zip is years since 1980 timespec->tm_mon = (date >> 5) & 0x0F; timespec->tm_mday = date & 0x1F; diff --git a/libs/androidfw/Asset.cpp b/libs/androidfw/Asset.cpp index 782806e..4e14b13 100644 --- a/libs/androidfw/Asset.cpp +++ b/libs/androidfw/Asset.cpp @@ -296,13 +296,13 @@ Asset::~Asset(void) * Create a new Asset from compressed data in a memory mapping. */ /*static*/ Asset* Asset::createFromCompressedMap(FileMap* dataMap, - int method, size_t uncompressedLen, AccessMode mode) + size_t uncompressedLen, AccessMode mode) { _CompressedAsset* pAsset; status_t result; pAsset = new _CompressedAsset; - result = pAsset->openChunk(dataMap, method, uncompressedLen); + result = pAsset->openChunk(dataMap, uncompressedLen); if (result != NO_ERROR) return NULL; @@ -734,18 +734,12 @@ status_t _CompressedAsset::openChunk(int fd, off64_t offset, * * Nothing is expanded until the first read call. */ -status_t _CompressedAsset::openChunk(FileMap* dataMap, int compressionMethod, - size_t uncompressedLen) +status_t _CompressedAsset::openChunk(FileMap* dataMap, size_t uncompressedLen) { assert(mFd < 0); // no re-open assert(mMap == NULL); assert(dataMap != NULL); - if (compressionMethod != ZipFileRO::kCompressDeflated) { - assert(false); - return UNKNOWN_ERROR; - } - mMap = dataMap; mStart = -1; // not used mCompressedLen = dataMap->getDataLength(); diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp index 25cd363..2dc1c96 100644 --- a/libs/androidfw/AssetManager.cpp +++ b/libs/androidfw/AssetManager.cpp @@ -1156,13 +1156,11 @@ Asset* AssetManager::openAssetFromZipLocked(const ZipFileRO* pZipFile, Asset* pAsset = NULL; // TODO: look for previously-created shared memory slice? - int method; - size_t uncompressedLen; + uint16_t method; + uint32_t uncompressedLen; //printf("USING Zip '%s'\n", pEntry->getFileName()); - //pZipFile->getEntryInfo(entry, &method, &uncompressedLen, &compressedLen, - // &offset); if (!pZipFile->getEntryInfo(entry, &method, &uncompressedLen, NULL, NULL, NULL, NULL)) { @@ -1181,8 +1179,8 @@ Asset* AssetManager::openAssetFromZipLocked(const ZipFileRO* pZipFile, ALOGV("Opened uncompressed entry %s in zip %s mode %d: %p", entryName.string(), dataMap->getFileName(), mode, pAsset); } else { - pAsset = Asset::createFromCompressedMap(dataMap, method, - uncompressedLen, mode); + pAsset = Asset::createFromCompressedMap(dataMap, + static_cast<size_t>(uncompressedLen), mode); ALOGV("Opened compressed entry %s in zip %s mode %d: %p", entryName.string(), dataMap->getFileName(), mode, pAsset); } diff --git a/libs/androidfw/ZipFileRO.cpp b/libs/androidfw/ZipFileRO.cpp index 93b1d56..6f927b4 100644 --- a/libs/androidfw/ZipFileRO.cpp +++ b/libs/androidfw/ZipFileRO.cpp @@ -97,8 +97,9 @@ ZipEntryRO ZipFileRO::findEntryByName(const char* entryName) const * Returns "false" if the offsets to the fields or the contents of the fields * appear to be bogus. */ -bool ZipFileRO::getEntryInfo(ZipEntryRO entry, int* pMethod, size_t* pUncompLen, - size_t* pCompLen, off64_t* pOffset, long* pModWhen, long* pCrc32) const +bool ZipFileRO::getEntryInfo(ZipEntryRO entry, uint16_t* pMethod, + uint32_t* pUncompLen, uint32_t* pCompLen, off64_t* pOffset, + uint32_t* pModWhen, uint32_t* pCrc32) const { const _ZipEntryRO* zipEntry = reinterpret_cast<_ZipEntryRO*>(entry); const ZipEntry& ze = zipEntry->entry; @@ -166,7 +167,7 @@ void ZipFileRO::releaseEntry(ZipEntryRO entry) const /* * Copy the entry's filename to the buffer. */ -int ZipFileRO::getEntryFileName(ZipEntryRO entry, char* buffer, int bufLen) +int ZipFileRO::getEntryFileName(ZipEntryRO entry, char* buffer, size_t bufLen) const { const _ZipEntryRO* zipEntry = reinterpret_cast<_ZipEntryRO*>(entry); |