Avoid recursion in filesystem scanning, closes #3838

This commit is contained in:
Juan Linietsky 2016-06-28 08:26:07 -03:00
parent e4eb025bfe
commit 41a26528e4
1 changed files with 27 additions and 18 deletions

View File

@ -621,10 +621,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;
@ -646,6 +654,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir,DirAccess
} }
da->change_dir(".."); da->change_dir("..");
}
} else { } else {
ERR_PRINTS(TTR("Cannot go into subdir:")+" "+E->get()); ERR_PRINTS(TTR("Cannot go into subdir:")+" "+E->get());
} }