diff options
-rw-r--r-- | libtar/extract.c | 42 | ||||
-rw-r--r-- | libtar/wrapper.c | 2 | ||||
-rw-r--r-- | twrpTar.cpp | 45 |
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); |