Avoid recursion in filesystem scanning, closes #3838

(cherry picked from commit 41a26528e4)
This commit is contained in:
Juan Linietsky 2016-06-28 08:26:07 -03:00 committed by Rémi Verschelde
parent 3ce0380ba4
commit a2d2eb9a63
1 changed files with 27 additions and 18 deletions

View File

@ -583,10 +583,18 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir,DirAccess
int total = dirs.size()+files.size(); int total = dirs.size()+files.size();
int idx=0; int idx=0;
for (List<String>::Element *E=dirs.front();E;E=E->next(),idx++) { for (List<String>::Element *E=dirs.front();E;E=E->next(),idx++) {
if (da->change_dir(E->get())==OK) { if (da->change_dir(E->get())==OK) {
String d = da->get_current_dir();
if (d==cd || !d.begins_with(cd)) {
da->change_dir(cd); //avoid recursion
} else {
EditorFileSystemDirectory *efd = memnew( EditorFileSystemDirectory ); EditorFileSystemDirectory *efd = memnew( EditorFileSystemDirectory );
efd->parent=p_dir; efd->parent=p_dir;
@ -608,6 +616,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir,DirAccess
} }
da->change_dir(".."); da->change_dir("..");
}
} else { } else {
ERR_PRINTS("Can't go into subdir: "+E->get()); ERR_PRINTS("Can't go into subdir: "+E->get());
} }