Use only std::string in TWFunc::Get_Folder_Size

* Fixes crash which could occur with too deep path because
  of too much memory allocated on stack
diff --git a/twrp-functions.cpp b/twrp-functions.cpp
index 4a5dec2..f2dcf7c 100644
--- a/twrp-functions.cpp
+++ b/twrp-functions.cpp
@@ -203,20 +203,17 @@
 	return true;
 }
 
-unsigned long long TWFunc::Get_Folder_Size(string Path, bool Display_Error) {
+unsigned long long TWFunc::Get_Folder_Size(const string& Path, bool Display_Error) {
 	DIR* d;
 	struct dirent* de;
 	struct stat st;
-	char path2[4096], filename[4096];
 	unsigned long long dusize = 0;
 	unsigned long long dutemp = 0;
-	// Make a copy of path in case the data in the pointer gets overwritten later
-	strcpy(path2, Path.c_str());
 
-	d = opendir(path2);
+	d = opendir(Path.c_str());
 	if (d == NULL)
 	{
-		LOGE("error opening '%s'\n", path2);
+		LOGE("error opening '%s'\n", Path.c_str());
 		LOGE("error: %s\n", strerror(errno));
 		return 0;
 	}
@@ -225,19 +222,13 @@
 	{
 		if (de->d_type == DT_DIR && strcmp(de->d_name, ".") != 0 && strcmp(de->d_name, "..") != 0)
 		{
-			strcpy(filename, path2);
-			strcat(filename, "/");
-			strcat(filename, de->d_name);
-			dutemp = Get_Folder_Size(filename, Display_Error);
+			dutemp = Get_Folder_Size((Path + "/" + de->d_name), Display_Error);
 			dusize += dutemp;
 			dutemp = 0;
 		}
 		else if (de->d_type == DT_REG)
 		{
-			strcpy(filename, path2);
-			strcat(filename, "/");
-			strcat(filename, de->d_name);
-			stat(filename, &st);
+			stat((Path + "/" + de->d_name).c_str(), &st);
 			dusize += (unsigned long long)(st.st_size);
 		}
 	}
diff --git a/twrp-functions.hpp b/twrp-functions.hpp
index 8cd3445..fc2d647 100644
--- a/twrp-functions.hpp
+++ b/twrp-functions.hpp
@@ -28,7 +28,7 @@
 	static void htc_dumlock_restore_original_boot(void);                        // Restores the backup of boot from HTC Dumlock
 	static void htc_dumlock_reflash_recovery_to_boot(void);                     // Reflashes the current recovery to boot
 	static int Recursive_Mkdir(string Path);                                    // Recursively makes the entire path
-	static unsigned long long Get_Folder_Size(string Path, bool Display_Error); // Gets the size of a folder and all of its subfolders using dirent and stat
+	static unsigned long long Get_Folder_Size(const string& Path, bool Display_Error); // Gets the size of a folder and all of its subfolders using dirent and stat
 	static bool Path_Exists(string Path);                                       // Returns true if the path exists
 	static void GUI_Operation_Text(string Read_Value, string Default_Text);     // Updates text for display in the GUI, e.g. Backing up %partition name%
 	static void GUI_Operation_Text(string Read_Value, string Partition_Name, string Default_Text); // Same as above but includes partition name