diff options
-rw-r--r-- | tools/zipalign/ZipFile.cpp | 103 | ||||
-rw-r--r-- | tools/zipalign/ZipFile.h | 18 |
2 files changed, 37 insertions, 84 deletions
diff --git a/tools/zipalign/ZipFile.cpp b/tools/zipalign/ZipFile.cpp index 98d02e061a..1b39902271 100644 --- a/tools/zipalign/ZipFile.cpp +++ b/tools/zipalign/ZipFile.cpp @@ -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"); + 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; - } 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; + 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); } - crc = longcrc; - - result = copyPartialFpToFp(mZipFp, inputFp, compressedLen, NULL); if (result != NO_ERROR) { - ALOGD("failed copying gzip data in\n"); + // 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. diff --git a/tools/zipalign/ZipFile.h b/tools/zipalign/ZipFile.h index b0bafe95b3..d5ace7c492 100644 --- a/tools/zipalign/ZipFile.h +++ b/tools/zipalign/ZipFile.h @@ -86,24 +86,10 @@ 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. * * If "ppEntry" is non-NULL, a pointer to the new entry will be returned. @@ -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); |