1 // 7zUpdate.h
2 
3 #ifndef __7Z_UPDATE_H
4 #define __7Z_UPDATE_H
5 
6 #include "7zCompressionMode.h"
7 #include "7zIn.h"
8 #include "7zOut.h"
9 
10 #include "../IArchive.h"
11 
12 namespace NArchive {
13 namespace N7z {
14 
15 struct CUpdateItem
16 {
17   int IndexInArchive;
18   int IndexInClient;
19 
20   UInt64 CTime;
21   UInt64 ATime;
22   UInt64 MTime;
23 
24   UInt64 Size;
25   UString Name;
26 
27   UInt32 Attrib;
28 
29   bool NewData;
30   bool NewProps;
31 
32   bool IsAnti;
33   bool IsDir;
34 
35   bool AttribDefined;
36   bool CTimeDefined;
37   bool ATimeDefined;
38   bool MTimeDefined;
39 
HasStreamCUpdateItem40   bool HasStream() const { return !IsDir && !IsAnti && Size != 0; }
41 
CUpdateItemCUpdateItem42   CUpdateItem():
43       IsAnti(false),
44       IsDir(false),
45       AttribDefined(false),
46       CTimeDefined(false),
47       ATimeDefined(false),
48       MTimeDefined(false)
49       {}
SetDirStatusFromAttribCUpdateItem50   void SetDirStatusFromAttrib() { IsDir = ((Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0); };
51 
52   int GetExtensionPos() const;
53   UString GetExtension() const;
54 };
55 
56 struct CUpdateOptions
57 {
58   const CCompressionMethodMode *Method;
59   const CCompressionMethodMode *HeaderMethod;
60   bool UseFilters;
61   bool MaxFilter;
62 
63   CHeaderOptions HeaderOptions;
64 
65   UInt64 NumSolidFiles;
66   UInt64 NumSolidBytes;
67   bool SolidExtension;
68   bool RemoveSfxBlock;
69   bool VolumeMode;
70 };
71 
72 HRESULT Update(
73     DECL_EXTERNAL_CODECS_LOC_VARS
74     IInStream *inStream,
75     const CArchiveDatabaseEx *db,
76     const CObjectVector<CUpdateItem> &updateItems,
77     COutArchive &archive,
78     CArchiveDatabase &newDatabase,
79     ISequentialOutStream *seqOutStream,
80     IArchiveUpdateCallback *updateCallback,
81     const CUpdateOptions &options
82     #ifndef _NO_CRYPTO
83     , ICryptoGetTextPassword *getDecoderPassword
84     #endif
85     );
86 }}
87 
88 #endif
89