summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libtar/extract.c42
-rw-r--r--libtar/wrapper.c2
-rw-r--r--twrpTar.cpp45
3 files changed, 44 insertions, 45 deletions
diff --git a/libtar/extract.c b/libtar/extract.c
index 49e7599e8..613e29fff 100644
--- a/libtar/extract.c
+++ b/libtar/extract.c
@@ -45,6 +45,11 @@ tar_set_file_perms(TAR *t, char *realname)
gid = th_get_gid(t);
ut.modtime = ut.actime = th_get_mtime(t);
+#ifdef DEBUG
+ printf(" ==> setting perms: %s (mode %04o, uid %d, gid %d)\n",
+ filename, mode, uid, gid);
+#endif
+
/* change owner/group */
if (geteuid() == 0)
#ifdef HAVE_LCHOWN
@@ -109,6 +114,7 @@ tar_extract_file(TAR *t, char *realname, char *prefix)
if (TH_ISDIR(t))
{
+ printf("dir\n");
i = tar_extract_dir(t, realname);
if (i == 1)
i = 0;
@@ -172,10 +178,10 @@ tar_extract_file(TAR *t, char *realname, char *prefix)
int
tar_extract_regfile(TAR *t, char *realname)
{
- mode_t mode;
+ //mode_t mode;
size_t size;
- uid_t uid;
- gid_t gid;
+ //uid_t uid;
+ //gid_t gid;
int fdout;
int i, k;
char buf[T_BLOCKSIZE];
@@ -194,17 +200,19 @@ tar_extract_regfile(TAR *t, char *realname)
}
filename = (realname ? realname : th_get_pathname(t));
- mode = th_get_mode(t);
+ //mode = th_get_mode(t);
size = th_get_size(t);
- uid = th_get_uid(t);
- gid = th_get_gid(t);
+ //uid = th_get_uid(t);
+ //gid = th_get_gid(t);
if (mkdirhier(dirname(filename)) == -1)
return -1;
#ifdef DEBUG
- printf(" ==> extracting: %s (mode %04o, uid %d, gid %d, %d bytes)\n",
- filename, mode, uid, gid, size);
+ //printf(" ==> extracting: %s (mode %04o, uid %d, gid %d, %d bytes)\n",
+ // filename, mode, uid, gid, size);
+ printf(" ==> extracting: %s (file size %d bytes)\n",
+ filename, size);
#endif
fdout = open(filename, O_WRONLY | O_CREAT | O_TRUNC
#ifdef O_BINARY
@@ -468,7 +476,6 @@ tar_extract_dir(TAR *t, char *realname)
{
mode_t mode;
char *filename;
- printf("filename: %s\n", filename);
if (!TH_ISDIR(t))
{
errno = EINVAL;
@@ -478,8 +485,10 @@ tar_extract_dir(TAR *t, char *realname)
filename = (realname ? realname : th_get_pathname(t));
mode = th_get_mode(t);
- if (mkdirhier(dirname(filename)) == -1)
+ if (mkdirhier(dirname(filename)) == -1) {
+ printf("tar_extract_dir mkdirhier failed\n");
return -1;
+ }
#ifdef DEBUG
printf(" ==> extracting: %s (mode %04o, directory)\n", filename,
@@ -489,20 +498,9 @@ tar_extract_dir(TAR *t, char *realname)
{
if (errno == EEXIST)
{
- if (chmod(filename, mode) == -1)
- {
-#ifdef DEBUG
- perror("chmod()");
-#endif
- return -1;
- }
- else
- {
#ifdef DEBUG
- puts(" *** using existing directory");
+ printf(" *** using existing directory");
#endif
- return 1;
- }
}
else
{
diff --git a/libtar/wrapper.c b/libtar/wrapper.c
index 4d8216241..116dc28cc 100644
--- a/libtar/wrapper.c
+++ b/libtar/wrapper.c
@@ -79,7 +79,7 @@ tar_extract_all(TAR *t, char *prefix)
printf(" tar_extract_all(): calling tar_extract_file(t, "
"\"%s\")\n", buf);
#endif
- printf("filename: %s\n", filename);
+ printf("item name: '%s'\n", filename);
/*
if (strcmp(filename, "/") == 0) {
printf("skipping /\n");
diff --git a/twrpTar.cpp b/twrpTar.cpp
index cf225db58..dd6d5c37b 100644
--- a/twrpTar.cpp
+++ b/twrpTar.cpp
@@ -215,7 +215,6 @@ int twrpTar::Generate_Multiple_Archives(string Path) {
if (de->d_type == DT_DIR && strcmp(de->d_name, ".") != 0 && strcmp(de->d_name, "..") != 0)
{
unsigned long long folder_size = TWFunc::Get_Folder_Size(FileName, false);
- tardir = FileName;
if (Archive_Current_Size + folder_size > MAX_ARCHIVE_SIZE) {
LOGI("Calling Generate_Multiple_Archives\n");
if (Generate_Multiple_Archives(FileName) < 0)
@@ -337,41 +336,43 @@ int twrpTar::extract() {
int twrpTar::tarDirs(bool include_root) {
DIR* d;
string mainfolder = tardir + "/", subfolder;
- char buf[1024];
- char* charTarFile = (char*) tarfn.c_str();
+ char buf[PATH_MAX];
d = opendir(tardir.c_str());
if (d != NULL) {
struct dirent* de;
while ((de = readdir(d)) != NULL) {
- LOGI("adding %s\n", de->d_name);
#ifdef RECOVERY_SDCARD_ON_DATA
if ((tardir == "/data" || tardir == "/data/") && strcmp(de->d_name, "media") == 0) continue;
- if (de->d_type == DT_BLK || de->d_type == DT_CHR)
- continue;
#endif
- if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) continue;
-
+ if (de->d_type == DT_BLK || de->d_type == DT_CHR || strcmp(de->d_name, "..") == 0)
+ continue;
subfolder = mainfolder;
- subfolder += de->d_name;
+ if (strcmp(de->d_name, ".") != 0) {
+ subfolder += de->d_name;
+ } else {
+ LOGI("adding '%s'\n", subfolder.c_str());
+ if (addFile(subfolder, include_root) != 0)
+ return -1;
+ continue;
+ }
+ LOGI("adding '%s'\n", subfolder.c_str());
strcpy(buf, subfolder.c_str());
if (de->d_type == DT_DIR) {
- if (include_root) {
- if (tar_append_tree(t, buf, NULL) != 0) {
- LOGE("Error appending '%s' to tar archive '%s'\n", buf, charTarFile);
- return -1;
+ char* charTarPath;
+ if (include_root) {
+ charTarPath = NULL;
+ } else {
+ string temp = Strip_Root_Dir(buf);
+ charTarPath = (char*) temp.c_str();
}
- } else {
- string temp = Strip_Root_Dir(buf);
- char* charTarPath = (char*) temp.c_str();
- if (tar_append_tree(t, buf, charTarPath) != 0) {
- LOGE("Error appending '%s' to tar archive '%s'\n", buf, charTarFile);
+ if (tar_append_tree(t, buf, charTarPath) != 0) {
+ LOGE("Error appending '%s' to tar archive '%s'\n", buf, tarfn.c_str());
return -1;
}
- }
} else if (tardir != "/" && (de->d_type == DT_REG || de->d_type == DT_LNK)) {
- if (addFile(buf, include_root) != 0)
- return -1;
- }
+ if (addFile(buf, include_root) != 0)
+ return -1;
+ }
fflush(NULL);
}
closedir(d);