diff options
-rwxr-xr-x | data.cpp | 7 | ||||
-rwxr-xr-x | partitionmanager.cpp | 8 | ||||
-rwxr-xr-x | twrp-functions.cpp | 12 | ||||
-rwxr-xr-x | twrp-functions.hpp | 1 |
4 files changed, 24 insertions, 4 deletions
@@ -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<TWPartition*>::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 { |