From e4bdb15a5f6b0894b46fd34ad7b1a3093d6a102c Mon Sep 17 00:00:00 2001 From: bigbiff bigbiff Date: Sat, 23 Mar 2019 18:33:17 -0400 Subject: AB Cache dir: If device doesn't have /data/cache for FBE, we should try /persist if in the fstab. Change-Id: I70dd19538b7f9b8cf61c46f6c8167057eec3342b --- data.cpp | 7 ++++++- partitionmanager.cpp | 8 +++++++- twrp-functions.cpp | 12 ++++++++++-- twrp-functions.hpp | 1 + 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/data.cpp b/data.cpp index cf9dd2476..92255357c 100755 --- a/data.cpp +++ b/data.cpp @@ -1043,6 +1043,11 @@ void DataManager::Output_Version(void) char version[255]; std::string cacheDir = TWFunc::get_cache_dir(); + if (cacheDir.empty()) { + LOGINFO("Unable to find cache directory\n"); + return; + } + std::string recoveryCacheDir = cacheDir + "recovery/"; if (cacheDir == NON_AB_CACHE_DIR) { @@ -1053,7 +1058,7 @@ void DataManager::Output_Version(void) } if (!TWFunc::Path_Exists(recoveryCacheDir)) { LOGINFO("Recreating %s folder.\n", recoveryCacheDir.c_str()); - if (mkdir(recoveryCacheDir.c_str(), S_IRWXU | S_IRWXG | S_IWGRP | S_IXGRP) != 0) { + if (!TWFunc::Create_Dir_Recursive(recoveryCacheDir.c_str(), S_IRWXU | S_IRWXG | S_IWGRP | S_IXGRP, 0, 0)) { LOGERR("DataManager::Output_Version -- Unable to make %s: %s\n", recoveryCacheDir.c_str(), strerror(errno)); return; } diff --git a/partitionmanager.cpp b/partitionmanager.cpp index 26a48e5dc..34ba6aea6 100755 --- a/partitionmanager.cpp +++ b/partitionmanager.cpp @@ -2222,7 +2222,13 @@ int TWPartitionManager::Fstab_Processed(void) { void TWPartitionManager::Output_Storage_Fstab(void) { std::vector::iterator iter; char storage_partition[255]; - string Temp; + std::string Temp; + std::string cacheDir = TWFunc::get_cache_dir(); + + if (cacheDir.empty()) { + LOGINFO("Unable to find cache directory\n"); + return; + } std::string storageFstab = TWFunc::get_cache_dir() + "recovery/storage.fstab"; FILE *fp = fopen(storageFstab.c_str(), "w"); diff --git a/twrp-functions.cpp b/twrp-functions.cpp index 0730ca849..28a0f0cc7 100755 --- a/twrp-functions.cpp +++ b/twrp-functions.cpp @@ -535,7 +535,7 @@ void TWFunc::Update_Log_File(void) { if (!TWFunc::Path_Exists(recoveryDir)) { LOGINFO("Recreating %s folder.\n", recoveryDir.c_str()); - if (mkdir(recoveryDir.c_str(), S_IRWXU | S_IRWXG | S_IWGRP | S_IXGRP) != 0) { + if (!Create_Dir_Recursive(recoveryDir, S_IRWXU | S_IRWXG | S_IWGRP | S_IXGRP, 0, 0)) { LOGINFO("Unable to create %s folder.\n", recoveryDir.c_str()); } } @@ -1171,7 +1171,15 @@ int TWFunc::stream_adb_backup(string &Restore_Name) { std::string TWFunc::get_cache_dir() { if (PartitionManager.Find_Partition_By_Path(NON_AB_CACHE_DIR) == NULL) { - return AB_CACHE_DIR; + if (PartitionManager.Find_Partition_By_Path(NON_AB_CACHE_DIR) == NULL) { + if (PartitionManager.Find_Partition_By_Path(PERSIST_CACHE_DIR) == NULL) { + LOGINFO("Unable to find a directory to store TWRP logs."); + return ""; + } + return PERSIST_CACHE_DIR; + } else { + return AB_CACHE_DIR; + } } else { return NON_AB_CACHE_DIR; diff --git a/twrp-functions.hpp b/twrp-functions.hpp index 669a9e970..a892e7574 100755 --- a/twrp-functions.hpp +++ b/twrp-functions.hpp @@ -28,6 +28,7 @@ using namespace std; #define NON_AB_CACHE_DIR "/cache/" #define AB_CACHE_DIR "/data/cache/" +#define PERSIST_CACHE_DIR "/persist/cache/" typedef enum { -- cgit v1.2.3