mirror of
https://github.com/CTCaer/CTCaer-TWRP.git
synced 2024-11-27 12:10:35 +00:00
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
This commit is contained in:
parent
5d3589ecea
commit
2e97ec58b9
@ -203,20 +203,17 @@ int TWFunc::Recursive_Mkdir(string Path) {
|
||||
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 @@ unsigned long long TWFunc::Get_Folder_Size(string Path, bool Display_Error) {
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ public:
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user