mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 05:10:03 +00:00 
			
		
		
		
	Merge pull request #4033 from zhaowenlan1779/port-yuzu-764
Port "file_util: Minor changes to ScanDirectoryTree() and ForeachDirectoryEntry()" from yuzu
This commit is contained in:
		
						commit
						d5333c37de
					
				
					 3 changed files with 15 additions and 15 deletions
				
			
		|  | @ -630,7 +630,7 @@ void GameList::RefreshGameDirectory() { | ||||||
| 
 | 
 | ||||||
| void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsigned int recursion, | void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsigned int recursion, | ||||||
|                                              GameListDir* parent_dir) { |                                              GameListDir* parent_dir) { | ||||||
|     const auto callback = [this, recursion, parent_dir](unsigned* num_entries_out, |     const auto callback = [this, recursion, parent_dir](u64* num_entries_out, | ||||||
|                                                         const std::string& directory, |                                                         const std::string& directory, | ||||||
|                                                         const std::string& virtual_name) -> bool { |                                                         const std::string& virtual_name) -> bool { | ||||||
|         std::string physical_name = directory + DIR_SEP + virtual_name; |         std::string physical_name = directory + DIR_SEP + virtual_name; | ||||||
|  |  | ||||||
|  | @ -384,12 +384,12 @@ bool CreateEmptyFile(const std::string& filename) { | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string& directory, | bool ForeachDirectoryEntry(u64* num_entries_out, const std::string& directory, | ||||||
|                            DirectoryEntryCallable callback) { |                            DirectoryEntryCallable callback) { | ||||||
|     LOG_TRACE(Common_Filesystem, "directory {}", directory); |     LOG_TRACE(Common_Filesystem, "directory {}", directory); | ||||||
| 
 | 
 | ||||||
|     // How many files + directories we found
 |     // How many files + directories we found
 | ||||||
|     unsigned found_entries = 0; |     u64 found_entries = 0; | ||||||
| 
 | 
 | ||||||
|     // Save the status of callback function
 |     // Save the status of callback function
 | ||||||
|     bool callback_error = false; |     bool callback_error = false; | ||||||
|  | @ -419,7 +419,7 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string& directo | ||||||
|         if (virtual_name == "." || virtual_name == "..") |         if (virtual_name == "." || virtual_name == "..") | ||||||
|             continue; |             continue; | ||||||
| 
 | 
 | ||||||
|         unsigned ret_entries = 0; |         u64 ret_entries = 0; | ||||||
|         if (!callback(&ret_entries, directory, virtual_name)) { |         if (!callback(&ret_entries, directory, virtual_name)) { | ||||||
|             callback_error = true; |             callback_error = true; | ||||||
|             break; |             break; | ||||||
|  | @ -443,9 +443,9 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string& directo | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| unsigned ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry, | u64 ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry, | ||||||
|                            unsigned int recursion) { |                       unsigned int recursion) { | ||||||
|     const auto callback = [recursion, &parent_entry](unsigned* num_entries_out, |     const auto callback = [recursion, &parent_entry](u64* num_entries_out, | ||||||
|                                                      const std::string& directory, |                                                      const std::string& directory, | ||||||
|                                                      const std::string& virtual_name) -> bool { |                                                      const std::string& virtual_name) -> bool { | ||||||
|         FSTEntry entry; |         FSTEntry entry; | ||||||
|  | @ -457,7 +457,7 @@ unsigned ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry, | ||||||
|             // is a directory, lets go inside if we didn't recurse to often
 |             // is a directory, lets go inside if we didn't recurse to often
 | ||||||
|             if (recursion > 0) { |             if (recursion > 0) { | ||||||
|                 entry.size = ScanDirectoryTree(entry.physicalName, entry, recursion - 1); |                 entry.size = ScanDirectoryTree(entry.physicalName, entry, recursion - 1); | ||||||
|                 *num_entries_out += (int)entry.size; |                 *num_entries_out += entry.size; | ||||||
|             } else { |             } else { | ||||||
|                 entry.size = 0; |                 entry.size = 0; | ||||||
|             } |             } | ||||||
|  | @ -468,16 +468,16 @@ unsigned ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry, | ||||||
|         (*num_entries_out)++; |         (*num_entries_out)++; | ||||||
| 
 | 
 | ||||||
|         // Push into the tree
 |         // Push into the tree
 | ||||||
|         parent_entry.children.push_back(entry); |         parent_entry.children.push_back(std::move(entry)); | ||||||
|         return true; |         return true; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     unsigned num_entries; |     u64 num_entries; | ||||||
|     return ForeachDirectoryEntry(&num_entries, directory, callback) ? num_entries : 0; |     return ForeachDirectoryEntry(&num_entries, directory, callback) ? num_entries : 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool DeleteDirRecursively(const std::string& directory, unsigned int recursion) { | bool DeleteDirRecursively(const std::string& directory, unsigned int recursion) { | ||||||
|     const auto callback = [recursion](unsigned* num_entries_out, const std::string& directory, |     const auto callback = [recursion](u64* num_entries_out, const std::string& directory, | ||||||
|                                       const std::string& virtual_name) -> bool { |                                       const std::string& virtual_name) -> bool { | ||||||
|         std::string new_path = directory + DIR_SEP_CHR + virtual_name; |         std::string new_path = directory + DIR_SEP_CHR + virtual_name; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -85,7 +85,7 @@ bool CreateEmptyFile(const std::string& filename); | ||||||
|  * @return whether handling the entry succeeded |  * @return whether handling the entry succeeded | ||||||
|  */ |  */ | ||||||
| using DirectoryEntryCallable = std::function<bool( | using DirectoryEntryCallable = std::function<bool( | ||||||
|     unsigned* num_entries_out, const std::string& directory, const std::string& virtual_name)>; |     u64* num_entries_out, const std::string& directory, const std::string& virtual_name)>; | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Scans a directory, calling the callback for each file/directory contained within. |  * Scans a directory, calling the callback for each file/directory contained within. | ||||||
|  | @ -96,7 +96,7 @@ using DirectoryEntryCallable = std::function<bool( | ||||||
|  * @param callback The callback which will be called for each entry |  * @param callback The callback which will be called for each entry | ||||||
|  * @return whether scanning the directory succeeded |  * @return whether scanning the directory succeeded | ||||||
|  */ |  */ | ||||||
| bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string& directory, | bool ForeachDirectoryEntry(u64* num_entries_out, const std::string& directory, | ||||||
|                            DirectoryEntryCallable callback); |                            DirectoryEntryCallable callback); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | @ -106,8 +106,8 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string& directo | ||||||
|  * @param recursion Number of children directories to read before giving up. |  * @param recursion Number of children directories to read before giving up. | ||||||
|  * @return the total number of files/directories found |  * @return the total number of files/directories found | ||||||
|  */ |  */ | ||||||
| unsigned ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry, | u64 ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry, | ||||||
|                            unsigned int recursion = 0); |                       unsigned int recursion = 0); | ||||||
| 
 | 
 | ||||||
| // deletes the given directory and anything under it. Returns true on success.
 | // deletes the given directory and anything under it. Returns true on success.
 | ||||||
| bool DeleteDirRecursively(const std::string& directory, unsigned int recursion = 256); | bool DeleteDirRecursively(const std::string& directory, unsigned int recursion = 256); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue