1*86ee64e7SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors 2*86ee64e7SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*86ee64e7SAndroid Build Coastguard Worker // found in the LICENSE file. 4*86ee64e7SAndroid Build Coastguard Worker 5*86ee64e7SAndroid Build Coastguard Worker #ifndef THIRD_PARTY_ZLIB_GOOGLE_ZIP_INTERNAL_H_ 6*86ee64e7SAndroid Build Coastguard Worker #define THIRD_PARTY_ZLIB_GOOGLE_ZIP_INTERNAL_H_ 7*86ee64e7SAndroid Build Coastguard Worker 8*86ee64e7SAndroid Build Coastguard Worker #include <string> 9*86ee64e7SAndroid Build Coastguard Worker 10*86ee64e7SAndroid Build Coastguard Worker #include "base/time/time.h" 11*86ee64e7SAndroid Build Coastguard Worker #include "build/build_config.h" 12*86ee64e7SAndroid Build Coastguard Worker 13*86ee64e7SAndroid Build Coastguard Worker #if defined(OS_WIN) 14*86ee64e7SAndroid Build Coastguard Worker #include <windows.h> 15*86ee64e7SAndroid Build Coastguard Worker #endif 16*86ee64e7SAndroid Build Coastguard Worker 17*86ee64e7SAndroid Build Coastguard Worker #if defined(USE_SYSTEM_MINIZIP) 18*86ee64e7SAndroid Build Coastguard Worker #include <minizip/unzip.h> 19*86ee64e7SAndroid Build Coastguard Worker #include <minizip/zip.h> 20*86ee64e7SAndroid Build Coastguard Worker #else 21*86ee64e7SAndroid Build Coastguard Worker #include "third_party/zlib/contrib/minizip/unzip.h" 22*86ee64e7SAndroid Build Coastguard Worker #include "third_party/zlib/contrib/minizip/zip.h" 23*86ee64e7SAndroid Build Coastguard Worker #endif 24*86ee64e7SAndroid Build Coastguard Worker 25*86ee64e7SAndroid Build Coastguard Worker namespace base { 26*86ee64e7SAndroid Build Coastguard Worker class FilePath; 27*86ee64e7SAndroid Build Coastguard Worker } 28*86ee64e7SAndroid Build Coastguard Worker 29*86ee64e7SAndroid Build Coastguard Worker // Utility functions and constants used internally for the zip file 30*86ee64e7SAndroid Build Coastguard Worker // library in the directory. Don't use them outside of the library. 31*86ee64e7SAndroid Build Coastguard Worker namespace zip { 32*86ee64e7SAndroid Build Coastguard Worker namespace internal { 33*86ee64e7SAndroid Build Coastguard Worker 34*86ee64e7SAndroid Build Coastguard Worker // Opens the given file name in UTF-8 for unzipping, with some setup for 35*86ee64e7SAndroid Build Coastguard Worker // Windows. 36*86ee64e7SAndroid Build Coastguard Worker unzFile OpenForUnzipping(const std::string& file_name_utf8); 37*86ee64e7SAndroid Build Coastguard Worker 38*86ee64e7SAndroid Build Coastguard Worker #if defined(OS_POSIX) || defined(OS_FUCHSIA) 39*86ee64e7SAndroid Build Coastguard Worker // Opens the file referred to by |zip_fd| for unzipping. 40*86ee64e7SAndroid Build Coastguard Worker unzFile OpenFdForUnzipping(int zip_fd); 41*86ee64e7SAndroid Build Coastguard Worker #endif 42*86ee64e7SAndroid Build Coastguard Worker 43*86ee64e7SAndroid Build Coastguard Worker #if defined(OS_WIN) 44*86ee64e7SAndroid Build Coastguard Worker // Opens the file referred to by |zip_handle| for unzipping. 45*86ee64e7SAndroid Build Coastguard Worker unzFile OpenHandleForUnzipping(HANDLE zip_handle); 46*86ee64e7SAndroid Build Coastguard Worker #endif 47*86ee64e7SAndroid Build Coastguard Worker 48*86ee64e7SAndroid Build Coastguard Worker // Creates a custom unzFile object which reads data from the specified string. 49*86ee64e7SAndroid Build Coastguard Worker // This custom unzFile object overrides the I/O API functions of zlib so it can 50*86ee64e7SAndroid Build Coastguard Worker // read data from the specified string. 51*86ee64e7SAndroid Build Coastguard Worker unzFile PrepareMemoryForUnzipping(const std::string& data); 52*86ee64e7SAndroid Build Coastguard Worker 53*86ee64e7SAndroid Build Coastguard Worker // Opens the given file name in UTF-8 for zipping, with some setup for 54*86ee64e7SAndroid Build Coastguard Worker // Windows. |append_flag| will be passed to zipOpen2(). 55*86ee64e7SAndroid Build Coastguard Worker zipFile OpenForZipping(const std::string& file_name_utf8, int append_flag); 56*86ee64e7SAndroid Build Coastguard Worker 57*86ee64e7SAndroid Build Coastguard Worker #if defined(OS_POSIX) || defined(OS_FUCHSIA) 58*86ee64e7SAndroid Build Coastguard Worker // Opens the file referred to by |zip_fd| for zipping. |append_flag| will be 59*86ee64e7SAndroid Build Coastguard Worker // passed to zipOpen2(). 60*86ee64e7SAndroid Build Coastguard Worker zipFile OpenFdForZipping(int zip_fd, int append_flag); 61*86ee64e7SAndroid Build Coastguard Worker #endif 62*86ee64e7SAndroid Build Coastguard Worker 63*86ee64e7SAndroid Build Coastguard Worker // Compression methods. 64*86ee64e7SAndroid Build Coastguard Worker enum Compression { 65*86ee64e7SAndroid Build Coastguard Worker kStored = 0, // Stored (no compression) 66*86ee64e7SAndroid Build Coastguard Worker kDeflated = Z_DEFLATED, // Deflated 67*86ee64e7SAndroid Build Coastguard Worker }; 68*86ee64e7SAndroid Build Coastguard Worker 69*86ee64e7SAndroid Build Coastguard Worker // Adds a file (or directory) entry to the ZIP archive. 70*86ee64e7SAndroid Build Coastguard Worker bool ZipOpenNewFileInZip(zipFile zip_file, 71*86ee64e7SAndroid Build Coastguard Worker const std::string& str_path, 72*86ee64e7SAndroid Build Coastguard Worker base::Time last_modified_time, 73*86ee64e7SAndroid Build Coastguard Worker Compression compression); 74*86ee64e7SAndroid Build Coastguard Worker 75*86ee64e7SAndroid Build Coastguard Worker // Selects the best compression method for the given file. The heuristic is 76*86ee64e7SAndroid Build Coastguard Worker // based on the filename extension. By default, the compression method is 77*86ee64e7SAndroid Build Coastguard Worker // kDeflated. But if the given path has an extension indicating a well known 78*86ee64e7SAndroid Build Coastguard Worker // file format which is likely to be already compressed (eg ZIP, RAR, JPG, 79*86ee64e7SAndroid Build Coastguard Worker // PNG...) then the compression method is simply kStored. 80*86ee64e7SAndroid Build Coastguard Worker Compression GetCompressionMethod(const base::FilePath& path); 81*86ee64e7SAndroid Build Coastguard Worker 82*86ee64e7SAndroid Build Coastguard Worker const int kZipMaxPath = 256; 83*86ee64e7SAndroid Build Coastguard Worker const int kZipBufSize = 8192; 84*86ee64e7SAndroid Build Coastguard Worker 85*86ee64e7SAndroid Build Coastguard Worker } // namespace internal 86*86ee64e7SAndroid Build Coastguard Worker } // namespace zip 87*86ee64e7SAndroid Build Coastguard Worker 88*86ee64e7SAndroid Build Coastguard Worker #endif // THIRD_PARTY_ZLIB_GOOGLE_ZIP_INTERNAL_H_ 89