blob: 17f69594d48cc376ef46a4d4380c87374613509f [file] [log] [blame]
bigbiff bigbiff9c754052013-01-09 09:09:08 -05001/*
2 Copyright 2012 bigbiff/Dees_Troy TeamWin
3 This file is part of TWRP/TeamWin Recovery Project.
4
5 TWRP is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 TWRP is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with TWRP. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19extern "C" {
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020020 #include "libtar/libtar.h"
bigbiff bigbiff9c754052013-01-09 09:09:08 -050021}
22#include <sys/types.h>
23#include <sys/stat.h>
24#include <string.h>
25#include <errno.h>
26#include <fcntl.h>
27#include <fstream>
28#include <string>
29#include <vector>
bigbiff bigbiff34684ff2013-12-01 21:03:45 -050030#include "twrpDU.hpp"
bigbiff bigbiff9c754052013-01-09 09:09:08 -050031
32using namespace std;
33
Dees_Troy83bd4832013-05-04 12:39:56 +000034struct TarListStruct {
35 std::string fn;
36 unsigned thread_id;
37};
38
39struct thread_data_struct {
40 std::vector<TarListStruct> *TarList;
41 unsigned thread_id;
42};
43
bigbiff bigbiff9c754052013-01-09 09:09:08 -050044class twrpTar {
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020045public:
46 twrpTar();
47 virtual ~twrpTar();
48 int createTarFork();
49 int extractTarFork();
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020050 void setexcl(string exclude);
51 void setfn(string fn);
52 void setdir(string dir);
Dees Troye0a433a2013-12-02 04:10:37 +000053 void setsize(unsigned long long backup_size);
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020054 unsigned long long uncompressedSize();
bigbiff bigbiff86e77bc2013-08-26 21:36:23 -040055
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020056public:
57 int use_encryption;
58 int userdata_encryption;
59 int use_compression;
60 int split_archives;
61 int has_data_media;
62 string backup_name;
Dees_Troy83bd4832013-05-04 12:39:56 +000063
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020064private:
65 int extract();
66 int addFilesToExistingTar(vector <string> files, string tarFile);
67 int createTar();
68 int addFile(string fn, bool include_root);
69 int entryExists(string entry);
70 int closeTar();
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020071 int removeEOT(string tarFile);
72 int extractTar();
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020073 string Strip_Root_Dir(string Path);
74 int openTar();
75 int Generate_TarList(string Path, std::vector<TarListStruct> *TarList, unsigned long long *Target_Size, unsigned *thread_id);
76 static void* createList(void *cookie);
77 static void* extractMulti(void *cookie);
Dees Troye0a433a2013-12-02 04:10:37 +000078 int tarList(std::vector<TarListStruct> *TarList, unsigned thread_id);
Dees_Troy83bd4832013-05-04 12:39:56 +000079
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020080 int Archive_Current_Type;
81 unsigned long long Archive_Current_Size;
Dees Troye0a433a2013-12-02 04:10:37 +000082 unsigned long long Total_Backup_Size;
83 bool include_root_dir;
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020084 TAR *t;
85 int fd;
86 pid_t pigz_pid;
87 pid_t oaes_pid;
Dees_Troy83bd4832013-05-04 12:39:56 +000088
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020089 string tardir;
90 string tarfn;
91 string basefn;
Dees_Troy83bd4832013-05-04 12:39:56 +000092
bigbiff bigbiff86e77bc2013-08-26 21:36:23 -040093 vector <string> tarexclude;
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020094
95 std::vector<TarListStruct> *ItemList;
96 int thread_id;
bigbiff bigbiff86e77bc2013-08-26 21:36:23 -040097};