xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/Tar/TarIn.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // TarIn.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_ARCHIVE_TAR_IN_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_ARCHIVE_TAR_IN_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 "TarItem.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker namespace NArchive {
11*f6dc9357SAndroid Build Coastguard Worker namespace NTar {
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker enum EErrorType
14*f6dc9357SAndroid Build Coastguard Worker {
15*f6dc9357SAndroid Build Coastguard Worker   k_ErrorType_OK,
16*f6dc9357SAndroid Build Coastguard Worker   k_ErrorType_Corrupted,
17*f6dc9357SAndroid Build Coastguard Worker   k_ErrorType_UnexpectedEnd
18*f6dc9357SAndroid Build Coastguard Worker   // , k_ErrorType_Warning
19*f6dc9357SAndroid Build Coastguard Worker };
20*f6dc9357SAndroid Build Coastguard Worker 
21*f6dc9357SAndroid Build Coastguard Worker 
22*f6dc9357SAndroid Build Coastguard Worker struct CTempBuffer
23*f6dc9357SAndroid Build Coastguard Worker {
24*f6dc9357SAndroid Build Coastguard Worker   CByteBuffer Buffer;
25*f6dc9357SAndroid Build Coastguard Worker   size_t StringSize; // num characters before zero Byte (StringSize <= item.PackSize)
26*f6dc9357SAndroid Build Coastguard Worker   bool IsNonZeroTail;
27*f6dc9357SAndroid Build Coastguard Worker   bool StringSize_IsConfirmed;
28*f6dc9357SAndroid Build Coastguard Worker 
CopyToStringCTempBuffer29*f6dc9357SAndroid Build Coastguard Worker   void CopyToString(AString &s)
30*f6dc9357SAndroid Build Coastguard Worker   {
31*f6dc9357SAndroid Build Coastguard Worker     s.Empty();
32*f6dc9357SAndroid Build Coastguard Worker     if (StringSize != 0)
33*f6dc9357SAndroid Build Coastguard Worker       s.SetFrom((const char *)(const void *)(const Byte *)Buffer, (unsigned)StringSize);
34*f6dc9357SAndroid Build Coastguard Worker   }
35*f6dc9357SAndroid Build Coastguard Worker 
InitCTempBuffer36*f6dc9357SAndroid Build Coastguard Worker   void Init()
37*f6dc9357SAndroid Build Coastguard Worker   {
38*f6dc9357SAndroid Build Coastguard Worker     StringSize = 0;
39*f6dc9357SAndroid Build Coastguard Worker     IsNonZeroTail = false;
40*f6dc9357SAndroid Build Coastguard Worker     StringSize_IsConfirmed = false;
41*f6dc9357SAndroid Build Coastguard Worker   }
42*f6dc9357SAndroid Build Coastguard Worker };
43*f6dc9357SAndroid Build Coastguard Worker 
44*f6dc9357SAndroid Build Coastguard Worker 
45*f6dc9357SAndroid Build Coastguard Worker class CArchive
46*f6dc9357SAndroid Build Coastguard Worker {
47*f6dc9357SAndroid Build Coastguard Worker public:
48*f6dc9357SAndroid Build Coastguard Worker   bool _phySize_Defined;
49*f6dc9357SAndroid Build Coastguard Worker   bool _is_Warning;
50*f6dc9357SAndroid Build Coastguard Worker   bool PaxGlobal_Defined;
51*f6dc9357SAndroid Build Coastguard Worker   bool _is_PaxGlobal_Error;
52*f6dc9357SAndroid Build Coastguard Worker   bool _are_Pax_Items;
53*f6dc9357SAndroid Build Coastguard Worker   bool _are_Gnu;
54*f6dc9357SAndroid Build Coastguard Worker   bool _are_Posix;
55*f6dc9357SAndroid Build Coastguard Worker   bool _are_Pax;
56*f6dc9357SAndroid Build Coastguard Worker   bool _are_mtime;
57*f6dc9357SAndroid Build Coastguard Worker   bool _are_atime;
58*f6dc9357SAndroid Build Coastguard Worker   bool _are_ctime;
59*f6dc9357SAndroid Build Coastguard Worker   bool _are_pax_path;
60*f6dc9357SAndroid Build Coastguard Worker   bool _are_pax_link;
61*f6dc9357SAndroid Build Coastguard Worker   bool _are_LongName;
62*f6dc9357SAndroid Build Coastguard Worker   bool _are_LongLink;
63*f6dc9357SAndroid Build Coastguard Worker   bool _pathPrefix_WasUsed;
64*f6dc9357SAndroid Build Coastguard Worker   bool _are_SCHILY_fflags;
65*f6dc9357SAndroid Build Coastguard Worker   // bool _isSparse;
66*f6dc9357SAndroid Build Coastguard Worker 
67*f6dc9357SAndroid Build Coastguard Worker   // temp internal vars for ReadItem():
68*f6dc9357SAndroid Build Coastguard Worker   bool filled;
69*f6dc9357SAndroid Build Coastguard Worker private:
70*f6dc9357SAndroid Build Coastguard Worker   EErrorType error;
71*f6dc9357SAndroid Build Coastguard Worker 
72*f6dc9357SAndroid Build Coastguard Worker public:
73*f6dc9357SAndroid Build Coastguard Worker   UInt64 _phySize;
74*f6dc9357SAndroid Build Coastguard Worker   UInt64 _headersSize;
75*f6dc9357SAndroid Build Coastguard Worker   EErrorType _error;
76*f6dc9357SAndroid Build Coastguard Worker 
77*f6dc9357SAndroid Build Coastguard Worker   ISequentialInStream *SeqStream;
78*f6dc9357SAndroid Build Coastguard Worker   IInStream *InStream;
79*f6dc9357SAndroid Build Coastguard Worker   IArchiveOpenCallback *OpenCallback;
80*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumFiles;
81*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumFiles_Prev;
82*f6dc9357SAndroid Build Coastguard Worker   UInt64 Pos_Prev;
83*f6dc9357SAndroid Build Coastguard Worker   // UInt64 NumRecords;
84*f6dc9357SAndroid Build Coastguard Worker   // UInt64 NumRecords_Prev;
85*f6dc9357SAndroid Build Coastguard Worker 
86*f6dc9357SAndroid Build Coastguard Worker   CPaxExtra PaxGlobal;
87*f6dc9357SAndroid Build Coastguard Worker 
Clear()88*f6dc9357SAndroid Build Coastguard Worker   void Clear()
89*f6dc9357SAndroid Build Coastguard Worker   {
90*f6dc9357SAndroid Build Coastguard Worker     SeqStream = NULL;
91*f6dc9357SAndroid Build Coastguard Worker     InStream = NULL;
92*f6dc9357SAndroid Build Coastguard Worker     OpenCallback = NULL;
93*f6dc9357SAndroid Build Coastguard Worker     NumFiles = 0;
94*f6dc9357SAndroid Build Coastguard Worker     NumFiles_Prev = 0;
95*f6dc9357SAndroid Build Coastguard Worker     Pos_Prev = 0;
96*f6dc9357SAndroid Build Coastguard Worker     // NumRecords = 0;
97*f6dc9357SAndroid Build Coastguard Worker     // NumRecords_Prev = 0;
98*f6dc9357SAndroid Build Coastguard Worker 
99*f6dc9357SAndroid Build Coastguard Worker     PaxGlobal.Clear();
100*f6dc9357SAndroid Build Coastguard Worker     PaxGlobal_Defined = false;
101*f6dc9357SAndroid Build Coastguard Worker     _is_PaxGlobal_Error = false;
102*f6dc9357SAndroid Build Coastguard Worker     _are_Pax_Items = false; // if there are final paxItems
103*f6dc9357SAndroid Build Coastguard Worker     _are_Gnu = false;
104*f6dc9357SAndroid Build Coastguard Worker     _are_Posix = false;
105*f6dc9357SAndroid Build Coastguard Worker     _are_Pax = false;
106*f6dc9357SAndroid Build Coastguard Worker     _are_mtime = false;
107*f6dc9357SAndroid Build Coastguard Worker     _are_atime = false;
108*f6dc9357SAndroid Build Coastguard Worker     _are_ctime = false;
109*f6dc9357SAndroid Build Coastguard Worker     _are_pax_path = false;
110*f6dc9357SAndroid Build Coastguard Worker     _are_pax_link = false;
111*f6dc9357SAndroid Build Coastguard Worker     _are_LongName = false;
112*f6dc9357SAndroid Build Coastguard Worker     _are_LongLink = false;
113*f6dc9357SAndroid Build Coastguard Worker     _pathPrefix_WasUsed = false;
114*f6dc9357SAndroid Build Coastguard Worker     _are_SCHILY_fflags = false;
115*f6dc9357SAndroid Build Coastguard Worker     // _isSparse = false;
116*f6dc9357SAndroid Build Coastguard Worker 
117*f6dc9357SAndroid Build Coastguard Worker     _is_Warning = false;
118*f6dc9357SAndroid Build Coastguard Worker     _error = k_ErrorType_OK;
119*f6dc9357SAndroid Build Coastguard Worker 
120*f6dc9357SAndroid Build Coastguard Worker     _phySize_Defined = false;
121*f6dc9357SAndroid Build Coastguard Worker     _phySize = 0;
122*f6dc9357SAndroid Build Coastguard Worker     _headersSize = 0;
123*f6dc9357SAndroid Build Coastguard Worker   }
124*f6dc9357SAndroid Build Coastguard Worker 
125*f6dc9357SAndroid Build Coastguard Worker private:
126*f6dc9357SAndroid Build Coastguard Worker   CTempBuffer NameBuf;
127*f6dc9357SAndroid Build Coastguard Worker   CTempBuffer LinkBuf;
128*f6dc9357SAndroid Build Coastguard Worker   CTempBuffer PaxBuf;
129*f6dc9357SAndroid Build Coastguard Worker   CTempBuffer PaxBuf_global;
130*f6dc9357SAndroid Build Coastguard Worker 
131*f6dc9357SAndroid Build Coastguard Worker   CByteBuffer Buffer;
132*f6dc9357SAndroid Build Coastguard Worker 
133*f6dc9357SAndroid Build Coastguard Worker   HRESULT ReadDataToBuffer(const CItemEx &item, CTempBuffer &tb, size_t stringLimit);
134*f6dc9357SAndroid Build Coastguard Worker   HRESULT Progress(const CItemEx &item, UInt64 posOffset);
135*f6dc9357SAndroid Build Coastguard Worker   HRESULT GetNextItemReal(CItemEx &item);
136*f6dc9357SAndroid Build Coastguard Worker   HRESULT ReadItem2(CItemEx &itemInfo);
137*f6dc9357SAndroid Build Coastguard Worker public:
CArchive()138*f6dc9357SAndroid Build Coastguard Worker   CArchive()
139*f6dc9357SAndroid Build Coastguard Worker   {
140*f6dc9357SAndroid Build Coastguard Worker     // we will call Clear() in CHandler::Close().
141*f6dc9357SAndroid Build Coastguard Worker     // Clear(); // it's not required here
142*f6dc9357SAndroid Build Coastguard Worker   }
143*f6dc9357SAndroid Build Coastguard Worker   HRESULT ReadItem(CItemEx &itemInfo);
144*f6dc9357SAndroid Build Coastguard Worker };
145*f6dc9357SAndroid Build Coastguard Worker 
146*f6dc9357SAndroid Build Coastguard Worker 
147*f6dc9357SAndroid Build Coastguard Worker API_FUNC_IsArc IsArc_Tar(const Byte *p, size_t size);
148*f6dc9357SAndroid Build Coastguard Worker 
149*f6dc9357SAndroid Build Coastguard Worker }}
150*f6dc9357SAndroid Build Coastguard Worker 
151*f6dc9357SAndroid Build Coastguard Worker #endif
152