mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-11-04 20:44:02 +08:00 
			
		
		
		
	Merge pull request #764 from lioncash/move
file_util: Minor changes to ScanDirectoryTree() and ForeachDirectoryEntry()
This commit is contained in:
		
						commit
						ef163c1a15
					
				@ -396,12 +396,12 @@ bool CreateEmptyFile(const std::string& filename) {
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string& directory,
 | 
			
		||||
bool ForeachDirectoryEntry(u64* num_entries_out, const std::string& directory,
 | 
			
		||||
                           DirectoryEntryCallable callback) {
 | 
			
		||||
    LOG_TRACE(Common_Filesystem, "directory {}", directory);
 | 
			
		||||
 | 
			
		||||
    // How many files + directories we found
 | 
			
		||||
    unsigned found_entries = 0;
 | 
			
		||||
    u64 found_entries = 0;
 | 
			
		||||
 | 
			
		||||
    // Save the status of callback function
 | 
			
		||||
    bool callback_error = false;
 | 
			
		||||
@ -431,7 +431,7 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string& directo
 | 
			
		||||
        if (virtual_name == "." || virtual_name == "..")
 | 
			
		||||
            continue;
 | 
			
		||||
 | 
			
		||||
        unsigned ret_entries = 0;
 | 
			
		||||
        u64 ret_entries = 0;
 | 
			
		||||
        if (!callback(&ret_entries, directory, virtual_name)) {
 | 
			
		||||
            callback_error = true;
 | 
			
		||||
            break;
 | 
			
		||||
@ -455,9 +455,9 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string& directo
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry,
 | 
			
		||||
                           unsigned int recursion) {
 | 
			
		||||
    const auto callback = [recursion, &parent_entry](unsigned* num_entries_out,
 | 
			
		||||
u64 ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry,
 | 
			
		||||
                      unsigned int recursion) {
 | 
			
		||||
    const auto callback = [recursion, &parent_entry](u64* num_entries_out,
 | 
			
		||||
                                                     const std::string& directory,
 | 
			
		||||
                                                     const std::string& virtual_name) -> bool {
 | 
			
		||||
        FSTEntry entry;
 | 
			
		||||
@ -469,7 +469,7 @@ unsigned ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry,
 | 
			
		||||
            // is a directory, lets go inside if we didn't recurse to often
 | 
			
		||||
            if (recursion > 0) {
 | 
			
		||||
                entry.size = ScanDirectoryTree(entry.physicalName, entry, recursion - 1);
 | 
			
		||||
                *num_entries_out += (int)entry.size;
 | 
			
		||||
                *num_entries_out += entry.size;
 | 
			
		||||
            } else {
 | 
			
		||||
                entry.size = 0;
 | 
			
		||||
            }
 | 
			
		||||
@ -480,16 +480,16 @@ unsigned ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry,
 | 
			
		||||
        (*num_entries_out)++;
 | 
			
		||||
 | 
			
		||||
        // Push into the tree
 | 
			
		||||
        parent_entry.children.push_back(entry);
 | 
			
		||||
        parent_entry.children.push_back(std::move(entry));
 | 
			
		||||
        return true;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    unsigned num_entries;
 | 
			
		||||
    u64 num_entries;
 | 
			
		||||
    return ForeachDirectoryEntry(&num_entries, directory, callback) ? num_entries : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 {
 | 
			
		||||
        std::string new_path = directory + DIR_SEP_CHR + virtual_name;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -84,7 +84,7 @@ bool CreateEmptyFile(const std::string& filename);
 | 
			
		||||
 * @return whether handling the entry succeeded
 | 
			
		||||
 */
 | 
			
		||||
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.
 | 
			
		||||
@ -95,7 +95,7 @@ using DirectoryEntryCallable = std::function<bool(
 | 
			
		||||
 * @param callback The callback which will be called for each entry
 | 
			
		||||
 * @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);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -105,8 +105,8 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string& directo
 | 
			
		||||
 * @param recursion Number of children directories to read before giving up.
 | 
			
		||||
 * @return the total number of files/directories found
 | 
			
		||||
 */
 | 
			
		||||
unsigned ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry,
 | 
			
		||||
                           unsigned int recursion = 0);
 | 
			
		||||
u64 ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry,
 | 
			
		||||
                      unsigned int recursion = 0);
 | 
			
		||||
 | 
			
		||||
// deletes the given directory and anything under it. Returns true on success.
 | 
			
		||||
bool DeleteDirRecursively(const std::string& directory, unsigned int recursion = 256);
 | 
			
		||||
 | 
			
		||||
@ -92,13 +92,13 @@ RealVfsDirectory::RealVfsDirectory(const std::string& path_, Mode perms_)
 | 
			
		||||
      perms(perms_) {
 | 
			
		||||
    if (!FileUtil::Exists(path) && (perms == Mode::Write || perms == Mode::Append))
 | 
			
		||||
        FileUtil::CreateDir(path);
 | 
			
		||||
    unsigned size;
 | 
			
		||||
 | 
			
		||||
    if (perms == Mode::Append)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    FileUtil::ForeachDirectoryEntry(
 | 
			
		||||
        &size, path,
 | 
			
		||||
        [this](unsigned* entries_out, const std::string& directory, const std::string& filename) {
 | 
			
		||||
        nullptr, path,
 | 
			
		||||
        [this](u64* entries_out, const std::string& directory, const std::string& filename) {
 | 
			
		||||
            std::string full_path = directory + DIR_SEP + filename;
 | 
			
		||||
            if (FileUtil::IsDirectory(full_path))
 | 
			
		||||
                subdirectories.emplace_back(std::make_shared<RealVfsDirectory>(full_path, perms));
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ namespace Loader {
 | 
			
		||||
 | 
			
		||||
static std::string FindRomFS(const std::string& directory) {
 | 
			
		||||
    std::string filepath_romfs;
 | 
			
		||||
    const auto callback = [&filepath_romfs](unsigned*, const std::string& directory,
 | 
			
		||||
    const auto callback = [&filepath_romfs](u64*, const std::string& directory,
 | 
			
		||||
                                            const std::string& virtual_name) -> bool {
 | 
			
		||||
        const std::string physical_name = directory + virtual_name;
 | 
			
		||||
        if (FileUtil::IsDirectory(physical_name)) {
 | 
			
		||||
 | 
			
		||||
@ -394,7 +394,7 @@ void GameList::RefreshGameDirectory() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GameListWorker::AddFstEntriesToGameList(const std::string& dir_path, unsigned int recursion) {
 | 
			
		||||
    const auto callback = [this, recursion](unsigned* num_entries_out, const std::string& directory,
 | 
			
		||||
    const auto callback = [this, recursion](u64* num_entries_out, const std::string& directory,
 | 
			
		||||
                                            const std::string& virtual_name) -> bool {
 | 
			
		||||
        std::string physical_name = directory + DIR_SEP + virtual_name;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user