xref: /aosp_15_r20/external/zlib/google/zip_internal.h (revision 86ee64e75fa5f8bce2c8c356138035642429cd05)
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