summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbig biff <bigbiff@teamw.in>2018-12-24 16:08:07 +0100
committerGerrit Code Review <gerrit2@gerrit.omnirom.org>2018-12-24 16:08:07 +0100
commit09ee3ea4227fd7046b5b0d54dc83371e218786d1 (patch)
tree5f2fc1a1e59572d5c66d335eb59bb63aa8f277bf
parentMerge "Add option to use ro.serialno for generating device id" into android-9.0 (diff)
parenttwrp: use ANDROID_ROOT environment variable (diff)
downloadandroid_bootable_recovery-09ee3ea4227fd7046b5b0d54dc83371e218786d1.tar
android_bootable_recovery-09ee3ea4227fd7046b5b0d54dc83371e218786d1.tar.gz
android_bootable_recovery-09ee3ea4227fd7046b5b0d54dc83371e218786d1.tar.bz2
android_bootable_recovery-09ee3ea4227fd7046b5b0d54dc83371e218786d1.tar.lz
android_bootable_recovery-09ee3ea4227fd7046b5b0d54dc83371e218786d1.tar.xz
android_bootable_recovery-09ee3ea4227fd7046b5b0d54dc83371e218786d1.tar.zst
android_bootable_recovery-09ee3ea4227fd7046b5b0d54dc83371e218786d1.zip
-rw-r--r--gui/action.cpp20
-rw-r--r--openrecoveryscript.cpp10
-rw-r--r--partition.cpp6
-rw-r--r--partitionmanager.cpp13
-rw-r--r--partitions.hpp1
-rw-r--r--twrp-functions.cpp20
-rw-r--r--twrp.cpp2
-rw-r--r--twrpAdbBuFifo.cpp2
8 files changed, 41 insertions, 33 deletions
diff --git a/gui/action.cpp b/gui/action.cpp
index fb05d77b4..d708dd467 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -1819,14 +1819,14 @@ int GUIAction::checkpartitionlifetimewrites(std::string arg)
int GUIAction::mountsystemtoggle(std::string arg)
{
int op_status = 0;
- bool remount_system = PartitionManager.Is_Mounted_By_Path("/system");
+ bool remount_system = PartitionManager.Is_Mounted_By_Path(PartitionManager.Get_Android_Root_Path());
bool remount_vendor = PartitionManager.Is_Mounted_By_Path("/vendor");
operation_start("Toggle System Mount");
- if (!PartitionManager.UnMount_By_Path("/system", true)) {
+ if (!PartitionManager.UnMount_By_Path(PartitionManager.Get_Android_Root_Path(), true)) {
op_status = 1; // fail
} else {
- TWPartition* Part = PartitionManager.Find_Partition_By_Path("/system");
+ TWPartition* Part = PartitionManager.Find_Partition_By_Path(PartitionManager.Get_Android_Root_Path());
if (Part) {
if (arg == "0") {
DataManager::SetValue("tw_mount_system_ro", 0);
@@ -1910,9 +1910,9 @@ int GUIAction::checkforapp(std::string arg __unused)
DataManager::SetValue("tw_app_install_status", 1); // 0 = no status, 1 = not installed, 2 = already installed or do not install
goto exit;
}
- if (PartitionManager.Mount_By_Path("/system", false)) {
- string base_path = "/system";
- if (TWFunc::Path_Exists("/system/system"))
+ if (PartitionManager.Mount_By_Path(PartitionManager.Get_Android_Root_Path(), false)) {
+ string base_path = PartitionManager.Get_Android_Root_Path();
+ if (TWFunc::Path_Exists(PartitionManager.Get_Android_Root_Path() + "/system"))
base_path += "/system"; // For devices with system as a root file system (e.g. Pixel)
string install_path = base_path + "/priv-app";
if (!TWFunc::Path_Exists(install_path))
@@ -2007,9 +2007,9 @@ int GUIAction::installapp(std::string arg __unused)
sync();
}
} else {
- if (PartitionManager.Mount_By_Path("/system", true)) {
- string base_path = "/system";
- if (TWFunc::Path_Exists("/system/system"))
+ if (PartitionManager.Mount_By_Path(PartitionManager.Get_Android_Root_Path(), true)) {
+ string base_path = PartitionManager.Get_Android_Root_Path();
+ if (TWFunc::Path_Exists(PartitionManager.Get_Android_Root_Path() + "/system"))
base_path += "/system"; // For devices with system as a root file system (e.g. Pixel)
string install_path = base_path + "/priv-app";
string context = "u:object_r:system_file:s0";
@@ -2034,7 +2034,7 @@ int GUIAction::installapp(std::string arg __unused)
}
sync();
sync();
- PartitionManager.UnMount_By_Path("/system", true);
+ PartitionManager.UnMount_By_Path(PartitionManager.Get_Android_Root_Path(), true);
op_status = 0;
} else {
LOGERR("Error making app directory '%s': %s\n", strerror(errno));
diff --git a/openrecoveryscript.cpp b/openrecoveryscript.cpp
index d7e4a2332..86c90a662 100644
--- a/openrecoveryscript.cpp
+++ b/openrecoveryscript.cpp
@@ -147,8 +147,8 @@ int OpenRecoveryScript::run_script_file(void) {
// Wipe
if (strcmp(value, "cache") == 0 || strcmp(value, "/cache") == 0) {
PartitionManager.Wipe_By_Path("/cache");
- } else if (strcmp(value, "system") == 0 || strcmp(value, "/system") == 0) {
- PartitionManager.Wipe_By_Path("/system");
+ } else if (strcmp(value, PartitionManager.Get_Android_Root_Path().c_str()) == 0 || strcmp(value, PartitionManager.Get_Android_Root_Path().c_str()) == 0) {
+ PartitionManager.Wipe_By_Path(PartitionManager.Get_Android_Root_Path());
} else if (strcmp(value, "dalvik") == 0 || strcmp(value, "dalvick") == 0 || strcmp(value, "dalvikcache") == 0 || strcmp(value, "dalvickcache") == 0) {
PartitionManager.Wipe_Dalvik_Cache();
} else if (strcmp(value, "data") == 0 || strcmp(value, "/data") == 0 || strcmp(value, "factory") == 0 || strcmp(value, "factoryreset") == 0) {
@@ -667,14 +667,14 @@ void OpenRecoveryScript::Run_CLI_Command(const char* command) {
int OpenRecoveryScript::remountrw(void)
{
- bool remount_system = PartitionManager.Is_Mounted_By_Path("/system");
+ bool remount_system = PartitionManager.Is_Mounted_By_Path(PartitionManager.Get_Android_Root_Path());
int op_status;
TWPartition* Part;
- if (!PartitionManager.UnMount_By_Path("/system", true)) {
+ if (!PartitionManager.UnMount_By_Path(PartitionManager.Get_Android_Root_Path(), true)) {
op_status = 1; // fail
} else {
- Part = PartitionManager.Find_Partition_By_Path("/system");
+ Part = PartitionManager.Find_Partition_By_Path(PartitionManager.Get_Android_Root_Path());
if (Part) {
DataManager::SetValue("tw_mount_system_ro", 0);
Part->Change_Mount_Read_Only(false);
diff --git a/partition.cpp b/partition.cpp
index e7b3d2d8a..1bdb91a35 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -430,7 +430,7 @@ bool TWPartition::Process_Fstab_Line(const char *fstab_line, bool Display_Error,
} else if (Is_File_System(Fstab_File_System)) {
Find_Actual_Block_Device();
Setup_File_System(Display_Error);
- if (Mount_Point == "/system") {
+ if (Mount_Point == PartitionManager.Get_Android_Root_Path()) {
Display_Name = "System";
Backup_Display_Name = Display_Name;
Storage_Name = Display_Name;
@@ -1504,7 +1504,7 @@ bool TWPartition::UnMount(bool Display_Error) {
int never_unmount_system;
DataManager::GetValue(TW_DONT_UNMOUNT_SYSTEM, never_unmount_system);
- if (never_unmount_system == 1 && Mount_Point == "/system")
+ if (never_unmount_system == 1 && Mount_Point == PartitionManager.Get_Android_Root_Path())
return true; // Never unmount system if you're not supposed to unmount it
if (Is_Storage && MTP_Storage_ID > 0)
@@ -2624,7 +2624,7 @@ bool TWPartition::Restore_Tar(PartitionSettings *part_settings) {
ret = true;
#ifdef HAVE_CAPABILITIES
// Restore capabilities to the run-as binary
- if (Mount_Point == "/system" && Mount(true) && TWFunc::Path_Exists("/system/bin/run-as")) {
+ if (Mount_Point == PartitionManager.Get_Android_Root_Path() && Mount(true) && TWFunc::Path_Exists("/system/bin/run-as")) {
struct vfs_cap_data cap_data;
uint64_t capabilities = (1 << CAP_SETUID) | (1 << CAP_SETGID);
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index 5c8a43732..da407fa69 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -1104,7 +1104,7 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
}
}
TWFunc::GUI_Operation_Text(TW_UPDATE_SYSTEM_DETAILS_TEXT, gui_parse_text("{@updating_system_details}"));
- UnMount_By_Path("/system", false);
+ UnMount_By_Path(Get_Android_Root_Path(), false);
Update_System_Details();
UnMount_Main_Partitions();
time(&rStop);
@@ -1490,7 +1490,7 @@ void TWPartitionManager::Update_System_Details(void) {
for (iter = Partitions.begin(); iter != Partitions.end(); iter++) {
(*iter)->Update_Size(true);
if ((*iter)->Can_Be_Mounted) {
- if ((*iter)->Mount_Point == "/system") {
+ if ((*iter)->Mount_Point == Get_Android_Root_Path()) {
int backup_display_size = (int)((*iter)->Backup_Size / 1048576LLU);
DataManager::SetValue(TW_BACKUP_SYSTEM_SIZE, backup_display_size);
} else if ((*iter)->Mount_Point == "/data" || (*iter)->Mount_Point == "/datadata") {
@@ -1859,7 +1859,7 @@ void TWPartitionManager::UnMount_Main_Partitions(void) {
TWPartition* Boot_Partition = Find_Partition_By_Path("/boot");
- UnMount_By_Path("/system", true);
+ UnMount_By_Path(Get_Android_Root_Path(), true);
if (!datamedia)
UnMount_By_Path("/data", true);
@@ -2726,6 +2726,13 @@ string TWPartitionManager::Get_Active_Slot_Display() {
return Active_Slot_Display;
}
+string TWPartitionManager::Get_Android_Root_Path() {
+ std::string Android_Root = getenv("ANDROID_ROOT");
+ if (Android_Root == "")
+ Android_Root = "/system";
+ return Android_Root;
+}
+
void TWPartitionManager::Remove_Uevent_Devices(const string& Mount_Point) {
std::vector<TWPartition*>::iterator iter;
diff --git a/partitions.hpp b/partitions.hpp
index d780fe560..094c718de 100644
--- a/partitions.hpp
+++ b/partitions.hpp
@@ -332,6 +332,7 @@ public:
void Set_Active_Slot(const string& Slot); // Sets the active slot to A or B
string Get_Active_Slot_Suffix(); // Returns active slot _a or _b
string Get_Active_Slot_Display(); // Returns active slot A or B for display purposes
+ string Get_Android_Root_Path(); // Returns path of ANDROID_ROOT environment variable
struct pollfd uevent_pfd; // Used for uevent code
void Remove_Uevent_Devices(const string& sysfs_path); // Removes subpartitions from the Partitions vector for a matched uevent device
void Handle_Uevent(const Uevent_Block_Data& uevent_data); // Handle uevent data
diff --git a/twrp-functions.cpp b/twrp-functions.cpp
index 40205c943..263593420 100644
--- a/twrp-functions.cpp
+++ b/twrp-functions.cpp
@@ -407,7 +407,7 @@ string TWFunc::Get_Root_Path(const string& Path) {
void TWFunc::install_htc_dumlock(void) {
int need_libs = 0;
- if (!PartitionManager.Mount_By_Path("/system", true))
+ if (!PartitionManager.Mount_By_Path(PartitionManager.Get_Android_Root_Path(), true))
return;
if (!PartitionManager.Mount_By_Path("/data", true))
@@ -809,19 +809,19 @@ string TWFunc::Get_Current_Date() {
}
string TWFunc::System_Property_Get(string Prop_Name) {
- bool mount_state = PartitionManager.Is_Mounted_By_Path("/system");
+ bool mount_state = PartitionManager.Is_Mounted_By_Path(PartitionManager.Get_Android_Root_Path());
std::vector<string> buildprop;
string propvalue;
- if (!PartitionManager.Mount_By_Path("/system", true))
+ if (!PartitionManager.Mount_By_Path(PartitionManager.Get_Android_Root_Path(), true))
return propvalue;
string prop_file = "/system/build.prop";
if (!TWFunc::Path_Exists(prop_file))
- prop_file = "/system/system/build.prop"; // for devices with system as a root file system (e.g. Pixel)
+ prop_file = PartitionManager.Get_Android_Root_Path() + "/system/build.prop"; // for devices with system as a root file system (e.g. Pixel)
if (TWFunc::read_file(prop_file, buildprop) != 0) {
- LOGINFO("Unable to open /system/build.prop for getting '%s'.\n", Prop_Name.c_str());
+ LOGINFO("Unable to open build.prop for getting '%s'.\n", Prop_Name.c_str());
DataManager::SetValue(TW_BACKUP_NAME, Get_Current_Date());
if (!mount_state)
- PartitionManager.UnMount_By_Path("/system", false);
+ PartitionManager.UnMount_By_Path(PartitionManager.Get_Android_Root_Path(), false);
return propvalue;
}
int line_count = buildprop.size();
@@ -834,12 +834,12 @@ string TWFunc::System_Property_Get(string Prop_Name) {
if (propname == Prop_Name) {
propvalue = buildprop.at(index).substr(end_pos + 1, buildprop.at(index).size());
if (!mount_state)
- PartitionManager.UnMount_By_Path("/system", false);
+ PartitionManager.UnMount_By_Path(PartitionManager.Get_Android_Root_Path(), false);
return propvalue;
}
}
if (!mount_state)
- PartitionManager.UnMount_By_Path("/system", false);
+ PartitionManager.UnMount_By_Path(PartitionManager.Get_Android_Root_Path(), false);
return propvalue;
}
@@ -1095,14 +1095,14 @@ std::string TWFunc::to_string(unsigned long value) {
}
void TWFunc::Disable_Stock_Recovery_Replace(void) {
- if (PartitionManager.Mount_By_Path("/system", false)) {
+ if (PartitionManager.Mount_By_Path(PartitionManager.Get_Android_Root_Path(), false)) {
// Disable flashing of stock recovery
if (TWFunc::Path_Exists("/system/recovery-from-boot.p")) {
rename("/system/recovery-from-boot.p", "/system/recovery-from-boot.bak");
gui_msg("rename_stock=Renamed stock recovery file in /system to prevent the stock ROM from replacing TWRP.");
sync();
}
- PartitionManager.UnMount_By_Path("/system", false);
+ PartitionManager.UnMount_By_Path(PartitionManager.Get_Android_Root_Path(), false);
}
}
diff --git a/twrp.cpp b/twrp.cpp
index 3102efdc0..2399c0bb3 100644
--- a/twrp.cpp
+++ b/twrp.cpp
@@ -333,7 +333,7 @@ int main(int argc, char **argv) {
#ifndef TW_OEM_BUILD
// Check if system has never been changed
- TWPartition* sys = PartitionManager.Find_Partition_By_Path("/system");
+ TWPartition* sys = PartitionManager.Find_Partition_By_Path(PartitionManager.Get_Android_Root_Path());
TWPartition* ven = PartitionManager.Find_Partition_By_Path("/vendor");
if (sys) {
diff --git a/twrpAdbBuFifo.cpp b/twrpAdbBuFifo.cpp
index f98eb0556..22bfa4054 100644
--- a/twrpAdbBuFifo.cpp
+++ b/twrpAdbBuFifo.cpp
@@ -309,7 +309,7 @@ bool twrpAdbBuFifo::Restore_ADB_Backup(void) {
part_settings.Part->Set_Backup_FileName(Backup_FileName);
PartitionManager.Set_Restore_Files(path);
- if (path.compare("/system") == 0) {
+ if (path.compare(PartitionManager.Get_Android_Root_Path()) == 0) {
if (part_settings.Part->Is_Read_Only()) {
if (!twadbbu::Write_TWERROR())
LOGERR("Unable to write to TWRP ADB Backup.\n");