| /* | 
 |  * 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 |