[*] 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 == '?');
|
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;
|
AuString buffer;
|
||||||
bool isResource {};
|
bool isResource {};
|
||||||
@ -27,7 +27,7 @@ namespace Aurora::IO::FS
|
|||||||
/**
|
/**
|
||||||
Resolve special character prefixes
|
Resolve special character prefixes
|
||||||
*/
|
*/
|
||||||
if (path.size() > 2)
|
if ((path.size() > 2) && (requireMountExpand))
|
||||||
{
|
{
|
||||||
if (path[1] == kPathSplitter)
|
if (path[1] == kPathSplitter)
|
||||||
{
|
{
|
||||||
@ -69,6 +69,8 @@ namespace Aurora::IO::FS
|
|||||||
buffer += path;
|
buffer += path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (requireSanitization)
|
||||||
|
{
|
||||||
/**
|
/**
|
||||||
Quickly handle the edge case in some modern UNIX derived systems, and in
|
Quickly handle the edge case in some modern UNIX derived systems, and in
|
||||||
Windows UNC paths, where paths may start with '//' or '\\' respectively
|
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
|
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.
|
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?
|
for (const auto &ch : parts) // can you tell why FIO shouldn't be in hot paths yet?
|
||||||
{
|
{
|
||||||
if (ch == "..")
|
if (ch == "..")
|
||||||
@ -122,6 +124,11 @@ namespace Aurora::IO::FS
|
|||||||
{
|
{
|
||||||
result.resize(i);
|
result.resize(i);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else // !requireSanitization
|
||||||
|
{
|
||||||
|
result = buffer;
|
||||||
|
}
|
||||||
|
|
||||||
if (isResource)
|
if (isResource)
|
||||||
{
|
{
|
||||||
@ -140,6 +147,7 @@ namespace Aurora::IO::FS
|
|||||||
void /* internal, local export */ _NormalizePath(AuString &str)
|
void /* internal, local export */ _NormalizePath(AuString &str)
|
||||||
{
|
{
|
||||||
bool requiresExpanding = false;
|
bool requiresExpanding = false;
|
||||||
|
bool requiresMountUpdate = false;
|
||||||
|
|
||||||
requiresExpanding = str.size() && IsMagicCharacter(str[0]);
|
requiresExpanding = str.size() && IsMagicCharacter(str[0]);
|
||||||
|
|
||||||
@ -179,16 +187,16 @@ namespace Aurora::IO::FS
|
|||||||
auto c = str[0];
|
auto c = str[0];
|
||||||
if ((c == '.') || (c == '~') || (c == '!') || (c == '?'))
|
if ((c == '.') || (c == '~') || (c == '!') || (c == '?'))
|
||||||
{
|
{
|
||||||
requiresExpanding = true;
|
requiresMountUpdate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// worst case -> yea have fun
|
// worst case -> yea have fun
|
||||||
if (requiresExpanding)
|
if (requiresExpanding || requiresMountUpdate)
|
||||||
{
|
{
|
||||||
AuString temp;
|
AuString temp;
|
||||||
ResolveAbsolutePath(str, temp);
|
ResolveAbsolutePath(requiresMountUpdate, requiresExpanding, str, temp);
|
||||||
str = temp;
|
str = temp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -176,7 +176,7 @@ namespace Aurora::RNG
|
|||||||
AUKN_SYM void ReadFastRNG(void *in, AuUInt length)
|
AUKN_SYM void ReadFastRNG(void *in, AuUInt length)
|
||||||
{
|
{
|
||||||
// TODO: implement me
|
// TODO: implement me
|
||||||
return ReadSecureRNG(in, length);
|
ReadSecureRNG(in, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Init()
|
void Init()
|
||||||
|
Loading…
Reference in New Issue
Block a user