/* Copyright 2012 to 2016 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 "exclude.hpp" #include "progresstracking.hpp" #include "partitions.hpp" #include "twrp-functions.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(pid_t *tar_fork_pid); int extractTarFork(); void setfn(string fn); void setdir(string dir); void setsize(unsigned long long backup_size); void setpassword(string pass); unsigned long long get_size(); void Set_Archive_Type(Archive_Type archive_type); public: int use_encryption; int userdata_encryption; int use_compression; int split_archives; string backup_name; int progress_pipe_fd; string partition_name; string backup_folder; PartitionSettings *part_settings; TWExclude *backup_exclusions; 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); static void Signal_Kill(int signum); enum Archive_Type current_archive_type; unsigned long long Archive_Current_Size; unsigned long long Total_Backup_Size; bool include_root_dir; TAR *t; tartype_t tar_type; // Only used in createTar() but variable must persist while the tar is open int fd; int input_fd; // this stores the fd for libtar to write to 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 output_fd; // this stores the output fd that gzip will read from unsigned thread_id; };