Reduce startup time on Windows by using std::filesystem::canonical

realpath() apparently doesn't handle Windows symlinks very well. This
causes plugin::Manager and ScannedFile to rescan a bunch of extra
paths that they should be skipping. This commit reduces the startup
time on Windows by 3-4 seconds (~8.5s to ~5s).
This commit is contained in:
Tim Wojtulewicz 2023-01-18 13:10:33 -07:00 committed by Tim Wojtulewicz
parent d6ce5894a7
commit db161bd6df
4 changed files with 17 additions and 14 deletions

View file

@ -12,7 +12,7 @@ namespace zeek::detail
{
// Script file we have already scanned (or are in the process of scanning).
// They are identified by normalized realpath.
// They are identified by normalized canonical path.
class ScannedFile
{
@ -30,7 +30,7 @@ public:
bool skipped; // This ScannedFile was @unload'd.
bool prefixes_checked; // If loading prefixes for this file has been tried.
std::string name;
std::string canonical_path; // normalized, absolute path via realpath()
std::string canonical_path; // normalized, absolute path via std::filesystem::canonical()
static auto constexpr canonical_stdin_path = "<stdin>";
};