[*] Micro path resolve optimizations
This commit is contained in:
parent
42325b08b8
commit
7c44d3a02c
@ -17,7 +17,7 @@ namespace Aurora::IO::FS
|
||||
return (c == '.') || (c == '!') || (c == '~') || (c == '?');
|
||||
}
|
||||
|
||||
static void ResolveAbsolutePath(const AuString &path, AuString &result)
|
||||
static void ResolveAbsolutePath(bool requireMountExpand, bool requireSanitization, const AuString &path, AuString &result)
|
||||
{
|
||||
AuString buffer;
|
||||
bool isResource {};
|
||||
@ -27,7 +27,7 @@ namespace Aurora::IO::FS
|
||||
/**
|
||||
Resolve special character prefixes
|
||||
*/
|
||||
if (path.size() > 2)
|
||||
if ((path.size() > 2) && (requireMountExpand))
|
||||
{
|
||||
if (path[1] == kPathSplitter)
|
||||
{
|
||||
@ -69,6 +69,8 @@ namespace Aurora::IO::FS
|
||||
buffer += path;
|
||||
}
|
||||
|
||||
if (requireSanitization)
|
||||
{
|
||||
/**
|
||||
Quickly handle the edge case in some modern UNIX derived systems, and in
|
||||
Windows UNC paths, where paths may start with '//' or '\\' respectively
|
||||
@ -90,7 +92,7 @@ namespace Aurora::IO::FS
|
||||
say a kernel, and we we're trying to avoid string exploits by potential
|
||||
attackers. I'm sure that would never happen to poor anticheat devs.
|
||||
*/
|
||||
const auto parts = SplitString(buffer, AuString(1, kPathSplitter)); /// zzzz im going to FUCKING SLEEP
|
||||
const auto parts = SplitString(buffer, AuString(1, kPathSplitter), true /*ignore empty tokens*/); /// zzzz im going to SLEEP
|
||||
for (const auto &ch : parts) // can you tell why FIO shouldn't be in hot paths yet?
|
||||
{
|
||||
if (ch == "..")
|
||||
@ -122,6 +124,11 @@ namespace Aurora::IO::FS
|
||||
{
|
||||
result.resize(i);
|
||||
}
|
||||
}
|
||||
else // !requireSanitization
|
||||
{
|
||||
result = buffer;
|
||||
}
|
||||
|
||||
if (isResource)
|
||||
{
|
||||
@ -140,6 +147,7 @@ namespace Aurora::IO::FS
|
||||
void /* internal, local export */ _NormalizePath(AuString &str)
|
||||
{
|
||||
bool requiresExpanding = false;
|
||||
bool requiresMountUpdate = false;
|
||||
|
||||
requiresExpanding = str.size() && IsMagicCharacter(str[0]);
|
||||
|
||||
@ -179,16 +187,16 @@ namespace Aurora::IO::FS
|
||||
auto c = str[0];
|
||||
if ((c == '.') || (c == '~') || (c == '!') || (c == '?'))
|
||||
{
|
||||
requiresExpanding = true;
|
||||
requiresMountUpdate = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// worst case -> yea have fun
|
||||
if (requiresExpanding)
|
||||
if (requiresExpanding || requiresMountUpdate)
|
||||
{
|
||||
AuString temp;
|
||||
ResolveAbsolutePath(str, temp);
|
||||
ResolveAbsolutePath(requiresMountUpdate, requiresExpanding, str, temp);
|
||||
str = temp;
|
||||
}
|
||||
}
|
||||
|
@ -176,7 +176,7 @@ namespace Aurora::RNG
|
||||
AUKN_SYM void ReadFastRNG(void *in, AuUInt length)
|
||||
{
|
||||
// TODO: implement me
|
||||
return ReadSecureRNG(in, length);
|
||||
ReadSecureRNG(in, length);
|
||||
}
|
||||
|
||||
void Init()
|
||||
|
Loading…
Reference in New Issue
Block a user