xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/7z/7zUpdate.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // 7zUpdate.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_7Z_UPDATE_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_7Z_UPDATE_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../IArchive.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker // #include "../../Common/UniqBlocks.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "7zCompressionMode.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "7zIn.h"
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker namespace NArchive {
14*f6dc9357SAndroid Build Coastguard Worker namespace N7z {
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker /*
17*f6dc9357SAndroid Build Coastguard Worker struct CTreeFolder
18*f6dc9357SAndroid Build Coastguard Worker {
19*f6dc9357SAndroid Build Coastguard Worker   UString Name;
20*f6dc9357SAndroid Build Coastguard Worker   int Parent;
21*f6dc9357SAndroid Build Coastguard Worker   CIntVector SubFolders;
22*f6dc9357SAndroid Build Coastguard Worker   int UpdateItemIndex;
23*f6dc9357SAndroid Build Coastguard Worker   int SortIndex;
24*f6dc9357SAndroid Build Coastguard Worker   int SortIndexEnd;
25*f6dc9357SAndroid Build Coastguard Worker 
26*f6dc9357SAndroid Build Coastguard Worker   CTreeFolder(): UpdateItemIndex(-1) {}
27*f6dc9357SAndroid Build Coastguard Worker };
28*f6dc9357SAndroid Build Coastguard Worker */
29*f6dc9357SAndroid Build Coastguard Worker 
30*f6dc9357SAndroid Build Coastguard Worker struct CUpdateItem
31*f6dc9357SAndroid Build Coastguard Worker {
32*f6dc9357SAndroid Build Coastguard Worker   int IndexInArchive;
33*f6dc9357SAndroid Build Coastguard Worker   unsigned IndexInClient;
34*f6dc9357SAndroid Build Coastguard Worker 
35*f6dc9357SAndroid Build Coastguard Worker   UInt64 CTime;
36*f6dc9357SAndroid Build Coastguard Worker   UInt64 ATime;
37*f6dc9357SAndroid Build Coastguard Worker   UInt64 MTime;
38*f6dc9357SAndroid Build Coastguard Worker 
39*f6dc9357SAndroid Build Coastguard Worker   UInt64 Size;
40*f6dc9357SAndroid Build Coastguard Worker   UString Name;
41*f6dc9357SAndroid Build Coastguard Worker   /*
42*f6dc9357SAndroid Build Coastguard Worker   bool IsAltStream;
43*f6dc9357SAndroid Build Coastguard Worker   int ParentFolderIndex;
44*f6dc9357SAndroid Build Coastguard Worker   int TreeFolderIndex;
45*f6dc9357SAndroid Build Coastguard Worker   */
46*f6dc9357SAndroid Build Coastguard Worker 
47*f6dc9357SAndroid Build Coastguard Worker   // that code is not used in 9.26
48*f6dc9357SAndroid Build Coastguard Worker   // int ParentSortIndex;
49*f6dc9357SAndroid Build Coastguard Worker   // int ParentSortIndexEnd;
50*f6dc9357SAndroid Build Coastguard Worker 
51*f6dc9357SAndroid Build Coastguard Worker   UInt32 Attrib;
52*f6dc9357SAndroid Build Coastguard Worker 
53*f6dc9357SAndroid Build Coastguard Worker   bool NewData;
54*f6dc9357SAndroid Build Coastguard Worker   bool NewProps;
55*f6dc9357SAndroid Build Coastguard Worker 
56*f6dc9357SAndroid Build Coastguard Worker   bool IsAnti;
57*f6dc9357SAndroid Build Coastguard Worker   bool IsDir;
58*f6dc9357SAndroid Build Coastguard Worker 
59*f6dc9357SAndroid Build Coastguard Worker   bool AttribDefined;
60*f6dc9357SAndroid Build Coastguard Worker   bool CTimeDefined;
61*f6dc9357SAndroid Build Coastguard Worker   bool ATimeDefined;
62*f6dc9357SAndroid Build Coastguard Worker   bool MTimeDefined;
63*f6dc9357SAndroid Build Coastguard Worker 
64*f6dc9357SAndroid Build Coastguard Worker   // bool ATime_WasReadByAnalysis;
65*f6dc9357SAndroid Build Coastguard Worker 
66*f6dc9357SAndroid Build Coastguard Worker   // int SecureIndex; // 0 means (no_security)
67*f6dc9357SAndroid Build Coastguard Worker 
HasStreamCUpdateItem68*f6dc9357SAndroid Build Coastguard Worker   bool HasStream() const { return !IsDir && !IsAnti && Size != 0; }
69*f6dc9357SAndroid Build Coastguard Worker   // bool HasStream() const { return !IsDir && !IsAnti /* && Size != 0 */; } // for test purposes
70*f6dc9357SAndroid Build Coastguard Worker 
CUpdateItemCUpdateItem71*f6dc9357SAndroid Build Coastguard Worker   CUpdateItem():
72*f6dc9357SAndroid Build Coastguard Worker       // ParentSortIndex(-1),
73*f6dc9357SAndroid Build Coastguard Worker       // IsAltStream(false),
74*f6dc9357SAndroid Build Coastguard Worker       IsAnti(false),
75*f6dc9357SAndroid Build Coastguard Worker       IsDir(false),
76*f6dc9357SAndroid Build Coastguard Worker       AttribDefined(false),
77*f6dc9357SAndroid Build Coastguard Worker       CTimeDefined(false),
78*f6dc9357SAndroid Build Coastguard Worker       ATimeDefined(false),
79*f6dc9357SAndroid Build Coastguard Worker       MTimeDefined(false)
80*f6dc9357SAndroid Build Coastguard Worker       // , ATime_WasReadByAnalysis(false)
81*f6dc9357SAndroid Build Coastguard Worker       // SecureIndex(0)
82*f6dc9357SAndroid Build Coastguard Worker       {}
SetDirStatusFromAttribCUpdateItem83*f6dc9357SAndroid Build Coastguard Worker   void SetDirStatusFromAttrib() { IsDir = ((Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0); }
84*f6dc9357SAndroid Build Coastguard Worker 
85*f6dc9357SAndroid Build Coastguard Worker   // unsigned GetExtensionPos() const;
86*f6dc9357SAndroid Build Coastguard Worker   // UString GetExtension() const;
87*f6dc9357SAndroid Build Coastguard Worker };
88*f6dc9357SAndroid Build Coastguard Worker 
89*f6dc9357SAndroid Build Coastguard Worker struct CUpdateOptions
90*f6dc9357SAndroid Build Coastguard Worker {
91*f6dc9357SAndroid Build Coastguard Worker   const CCompressionMethodMode *Method;
92*f6dc9357SAndroid Build Coastguard Worker   const CCompressionMethodMode *HeaderMethod;
93*f6dc9357SAndroid Build Coastguard Worker   bool UseFilters; // use additional filters for some files
94*f6dc9357SAndroid Build Coastguard Worker   bool MaxFilter;  // use BCJ2 filter instead of BCJ
95*f6dc9357SAndroid Build Coastguard Worker   int AnalysisLevel;
96*f6dc9357SAndroid Build Coastguard Worker 
97*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumSolidFiles;
98*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumSolidBytes;
99*f6dc9357SAndroid Build Coastguard Worker   bool SolidExtension;
100*f6dc9357SAndroid Build Coastguard Worker 
101*f6dc9357SAndroid Build Coastguard Worker   bool UseTypeSorting;
102*f6dc9357SAndroid Build Coastguard Worker 
103*f6dc9357SAndroid Build Coastguard Worker   bool RemoveSfxBlock;
104*f6dc9357SAndroid Build Coastguard Worker   bool MultiThreadMixer;
105*f6dc9357SAndroid Build Coastguard Worker 
106*f6dc9357SAndroid Build Coastguard Worker   bool Need_CTime;
107*f6dc9357SAndroid Build Coastguard Worker   bool Need_ATime;
108*f6dc9357SAndroid Build Coastguard Worker   bool Need_MTime;
109*f6dc9357SAndroid Build Coastguard Worker   bool Need_Attrib;
110*f6dc9357SAndroid Build Coastguard Worker   // bool Need_Crc;
111*f6dc9357SAndroid Build Coastguard Worker 
112*f6dc9357SAndroid Build Coastguard Worker   CHeaderOptions HeaderOptions;
113*f6dc9357SAndroid Build Coastguard Worker 
114*f6dc9357SAndroid Build Coastguard Worker   CUIntVector DisabledFilterIDs;
115*f6dc9357SAndroid Build Coastguard Worker 
Add_DisabledFilter_for_idCUpdateOptions116*f6dc9357SAndroid Build Coastguard Worker   void Add_DisabledFilter_for_id(UInt32 id,
117*f6dc9357SAndroid Build Coastguard Worker       const CUIntVector &enabledFilters)
118*f6dc9357SAndroid Build Coastguard Worker   {
119*f6dc9357SAndroid Build Coastguard Worker     if (enabledFilters.FindInSorted(id) < 0)
120*f6dc9357SAndroid Build Coastguard Worker       DisabledFilterIDs.AddToUniqueSorted(id);
121*f6dc9357SAndroid Build Coastguard Worker   }
122*f6dc9357SAndroid Build Coastguard Worker 
SetFilterSupporting_ver_enabled_disabledCUpdateOptions123*f6dc9357SAndroid Build Coastguard Worker   void SetFilterSupporting_ver_enabled_disabled(
124*f6dc9357SAndroid Build Coastguard Worker       UInt32 compatVer,
125*f6dc9357SAndroid Build Coastguard Worker       const CUIntVector &enabledFilters,
126*f6dc9357SAndroid Build Coastguard Worker       const CUIntVector &disabledFilters)
127*f6dc9357SAndroid Build Coastguard Worker   {
128*f6dc9357SAndroid Build Coastguard Worker     DisabledFilterIDs = disabledFilters;
129*f6dc9357SAndroid Build Coastguard Worker     if (compatVer < 2300) Add_DisabledFilter_for_id(k_ARM64, enabledFilters);
130*f6dc9357SAndroid Build Coastguard Worker     if (compatVer < 2402) Add_DisabledFilter_for_id(k_RISCV, enabledFilters);
131*f6dc9357SAndroid Build Coastguard Worker   }
132*f6dc9357SAndroid Build Coastguard Worker 
CUpdateOptionsCUpdateOptions133*f6dc9357SAndroid Build Coastguard Worker   CUpdateOptions():
134*f6dc9357SAndroid Build Coastguard Worker       Method(NULL),
135*f6dc9357SAndroid Build Coastguard Worker       HeaderMethod(NULL),
136*f6dc9357SAndroid Build Coastguard Worker       UseFilters(false),
137*f6dc9357SAndroid Build Coastguard Worker       MaxFilter(false),
138*f6dc9357SAndroid Build Coastguard Worker       AnalysisLevel(-1),
139*f6dc9357SAndroid Build Coastguard Worker       NumSolidFiles((UInt64)(Int64)(-1)),
140*f6dc9357SAndroid Build Coastguard Worker       NumSolidBytes((UInt64)(Int64)(-1)),
141*f6dc9357SAndroid Build Coastguard Worker       SolidExtension(false),
142*f6dc9357SAndroid Build Coastguard Worker       UseTypeSorting(true),
143*f6dc9357SAndroid Build Coastguard Worker       RemoveSfxBlock(false),
144*f6dc9357SAndroid Build Coastguard Worker       MultiThreadMixer(true),
145*f6dc9357SAndroid Build Coastguard Worker       Need_CTime(false),
146*f6dc9357SAndroid Build Coastguard Worker       Need_ATime(false),
147*f6dc9357SAndroid Build Coastguard Worker       Need_MTime(false),
148*f6dc9357SAndroid Build Coastguard Worker       Need_Attrib(false)
149*f6dc9357SAndroid Build Coastguard Worker       // , Need_Crc(true)
150*f6dc9357SAndroid Build Coastguard Worker   {
151*f6dc9357SAndroid Build Coastguard Worker     DisabledFilterIDs.Add(k_RISCV);
152*f6dc9357SAndroid Build Coastguard Worker   }
153*f6dc9357SAndroid Build Coastguard Worker };
154*f6dc9357SAndroid Build Coastguard Worker 
155*f6dc9357SAndroid Build Coastguard Worker HRESULT Update(
156*f6dc9357SAndroid Build Coastguard Worker     DECL_EXTERNAL_CODECS_LOC_VARS
157*f6dc9357SAndroid Build Coastguard Worker     IInStream *inStream,
158*f6dc9357SAndroid Build Coastguard Worker     const CDbEx *db,
159*f6dc9357SAndroid Build Coastguard Worker     CObjectVector<CUpdateItem> &updateItems,
160*f6dc9357SAndroid Build Coastguard Worker     // const CObjectVector<CTreeFolder> &treeFolders, // treeFolders[0] is root
161*f6dc9357SAndroid Build Coastguard Worker     // const CUniqBlocks &secureBlocks,
162*f6dc9357SAndroid Build Coastguard Worker     ISequentialOutStream *seqOutStream,
163*f6dc9357SAndroid Build Coastguard Worker     IArchiveUpdateCallback *updateCallback,
164*f6dc9357SAndroid Build Coastguard Worker     const CUpdateOptions &options);
165*f6dc9357SAndroid Build Coastguard Worker }}
166*f6dc9357SAndroid Build Coastguard Worker 
167*f6dc9357SAndroid Build Coastguard Worker #endif
168