Merge pull request #5688 from shuffle2/improve-search-comparison
Use CompareStringOrdinal in DoFileSearch instead of _wcsicmp
This commit is contained in:
commit
a07611cf05
|
@ -9,6 +9,7 @@
|
||||||
#include "Common/FileSearch.h"
|
#include "Common/FileSearch.h"
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
#include <Windows.h>
|
||||||
#include <experimental/filesystem>
|
#include <experimental/filesystem>
|
||||||
namespace fs = std::experimental::filesystem;
|
namespace fs = std::experimental::filesystem;
|
||||||
#define HAS_STD_FILESYSTEM
|
#define HAS_STD_FILESYSTEM
|
||||||
|
@ -85,9 +86,10 @@ std::vector<std::string> DoFileSearch(const std::vector<std::string>& directorie
|
||||||
return std::any_of(native_exts.cbegin(), native_exts.cend(), [&native_path](const auto& ext) {
|
return std::any_of(native_exts.cbegin(), native_exts.cend(), [&native_path](const auto& ext) {
|
||||||
// TODO provide cross-platform compat for the comparison function, once more platforms
|
// TODO provide cross-platform compat for the comparison function, once more platforms
|
||||||
// support std::filesystem
|
// support std::filesystem
|
||||||
return native_path.length() >= ext.native().length() &&
|
int compare_len = static_cast<int>(ext.native().length());
|
||||||
_wcsicmp(&native_path.c_str()[native_path.length() - ext.native().length()],
|
return native_path.length() >= compare_len &&
|
||||||
ext.c_str()) == 0;
|
CompareStringOrdinal(&native_path.c_str()[native_path.length() - compare_len],
|
||||||
|
compare_len, ext.c_str(), compare_len, TRUE) == CSTR_EQUAL;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -102,12 +104,12 @@ std::vector<std::string> DoFileSearch(const std::vector<std::string>& directorie
|
||||||
if (recursive)
|
if (recursive)
|
||||||
{
|
{
|
||||||
// TODO use fs::directory_options::follow_directory_symlink ?
|
// TODO use fs::directory_options::follow_directory_symlink ?
|
||||||
for (auto& entry : fs::recursive_directory_iterator(fs::path(directory.c_str())))
|
for (auto& entry : fs::recursive_directory_iterator(fs::path(directory)))
|
||||||
add_filtered(entry);
|
add_filtered(entry);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (auto& entry : fs::directory_iterator(fs::path(directory.c_str())))
|
for (auto& entry : fs::directory_iterator(fs::path(directory)))
|
||||||
add_filtered(entry);
|
add_filtered(entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue