/* 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 #include "twrpDU.hpp" 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(const unsigned long long *overall_size, const unsigned long long *other_backups_size, pid_t &fork_pid); int extractTarFork(const unsigned long long *overall_size, unsigned long long *other_backups_size); void setfn(string fn); void setdir(string dir); void setsize(unsigned long long backup_size); void setpassword(string pass); unsigned long long get_size(); public: int use_encryption; int userdata_encryption; int use_compression; int split_archives; int has_data_media; string backup_name; int progress_pipe_fd; string partition_name; string backup_folder; 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 removeEOT(string tarFile); int extractTar(); 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(std::vector *TarList, unsigned thread_id); unsigned long long uncompressedSize(string filename, int *archive_type); static void Signal_Kill(int signum); int Archive_Current_Type; unsigned long long Archive_Current_Size; unsigned long long Total_Backup_Size; bool include_root_dir; TAR *t; int fd; pid_t pigz_pid; pid_t oaes_pid; unsigned long long file_count; string tardir; string tarfn; string basefn; string password; std::vector *ItemList; int thread_id; };