log storage: change AB device log storage to /data/recovery
This patchset is now exlcuding /data/cache from backup, and removing it
from the wipe exclusion list to prevent errors on restore and wiping
/data.
This patchset changes the directory from /data/cache to /data/recovery for TWRP
to store logs and other file information. This will help with AB
devices that don't want recovery to mess with /data/cache.
This patchset will make ORS use /data/cache for AB devices.
Remove policy code because we don't need to set a policy for the
recovery directory.
Change-Id: I1d140276314fd34804a72297d6e25a52e58210a0
diff --git a/twrp-functions.cpp b/twrp-functions.cpp
index b20f6ff..ba0d8a5 100755
--- a/twrp-functions.cpp
+++ b/twrp-functions.cpp
@@ -593,11 +593,11 @@
}
void TWFunc::Update_Log_File(void) {
- std::string recoveryDir = get_cache_dir() + "recovery/";
+ std::string recoveryDir = get_log_dir() + "recovery/";
- if (get_cache_dir() == NON_AB_CACHE_DIR) {
- if (!PartitionManager.Mount_By_Path(NON_AB_CACHE_DIR, false)) {
- LOGINFO("Failed to mount %s for TWFunc::Update_Log_File\n", NON_AB_CACHE_DIR);
+ if (get_log_dir() == CACHE_LOGS_DIR) {
+ if (!PartitionManager.Mount_By_Path(CACHE_LOGS_DIR, false)) {
+ LOGINFO("Failed to mount %s for TWFunc::Update_Log_File\n", CACHE_LOGS_DIR);
}
}
@@ -629,7 +629,7 @@
}
}
- if (get_cache_dir() == NON_AB_CACHE_DIR) {
+ if (get_log_dir() == CACHE_LOGS_DIR) {
if (PartitionManager.Mount_By_Path("/cache", false)) {
if (unlink("/cache/recovery/command") && errno != ENOENT) {
LOGINFO("Can't unlink %s\n", "/cache/recovery/command");
@@ -649,8 +649,8 @@
int TWFunc::tw_reboot(RebootCommand command)
{
DataManager::Flush();
- if (!Is_Mount_Wiped("/data"))
- Update_Log_File();
+ Update_Log_File();
+
// Always force a sync before we reboot
sync();
@@ -1256,20 +1256,20 @@
return ret;
}
-std::string TWFunc::get_cache_dir() {
- if (PartitionManager.Find_Partition_By_Path(NON_AB_CACHE_DIR) == NULL) {
- if (PartitionManager.Find_Partition_By_Path(AB_CACHE_DIR) == NULL) {
- if (PartitionManager.Find_Partition_By_Path(PERSIST_CACHE_DIR) == NULL) {
+std::string TWFunc::get_log_dir() {
+ if (PartitionManager.Find_Partition_By_Path(CACHE_LOGS_DIR) == NULL) {
+ if (PartitionManager.Find_Partition_By_Path(DATA_LOGS_DIR) == NULL) {
+ if (PartitionManager.Find_Partition_By_Path(PERSIST_LOGS_DIR) == NULL) {
LOGINFO("Unable to find a directory to store TWRP logs.");
return "";
}
- return PERSIST_CACHE_DIR;
+ return PERSIST_LOGS_DIR;
} else {
- return AB_CACHE_DIR;
+ return DATA_LOGS_DIR;
}
}
else {
- return NON_AB_CACHE_DIR;
+ return CACHE_LOGS_DIR;
}
}
@@ -1292,12 +1292,12 @@
printf("SELinux contexts loaded from /file_contexts\n");
{ // Check to ensure SELinux can be supported by the kernel
char *contexts = NULL;
- std::string cacheDir = TWFunc::get_cache_dir();
+ std::string cacheDir = TWFunc::get_log_dir();
std::string se_context_check = cacheDir + "recovery/";
int ret = 0;
- if (cacheDir == NON_AB_CACHE_DIR) {
- PartitionManager.Mount_By_Path(NON_AB_CACHE_DIR, false);
+ if (cacheDir == CACHE_LOGS_DIR) {
+ PartitionManager.Mount_By_Path(CACHE_LOGS_DIR, false);
}
if (TWFunc::Path_Exists(se_context_check)) {
ret = lgetfilecon(se_context_check.c_str(), &contexts);
@@ -1383,24 +1383,4 @@
}
return true;
}
-
-bool TWFunc::Is_Mount_Wiped(std::string path) {
- DIR* d = opendir(path.c_str());
- size_t file_count = 0;
- if (d != NULL) {
- struct dirent* de;
- while ((de = readdir(d)) != NULL) {
- if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0)
- continue;
- if (strncmp(de->d_name, "lost+found", 10) == 0 || strncmp(de->d_name, "media", 5) == 0 || strncmp(de->d_name, "misc", 4) == 0
- || strncmp(de->d_name, "system", 6) == 0 || strncmp(de->d_name, "unencrypted", 11) == 0
- || strncmp(de->d_name, "per_boot", 8) == 0)
- continue;
- file_count++;
-
- }
- closedir(d);
- }
- return file_count == 0;
-}
#endif // ndef BUILD_TWRPTAR_MAIN