1 // 7zUpdate.h
2 
3 #ifndef __7Z_UPDATE_H
4 #define __7Z_UPDATE_H
5 
6 #include "../IArchive.h"
7 
8 // #include "../../Common/UniqBlocks.h"
9 
10 #include "7zCompressionMode.h"
11 #include "7zIn.h"
12 #include "7zOut.h"
13 
14 namespace NArchive {
15 namespace N7z {
16 
17 /*
18 struct CTreeFolder
19 {
20   UString Name;
21   int Parent;
22   CIntVector SubFolders;
23   int UpdateItemIndex;
24   int SortIndex;
25   int SortIndexEnd;
26 
27   CTreeFolder(): UpdateItemIndex(-1) {}
28 };
29 */
30 
31 struct CUpdateItem
32 {
33   int IndexInArchive;
34   int IndexInClient;
35 
36   UInt64 CTime;
37   UInt64 ATime;
38   UInt64 MTime;
39 
40   UInt64 Size;
41   UString Name;
42   /*
43   bool IsAltStream;
44   int ParentFolderIndex;
45   int TreeFolderIndex;
46   */
47 
48   // that code is not used in 9.26
49   // int ParentSortIndex;
50   // int ParentSortIndexEnd;
51 
52   UInt32 Attrib;
53 
54   bool NewData;
55   bool NewProps;
56 
57   bool IsAnti;
58   bool IsDir;
59 
60   bool AttribDefined;
61   bool CTimeDefined;
62   bool ATimeDefined;
63   bool MTimeDefined;
64 
65   // int SecureIndex; // 0 means (no_security)
66 
HasStreamCUpdateItem67   bool HasStream() const { return !IsDir && !IsAnti && Size != 0; }
68 
CUpdateItemCUpdateItem69   CUpdateItem():
70       // ParentSortIndex(-1),
71       // IsAltStream(false),
72       IsAnti(false),
73       IsDir(false),
74       AttribDefined(false),
75       CTimeDefined(false),
76       ATimeDefined(false),
77       MTimeDefined(false)
78       // SecureIndex(0)
79       {}
SetDirStatusFromAttribCUpdateItem80   void SetDirStatusFromAttrib() { IsDir = ((Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0); };
81 
82   int GetExtensionPos() const;
83   UString GetExtension() const;
84 };
85 
86 struct CUpdateOptions
87 {
88   const CCompressionMethodMode *Method;
89   const CCompressionMethodMode *HeaderMethod;
90   bool UseFilters;
91   bool MaxFilter;
92 
93   CHeaderOptions HeaderOptions;
94 
95   UInt64 NumSolidFiles;
96   UInt64 NumSolidBytes;
97   bool SolidExtension;
98   bool RemoveSfxBlock;
99   bool VolumeMode;
100 };
101 
102 HRESULT Update(
103     DECL_EXTERNAL_CODECS_LOC_VARS
104     IInStream *inStream,
105     const CDbEx *db,
106     const CObjectVector<CUpdateItem> &updateItems,
107     // const CObjectVector<CTreeFolder> &treeFolders, // treeFolders[0] is root
108     // const CUniqBlocks &secureBlocks,
109     COutArchive &archive,
110     CArchiveDatabaseOut &newDatabase,
111     ISequentialOutStream *seqOutStream,
112     IArchiveUpdateCallback *updateCallback,
113     const CUpdateOptions &options
114     #ifndef _NO_CRYPTO
115     , ICryptoGetTextPassword *getDecoderPassword
116     #endif
117     );
118 }}
119 
120 #endif
121