Fix backup of datadata

Change-Id: Ib0098542599283787592ba08caa070dc818d6111
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index d7f1600..dd2dfd2 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -865,7 +865,7 @@
 					}
 				}
 			} else {
-				LOGERR("Unable to locate '%s' partition for restoring.\n", restore_path.c_str());
+				LOGERR("Unable to locate '%s' partition for restoring (restore list).\n", restore_path.c_str());
 			}
 			start_pos = end_pos + 1;
 			end_pos = Restore_List.find(";", start_pos);
@@ -1814,9 +1814,10 @@
 			size_t start_pos = 0, end_pos = Restore_List.find(";", start_pos);
 			while (end_pos != string::npos && start_pos < Restore_List.size()) {
 				restore_path = Restore_List.substr(start_pos, end_pos - start_pos);
-				if ((restore_part = Find_Partition_By_Path(restore_path)) != NULL && !restore_part->Is_SubPartition) {
-					if (restore_part->Backup_Name == "recovery") {
+				if ((restore_part = Find_Partition_By_Path(restore_path)) != NULL) {
+					if (restore_part->Backup_Name == "recovery" || restore_part->Is_SubPartition) {
 						// Don't allow restore of recovery (causes problems on some devices)
+						// Don't add subpartitions to the list of items
 					} else {
 						struct PartitionList part;
 						part.Display_Name = restore_part->Backup_Display_Name;
diff --git a/twrpTar.cpp b/twrpTar.cpp
index bc7f370..a27374a 100644
--- a/twrpTar.cpp
+++ b/twrpTar.cpp
@@ -659,7 +659,7 @@
 int twrpTar::tarDirs(bool include_root) {
 	DIR* d;
 	string mainfolder = tardir + "/", subfolder;
-	char buf[PATH_MAX];
+	char buf[PATH_MAX], charTarPath[PATH_MAX];
 
 	char excl[1024];
 	string::size_type i;
@@ -697,26 +697,31 @@
 			if (strcmp(de->d_name, ".") != 0) {
 				subfolder += de->d_name;
 			} else {
-				LOGINFO("adding '%s'\n", subfolder.c_str());
+				LOGINFO("addFile '%s' including root: %i\n", buf, include_root);
 				if (addFile(subfolder, include_root) != 0)
 					return -1;
 				continue;
 			}
-			LOGINFO("adding '%s'\n", subfolder.c_str());
 			strcpy(buf, subfolder.c_str());
 			if (de->d_type == DT_DIR) {
-				char* charTarPath;
 				if (include_root) {
-					charTarPath = NULL;
+					charTarPath[0] = NULL;
+					LOGINFO("tar_append_tree '%s' as NULL\n", buf, charTarPath);
+					if (tar_append_tree(t, buf, NULL, excl) != 0) {
+						LOGERR("Error appending '%s' to tar archive '%s'\n", buf, tarfn.c_str());
+						return -1;
+					}
 				} else {
 					string temp = Strip_Root_Dir(buf);
-					charTarPath = (char*) temp.c_str();
-				}
-				if (tar_append_tree(t, buf, charTarPath, excl) != 0) {
-					LOGERR("Error appending '%s' to tar archive '%s'\n", buf, tarfn.c_str());
-					return -1;
+					strcpy(charTarPath, temp.c_str());
+					LOGINFO("tar_append_tree '%s' as '%s'\n", buf, charTarPath);
+					if (tar_append_tree(t, buf, charTarPath, excl) != 0) {
+						LOGERR("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)) {
+				LOGINFO("addFile '%s' including root: %i\n", buf, include_root);
 				if (addFile(buf, include_root) != 0)
 					return -1;
 			}