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