From 701134e596301c2e16b8d3c6a3c4ab4e98e5f3eb Mon Sep 17 00:00:00 2001 From: Parker <20159000+jpburnett@users.noreply.github.com> Date: Mon, 22 Jul 2024 23:27:03 -0700 Subject: [PATCH] fix (#80) --- LICENSE | 2 +- dll/kernel32.cpp | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/LICENSE b/LICENSE index 366edae..b51b1a5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ 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 of this software and associated documentation files (the "Software"), to deal diff --git a/dll/kernel32.cpp b/dll/kernel32.cpp index f5195d8..4d71116 100644 --- a/dll/kernel32.cpp +++ b/dll/kernel32.cpp @@ -681,14 +681,19 @@ namespace kernel32 { std::string pattern; }; - bool findNextFile(FindFirstFileHandle *handle) { - if ((handle->it != std::filesystem::directory_iterator()) && (handle->pattern == "")) { - // The caller (ie `FindFirstFileA`) was passed a path with a - // trailing period (like `include/.`). This behavior doesn't seem - // to be documented, so we treat it as an "find any file on this - // directory". - return true; + bool findNextFile(FindFirstFileHandle* handle) { + // Check if iterator is valid before using it + if (!handle || handle->it == std::filesystem::directory_iterator()) { + return false; } + + // 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()) { std::filesystem::path path = *handle->it; if (fnmatch(handle->pattern.c_str(), path.filename().c_str(), 0) == 0) { @@ -696,6 +701,7 @@ namespace kernel32 { } handle->it++; } + return false; }