partition: Mount partition as RO when updating size
So that read-only partitions can also get mounted.
For example, Super volumes are RO when setting up.
Change-Id: I736a738963ba208cfdeaadc05c47d45b1bb7bf3e
(cherry picked from commit b52a4815d5c3a5be1fe56968f4480c788d2eaab2)
diff --git a/partition.cpp b/partition.cpp
index 4854fbe..294046b 100755
--- a/partition.cpp
+++ b/partition.cpp
@@ -2982,36 +2982,39 @@
}
bool TWPartition::Update_Size(bool Display_Error) {
- bool ret = false, Was_Already_Mounted = false;
+ bool ret = false, Was_Already_Mounted = false, ro = false;
Find_Actual_Block_Device();
if (Actual_Block_Device.empty())
return false;
+ ro = Mount_Read_Only;
+ Mount_Read_Only = true;
+
if (!Can_Be_Mounted && !Is_Encrypted) {
if (TWFunc::Path_Exists(Actual_Block_Device) && Find_Partition_Size()) {
Used = Size;
Backup_Size = Size;
- return true;
+ goto success;
}
- return false;
+ goto fail;
}
Was_Already_Mounted = Is_Mounted();
if (Removable || Is_Encrypted) {
if (!Mount(false))
- return true;
+ goto success;
} else if (!Mount(Display_Error))
- return false;
+ goto fail;
ret = Get_Size_Via_statfs(Display_Error);
if (!ret || Size == 0) {
if (!Get_Size_Via_df(Display_Error)) {
if (!Was_Already_Mounted)
UnMount(false);
- return false;
+ goto fail;
}
}
@@ -3025,7 +3028,7 @@
} else {
if (!Was_Already_Mounted)
UnMount(false);
- return false;
+ goto fail;
}
} else if (Has_Android_Secure) {
if (Mount(Display_Error))
@@ -3033,12 +3036,17 @@
else {
if (!Was_Already_Mounted)
UnMount(false);
- return false;
+ goto fail;
}
}
if (!Was_Already_Mounted)
UnMount(false);
+success:
+ Mount_Read_Only = ro;
return true;
+fail:
+ Mount_Read_Only = ro;
+ return false;
}
bool TWPartition::Find_Wildcard_Block_Devices(const string& Device) {