Fix crash while loading config due to incorrect tw_storage_path
Change-Id: Ia5957efe616defa4272501cd8f31d26d394077bb
Signed-off-by: Vojtech Bocek <vbocek@gmail.com>
diff --git a/data.cpp b/data.cpp
index 7be0b03..72018f9 100644
--- a/data.cpp
+++ b/data.cpp
@@ -280,7 +280,9 @@
fclose(in);
string current = GetCurrentStoragePath();
TWPartition* Part = PartitionManager.Find_Partition_By_Path(current);
- if (current != Part->Storage_Path && Part->Mount(false)) {
+ if(!Part)
+ Part = PartitionManager.Get_Default_Storage_Partition();
+ if (Part && current != Part->Storage_Path && Part->Mount(false)) {
LOGINFO("LoadValues setting storage path to '%s'\n", Part->Storage_Path.c_str());
SetValue("tw_storage_path", Part->Storage_Path);
} else {
@@ -586,11 +588,16 @@
mConstValues.insert(make_pair("false", "0"));
mConstValues.insert(make_pair(TW_VERSION_VAR, TW_VERSION_STR));
- mValues.insert(make_pair("tw_storage_path", make_pair("/", 1)));
mValues.insert(make_pair("tw_button_vibrate", make_pair("80", 1)));
mValues.insert(make_pair("tw_keyboard_vibrate", make_pair("40", 1)));
mValues.insert(make_pair("tw_action_vibrate", make_pair("160", 1)));
+ TWPartition *store = PartitionManager.Get_Default_Storage_Partition();
+ if(store)
+ mValues.insert(make_pair("tw_storage_path", make_pair(store->Storage_Path.c_str(), 1)));
+ else
+ mValues.insert(make_pair("tw_storage_path", make_pair("/", 1)));
+
#ifdef TW_FORCE_CPUINFO_FOR_DEVICE_ID
printf("TW_FORCE_CPUINFO_FOR_DEVICE_ID := true\n");
#endif
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index 9d8c273..be4ba63 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -1955,3 +1955,19 @@
}
fclose(fp);
}
+
+TWPartition *TWPartitionManager::Get_Default_Storage_Partition()
+{
+ TWPartition *res = NULL;
+ for (std::vector<TWPartition*>::iterator iter = Partitions.begin(); iter != Partitions.end(); ++iter) {
+ if(!(*iter)->Is_Storage)
+ continue;
+
+ if((*iter)->Is_Settings_Storage)
+ return *iter;
+
+ if(!res)
+ res = *iter;
+ }
+ return res;
+}
diff --git a/partitions.hpp b/partitions.hpp
index cdb4f79..7341fe0 100644
--- a/partitions.hpp
+++ b/partitions.hpp
@@ -206,6 +206,7 @@
void Mount_All_Storage(void); // Mounts all storage locations
void UnMount_Main_Partitions(void); // Unmounts system and data if not data/media and boot if boot is mountable
int Partition_SDCard(void); // Repartitions the sdcard
+ TWPartition *Get_Default_Storage_Partition(); // Returns a pointer to a default storage partition
int Fix_Permissions();
void Get_Partition_List(string ListType, std::vector<PartitionList> *Partition_List);