Merge "zipalign: remove support for adding members from gzip sources." am: 96a4bdd9a6

am: 080f68acf5

Change-Id: I8c8eb0405255df42a302406c68b3d702b85e0ead
This commit is contained in:
Narayan Kamath 2017-02-17 14:19:51 +00:00 committed by android-build-merger
commit 8778583000
2 changed files with 42 additions and 89 deletions

View File

@ -359,8 +359,7 @@ bail:
* safely written. Not really a concern for us.
*/
status_t ZipFile::addCommon(const char* fileName, const void* data, size_t size,
const char* storageName, int sourceType, int compressionMethod,
ZipEntry** ppEntry)
const char* storageName, int compressionMethod, ZipEntry** ppEntry)
{
ZipEntry* pEntry = NULL;
status_t result = NO_ERROR;
@ -414,81 +413,51 @@ status_t ZipFile::addCommon(const char* fileName, const void* data, size_t size,
/*
* Copy the data in, possibly compressing it as we go.
*/
if (sourceType == ZipEntry::kCompressStored) {
if (compressionMethod == ZipEntry::kCompressDeflated) {
bool failed = false;
result = compressFpToFp(mZipFp, inputFp, data, size, &crc);
if (result != NO_ERROR) {
ALOGD("compression failed, storing\n");
failed = true;
} else {
/*
* Make sure it has compressed "enough". This probably ought
* to be set through an API call, but I don't expect our
* criteria to change over time.
*/
long src = inputFp ? ftell(inputFp) : size;
long dst = ftell(mZipFp) - startPosn;
if (dst + (dst / 10) > src) {
ALOGD("insufficient compression (src=%ld dst=%ld), storing\n",
src, dst);
failed = true;
}
}
if (failed) {
compressionMethod = ZipEntry::kCompressStored;
if (inputFp) rewind(inputFp);
fseek(mZipFp, startPosn, SEEK_SET);
/* fall through to kCompressStored case */
}
}
/* handle "no compression" request, or failed compression from above */
if (compressionMethod == ZipEntry::kCompressStored) {
if (inputFp) {
result = copyFpToFp(mZipFp, inputFp, &crc);
} else {
result = copyDataToFp(mZipFp, data, size, &crc);
}
if (result != NO_ERROR) {
// don't need to truncate; happens in CDE rewrite
ALOGD("failed copying data in\n");
goto bail;
}
}
// currently seeked to end of file
uncompressedLen = inputFp ? ftell(inputFp) : size;
} else if (sourceType == ZipEntry::kCompressDeflated) {
/* we should support uncompressed-from-compressed, but it's not
* important right now */
assert(compressionMethod == ZipEntry::kCompressDeflated);
bool scanResult;
int method;
long compressedLen;
unsigned long longcrc;
scanResult = ZipUtils::examineGzip(inputFp, &method, &uncompressedLen,
&compressedLen, &longcrc);
if (!scanResult || method != ZipEntry::kCompressDeflated) {
ALOGD("this isn't a deflated gzip file?");
result = UNKNOWN_ERROR;
goto bail;
}
crc = longcrc;
result = copyPartialFpToFp(mZipFp, inputFp, compressedLen, NULL);
if (compressionMethod == ZipEntry::kCompressDeflated) {
bool failed = false;
result = compressFpToFp(mZipFp, inputFp, data, size, &crc);
if (result != NO_ERROR) {
ALOGD("failed copying gzip data in\n");
ALOGD("compression failed, storing\n");
failed = true;
} else {
/*
* Make sure it has compressed "enough". This probably ought
* to be set through an API call, but I don't expect our
* criteria to change over time.
*/
long src = inputFp ? ftell(inputFp) : size;
long dst = ftell(mZipFp) - startPosn;
if (dst + (dst / 10) > src) {
ALOGD("insufficient compression (src=%ld dst=%ld), storing\n",
src, dst);
failed = true;
}
}
if (failed) {
compressionMethod = ZipEntry::kCompressStored;
if (inputFp) rewind(inputFp);
fseek(mZipFp, startPosn, SEEK_SET);
/* fall through to kCompressStored case */
}
}
/* handle "no compression" request, or failed compression from above */
if (compressionMethod == ZipEntry::kCompressStored) {
if (inputFp) {
result = copyFpToFp(mZipFp, inputFp, &crc);
} else {
result = copyDataToFp(mZipFp, data, size, &crc);
}
if (result != NO_ERROR) {
// don't need to truncate; happens in CDE rewrite
ALOGD("failed copying data in\n");
goto bail;
}
} else {
assert(false);
result = UNKNOWN_ERROR;
goto bail;
}
// currently seeked to end of file
uncompressedLen = inputFp ? ftell(inputFp) : size;
/*
* We could write the "Data Descriptor", but there doesn't seem to
* be any point since we're going to go back and write the LFH.

View File

@ -86,23 +86,9 @@ public:
int compressionMethod, ZipEntry** ppEntry)
{
return addCommon(fileName, NULL, 0, storageName,
ZipEntry::kCompressStored,
compressionMethod, ppEntry);
}
/*
* Add a file that is already compressed with gzip.
*
* If "ppEntry" is non-NULL, a pointer to the new entry will be returned.
*/
status_t addGzip(const char* fileName, const char* storageName,
ZipEntry** ppEntry)
{
return addCommon(fileName, NULL, 0, storageName,
ZipEntry::kCompressDeflated,
ZipEntry::kCompressDeflated, ppEntry);
}
/*
* Add a file from an in-memory data buffer.
*
@ -112,7 +98,6 @@ public:
int compressionMethod, ZipEntry** ppEntry)
{
return addCommon(NULL, data, size, storageName,
ZipEntry::kCompressStored,
compressionMethod, ppEntry);
}
@ -231,8 +216,7 @@ private:
/* common handler for all "add" functions */
status_t addCommon(const char* fileName, const void* data, size_t size,
const char* storageName, int sourceType, int compressionMethod,
ZipEntry** ppEntry);
const char* storageName, int compressionMethod, ZipEntry** ppEntry);
/* copy all of "srcFp" into "dstFp" */
status_t copyFpToFp(FILE* dstFp, FILE* srcFp, uint32_t* pCRC32);