diff options
| -rw-r--r-- | src/common/file_util.cpp | 18 | 
1 files changed, 14 insertions, 4 deletions
| diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp index 4c7113390..052c0ecd6 100644 --- a/src/common/file_util.cpp +++ b/src/common/file_util.cpp @@ -427,6 +427,9 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directo      // How many files + directories we found      unsigned found_entries = 0; +    // Save the status of callback function +    bool callback_error = false; +  #ifdef _WIN32      // Find the first file in the directory.      WIN32_FIND_DATA ffd; @@ -455,8 +458,10 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directo              continue;          unsigned ret_entries; -        if (!callback(&ret_entries, directory, virtual_name)) +        if (!callback(&ret_entries, directory, virtual_name)) { +            callback_error = true;              break; +        }          found_entries += ret_entries;  #ifdef _WIN32 @@ -467,9 +472,14 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directo      closedir(dirp);  #endif -    // num_entries_out is allowed to be specified nullptr, in which case we shouldn't try to set it -    if (num_entries_out != nullptr) -        *num_entries_out = found_entries; +    if (!callback_error) { +        // num_entries_out is allowed to be specified nullptr, in which case we shouldn't try to set it +        if (num_entries_out != nullptr) +            *num_entries_out = found_entries; +        return true; +    } else { +        return false; +    }  }  unsigned ScanDirectoryTree(const std::string &directory, FSTEntry& parent_entry) | 
