| /* |
| * Copyright (C) 2006 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| // |
| // Class to rewrite zip file headers to remove dynamic timestamps. |
| // |
| #ifndef __LIBS_ZIPFILE_H |
| #define __LIBS_ZIPFILE_H |
| |
| #include <stdio.h> |
| |
| #include "ZipEntry.h" |
| |
| namespace android { |
| |
| /* |
| * Manipulate a Zip archive. |
| */ |
| class ZipFile { |
| public: |
| ZipFile(void) : mZipFp(NULL) {} |
| ~ZipFile(void) { |
| if (mZipFp != NULL) |
| fclose(mZipFp); |
| } |
| |
| /* |
| * Rewrite an archive's headers to remove dynamic timestamps. |
| */ |
| status_t rewrite(const char* zipFileName); |
| |
| private: |
| /* these are private and not defined */ |
| ZipFile(const ZipFile& src); |
| ZipFile& operator=(const ZipFile& src); |
| |
| class EndOfCentralDir { |
| public: |
| EndOfCentralDir(void) : mTotalNumEntries(0), mCentralDirOffset(0) {} |
| |
| status_t readBuf(const uint8_t* buf, int len); |
| |
| uint16_t mTotalNumEntries; |
| uint32_t mCentralDirOffset; // offset from first disk |
| |
| enum { |
| kSignature = 0x06054b50, |
| kEOCDLen = 22, // EndOfCentralDir len, excl. comment |
| |
| kMaxCommentLen = 65535, // longest possible in ushort |
| kMaxEOCDSearch = kMaxCommentLen + EndOfCentralDir::kEOCDLen, |
| |
| }; |
| }; |
| |
| /* read all entries in the central dir */ |
| status_t rewriteCentralDir(void); |
| |
| /* |
| * We use stdio FILE*, which gives us buffering but makes dealing |
| * with files >2GB awkward. Until we support Zip64, we're fine. |
| */ |
| FILE* mZipFp; // Zip file pointer |
| |
| /* one of these per file */ |
| EndOfCentralDir mEOCD; |
| }; |
| |
| }; // namespace android |
| |
| #endif // __LIBS_ZIPFILE_H |