This commit is contained in:
Parker 2024-07-22 23:27:03 -07:00 committed by GitHub
parent ca9364a0df
commit 701134e596
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 8 deletions

View File

@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2022 Ash Wolf Copyright (c) 2022-2024 Ash Wolf & Decompals
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -681,14 +681,19 @@ namespace kernel32 {
std::string pattern; std::string pattern;
}; };
bool findNextFile(FindFirstFileHandle *handle) { bool findNextFile(FindFirstFileHandle* handle) {
if ((handle->it != std::filesystem::directory_iterator()) && (handle->pattern == "")) { // Check if iterator is valid before using it
// The caller (ie `FindFirstFileA`) was passed a path with a if (!handle || handle->it == std::filesystem::directory_iterator()) {
// trailing period (like `include/.`). This behavior doesn't seem return false;
// to be documented, so we treat it as an "find any file on this
// directory".
return true;
} }
// If pattern is empty, just iterate
if (handle->pattern.empty()) {
handle->it++;
return handle->it != std::filesystem::directory_iterator();
}
// Look for a matching file with the pattern
while (handle->it != std::filesystem::directory_iterator()) { while (handle->it != std::filesystem::directory_iterator()) {
std::filesystem::path path = *handle->it; std::filesystem::path path = *handle->it;
if (fnmatch(handle->pattern.c_str(), path.filename().c_str(), 0) == 0) { if (fnmatch(handle->pattern.c_str(), path.filename().c_str(), 0) == 0) {
@ -696,6 +701,7 @@ namespace kernel32 {
} }
handle->it++; handle->it++;
} }
return false; return false;
} }