/* Copyright 2012 bigbiff/Dees_Troy TeamWin This file is part of TWRP/TeamWin Recovery Project. TWRP is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. TWRP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with TWRP. If not, see . */ extern "C" { #include "libtar/libtar.h" } #include #include #include #include #include #include #include #include using namespace std; struct TarListStruct { std::string fn; unsigned thread_id; }; struct thread_data_struct { std::vector *TarList; unsigned thread_id; }; class twrpTar { public: twrpTar(); virtual ~twrpTar(); int createTarFork(); int extractTarFork(); int splitArchiveFork(); void setexcl(string exclude); void setfn(string fn); void setdir(string dir); unsigned long long uncompressedSize(); public: int use_encryption; int userdata_encryption; int use_compression; int split_archives; int has_data_media; string backup_name; private: int extract(); int addFilesToExistingTar(vector files, string tarFile); int createTar(); int addFile(string fn, bool include_root); int entryExists(string entry); int closeTar(); int create(); int Split_Archive(); int removeEOT(string tarFile); int extractTar(); int tarDirs(bool include_root); int Generate_Multiple_Archives(string Path); string Strip_Root_Dir(string Path); int openTar(); int Generate_TarList(string Path, std::vector *TarList, unsigned long long *Target_Size, unsigned *thread_id); static void* createList(void *cookie); static void* extractMulti(void *cookie); int tarList(bool include_root, std::vector *TarList, unsigned thread_id); int Archive_File_Count; int Archive_Current_Type; unsigned long long Archive_Current_Size; TAR *t; int fd; pid_t pigz_pid; pid_t oaes_pid; string tardir; string tarfn; string basefn; vector tarexclude; vector split; std::vector *ItemList; int thread_id; };