forked from ShuriZma/suyu
1
0
Fork 0

file_util: Use a u64 to represent number of entries

This avoids a truncating cast on size. I doubt we'd ever traverse a
directory this large, however we also shouldn't truncate sizes away.
This commit is contained in:
Lioncash 2018-07-21 22:36:19 -04:00
parent 964154ce44
commit 0ba7fe4ab1
5 changed files with 18 additions and 18 deletions

View File

@ -396,12 +396,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;
@ -431,7 +431,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;
@ -455,9 +455,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;
@ -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 // 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;
} }
@ -484,12 +484,12 @@ unsigned ScanDirectoryTree(const std::string& directory, FSTEntry& parent_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;

View File

@ -84,7 +84,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.
@ -95,7 +95,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);
/** /**
@ -105,7 +105,7 @@ 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.

View File

@ -92,13 +92,13 @@ RealVfsDirectory::RealVfsDirectory(const std::string& path_, Mode perms_)
perms(perms_) { perms(perms_) {
if (!FileUtil::Exists(path) && (perms == Mode::Write || perms == Mode::Append)) if (!FileUtil::Exists(path) && (perms == Mode::Write || perms == Mode::Append))
FileUtil::CreateDir(path); FileUtil::CreateDir(path);
unsigned size;
if (perms == Mode::Append) if (perms == Mode::Append)
return; return;
FileUtil::ForeachDirectoryEntry( FileUtil::ForeachDirectoryEntry(
&size, path, nullptr, path,
[this](unsigned* entries_out, const std::string& directory, const std::string& filename) { [this](u64* entries_out, const std::string& directory, const std::string& filename) {
std::string full_path = directory + DIR_SEP + filename; std::string full_path = directory + DIR_SEP + filename;
if (FileUtil::IsDirectory(full_path)) if (FileUtil::IsDirectory(full_path))
subdirectories.emplace_back(std::make_shared<RealVfsDirectory>(full_path, perms)); subdirectories.emplace_back(std::make_shared<RealVfsDirectory>(full_path, perms));

View File

@ -20,7 +20,7 @@ namespace Loader {
static std::string FindRomFS(const std::string& directory) { static std::string FindRomFS(const std::string& directory) {
std::string filepath_romfs; 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& virtual_name) -> bool {
const std::string physical_name = directory + virtual_name; const std::string physical_name = directory + virtual_name;
if (FileUtil::IsDirectory(physical_name)) { if (FileUtil::IsDirectory(physical_name)) {

View File

@ -394,7 +394,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) {
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 { const std::string& virtual_name) -> bool {
std::string physical_name = directory + DIR_SEP + virtual_name; std::string physical_name = directory + DIR_SEP + virtual_name;