diff options
Diffstat (limited to 'src/common')
| -rw-r--r-- | src/common/file_util.cpp | 22 | ||||
| -rw-r--r-- | src/common/file_util.h | 7 |
2 files changed, 12 insertions, 17 deletions
diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp index 17af7c385..84fe95c8c 100644 --- a/src/common/file_util.cpp +++ b/src/common/file_util.cpp | |||
| @@ -434,7 +434,7 @@ bool CreateEmptyFile(const std::string &filename) | |||
| 434 | } | 434 | } |
| 435 | 435 | ||
| 436 | 436 | ||
| 437 | bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directory, DirectoryEntryCallable callback, unsigned int recursion) | 437 | bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directory, DirectoryEntryCallable callback) |
| 438 | { | 438 | { |
| 439 | LOG_TRACE(Common_Filesystem, "directory %s", directory.c_str()); | 439 | LOG_TRACE(Common_Filesystem, "directory %s", directory.c_str()); |
| 440 | 440 | ||
| @@ -472,7 +472,7 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directo | |||
| 472 | continue; | 472 | continue; |
| 473 | 473 | ||
| 474 | unsigned ret_entries = 0; | 474 | unsigned ret_entries = 0; |
| 475 | if (!callback(&ret_entries, directory, virtual_name, recursion)) { | 475 | if (!callback(&ret_entries, directory, virtual_name)) { |
| 476 | callback_error = true; | 476 | callback_error = true; |
| 477 | break; | 477 | break; |
| 478 | } | 478 | } |
| @@ -497,10 +497,9 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directo | |||
| 497 | 497 | ||
| 498 | unsigned ScanDirectoryTree(const std::string &directory, FSTEntry& parent_entry, unsigned int recursion) | 498 | unsigned ScanDirectoryTree(const std::string &directory, FSTEntry& parent_entry, unsigned int recursion) |
| 499 | { | 499 | { |
| 500 | const auto callback = [&parent_entry](unsigned* num_entries_out, | 500 | const auto callback = [recursion, &parent_entry](unsigned* num_entries_out, |
| 501 | const std::string& directory, | 501 | const std::string& directory, |
| 502 | const std::string& virtual_name, | 502 | const std::string& virtual_name) -> bool { |
| 503 | unsigned int recursion) -> bool { | ||
| 504 | FSTEntry entry; | 503 | FSTEntry entry; |
| 505 | entry.virtualName = virtual_name; | 504 | entry.virtualName = virtual_name; |
| 506 | entry.physicalName = directory + DIR_SEP + virtual_name; | 505 | entry.physicalName = directory + DIR_SEP + virtual_name; |
| @@ -526,16 +525,15 @@ unsigned ScanDirectoryTree(const std::string &directory, FSTEntry& parent_entry, | |||
| 526 | }; | 525 | }; |
| 527 | 526 | ||
| 528 | unsigned num_entries; | 527 | unsigned num_entries; |
| 529 | return ForeachDirectoryEntry(&num_entries, directory, callback, recursion) ? num_entries : 0; | 528 | return ForeachDirectoryEntry(&num_entries, directory, callback) ? num_entries : 0; |
| 530 | } | 529 | } |
| 531 | 530 | ||
| 532 | 531 | ||
| 533 | bool DeleteDirRecursively(const std::string &directory, unsigned int recursion) | 532 | bool DeleteDirRecursively(const std::string &directory, unsigned int recursion) |
| 534 | { | 533 | { |
| 535 | const static auto callback = [](unsigned* num_entries_out, | 534 | const auto callback = [recursion](unsigned* num_entries_out, |
| 536 | const std::string& directory, | 535 | const std::string& directory, |
| 537 | const std::string& virtual_name, | 536 | const std::string& virtual_name) -> bool { |
| 538 | unsigned int recursion) -> bool { | ||
| 539 | std::string new_path = directory + DIR_SEP_CHR + virtual_name; | 537 | std::string new_path = directory + DIR_SEP_CHR + virtual_name; |
| 540 | 538 | ||
| 541 | if (IsDirectory(new_path)) { | 539 | if (IsDirectory(new_path)) { |
| @@ -546,7 +544,7 @@ bool DeleteDirRecursively(const std::string &directory, unsigned int recursion) | |||
| 546 | return Delete(new_path); | 544 | return Delete(new_path); |
| 547 | }; | 545 | }; |
| 548 | 546 | ||
| 549 | if (!ForeachDirectoryEntry(nullptr, directory, callback, recursion)) | 547 | if (!ForeachDirectoryEntry(nullptr, directory, callback)) |
| 550 | return false; | 548 | return false; |
| 551 | 549 | ||
| 552 | // Delete the outermost directory | 550 | // Delete the outermost directory |
diff --git a/src/common/file_util.h b/src/common/file_util.h index 32ae2dc57..7ad7ee829 100644 --- a/src/common/file_util.h +++ b/src/common/file_util.h | |||
| @@ -105,13 +105,11 @@ bool CreateEmptyFile(const std::string &filename); | |||
| 105 | * @param num_entries_out to be assigned by the callable with the number of iterated directory entries, never null | 105 | * @param num_entries_out to be assigned by the callable with the number of iterated directory entries, never null |
| 106 | * @param directory the path to the enclosing directory | 106 | * @param directory the path to the enclosing directory |
| 107 | * @param virtual_name the entry name, without any preceding directory info | 107 | * @param virtual_name the entry name, without any preceding directory info |
| 108 | * @param recursion Number of children directory to read before giving up | ||
| 109 | * @return whether handling the entry succeeded | 108 | * @return whether handling the entry succeeded |
| 110 | */ | 109 | */ |
| 111 | using DirectoryEntryCallable = std::function<bool(unsigned* num_entries_out, | 110 | using DirectoryEntryCallable = std::function<bool(unsigned* num_entries_out, |
| 112 | const std::string& directory, | 111 | const std::string& directory, |
| 113 | const std::string& virtual_name, | 112 | const std::string& virtual_name)>; |
| 114 | unsigned int recursion)>; | ||
| 115 | 113 | ||
| 116 | /** | 114 | /** |
| 117 | * Scans a directory, calling the callback for each file/directory contained within. | 115 | * Scans a directory, calling the callback for each file/directory contained within. |
| @@ -119,10 +117,9 @@ using DirectoryEntryCallable = std::function<bool(unsigned* num_entries_out, | |||
| 119 | * @param num_entries_out assigned by the function with the number of iterated directory entries, can be null | 117 | * @param num_entries_out assigned by the function with the number of iterated directory entries, can be null |
| 120 | * @param directory the directory to scan | 118 | * @param directory the directory to scan |
| 121 | * @param callback The callback which will be called for each entry | 119 | * @param callback The callback which will be called for each entry |
| 122 | * @param recursion Number of children directories to read before giving up | ||
| 123 | * @return whether scanning the directory succeeded | 120 | * @return whether scanning the directory succeeded |
| 124 | */ | 121 | */ |
| 125 | bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directory, DirectoryEntryCallable callback, unsigned int recursion = 0); | 122 | bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directory, DirectoryEntryCallable callback); |
| 126 | 123 | ||
| 127 | /** | 124 | /** |
| 128 | * Scans the directory tree, storing the results. | 125 | * Scans the directory tree, storing the results. |