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