am 4600dd05: ZipFileRO: Use precise widths for zip file types.
* commit '4600dd053dbdbd4b95f3b11057a1cc55b99f9c77': ZipFileRO: Use precise widths for zip file types.
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user