[*] Improve internal path consistency
[*] Removes some unnecessary panics
This commit is contained in:
parent
bf03124f92
commit
6181d97c3c
@ -143,6 +143,12 @@ namespace Aurora::IO::FS
|
|||||||
|
|
||||||
AUKN_SYM bool DirsInDirectory(const AuString &string, AuList<AuString> &dirs)
|
AUKN_SYM bool DirsInDirectory(const AuString &string, AuList<AuString> &dirs)
|
||||||
{
|
{
|
||||||
|
if (string.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorArg("Cannot open an IO handle to the provided empty path");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
auto itr = ReadDir(string);
|
auto itr = ReadDir(string);
|
||||||
if (!itr)
|
if (!itr)
|
||||||
{
|
{
|
||||||
@ -174,12 +180,19 @@ namespace Aurora::IO::FS
|
|||||||
AuMemoryViewWrite writeView;
|
AuMemoryViewWrite writeView;
|
||||||
size_t offset;
|
size_t offset;
|
||||||
|
|
||||||
|
if (path.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorArg("Cannot open an IO handle to the provided empty path");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
status = false;
|
status = false;
|
||||||
offset = 0;
|
offset = 0;
|
||||||
win32Path = Locale::ConvertFromUTF8(NormalizePathRet(path));
|
win32Path = Locale::ConvertFromUTF8(NormalizePathRet(path));
|
||||||
|
|
||||||
if (win32Path.empty())
|
if (win32Path.empty())
|
||||||
{
|
{
|
||||||
|
SysPushErrorMemory();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,12 +251,26 @@ namespace Aurora::IO::FS
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
DWORD dwAttrib = ::GetFileAttributesW(Locale::ConvertFromUTF8(NormalizePathRet(path)).c_str());
|
if (path.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorArg("Cannot open an IO handle to the provided empty path");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto translatedPath = Locale::ConvertFromUTF8(NormalizePathRet(path));
|
||||||
|
if (translatedPath.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorMemory();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwAttrib = ::GetFileAttributesW(translatedPath.c_str());
|
||||||
return ((dwAttrib != INVALID_FILE_ATTRIBUTES) &&
|
return ((dwAttrib != INVALID_FILE_ATTRIBUTES) &&
|
||||||
!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
|
!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
SysPushErrorCatch();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -252,12 +279,26 @@ namespace Aurora::IO::FS
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
DWORD dwAttrib = ::GetFileAttributesW(Locale::ConvertFromUTF8(NormalizePathRet(path)).c_str());
|
if (path.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorArg("Cannot open an IO handle to the provided empty path");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto translatedPath = Locale::ConvertFromUTF8(NormalizePathRet(path));
|
||||||
|
if (translatedPath.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorMemory();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD dwAttrib = ::GetFileAttributesW(translatedPath.c_str());
|
||||||
return ((dwAttrib != INVALID_FILE_ATTRIBUTES) &&
|
return ((dwAttrib != INVALID_FILE_ATTRIBUTES) &&
|
||||||
(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
|
(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
SysPushErrorCatch();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -266,10 +307,24 @@ namespace Aurora::IO::FS
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return CreateDirectories(NormalizePathRet(path), false);
|
if (path.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorArg("Cannot open an IO handle to the provided empty path");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto translatedPath = NormalizePathRet(path);
|
||||||
|
if (translatedPath.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorMemory();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CreateDirectories(translatedPath, false);
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
SysPushErrorCatch();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -278,7 +333,19 @@ namespace Aurora::IO::FS
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (path.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorArg("Cannot open an IO handle to the provided empty path");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
auto translatedPath = Locale::ConvertFromUTF8(NormalizePathRet(path));
|
auto translatedPath = Locale::ConvertFromUTF8(NormalizePathRet(path));
|
||||||
|
if (translatedPath.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorMemory();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (::DeleteFileW(translatedPath.c_str()))
|
if (::DeleteFileW(translatedPath.c_str()))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -293,6 +360,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
SysPushErrorCatch();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -327,6 +395,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
SysPushErrorCatch();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,24 +48,38 @@ namespace Aurora::IO::FS
|
|||||||
// Working directory
|
// Working directory
|
||||||
if (path[iOffset] == '.')
|
if (path[iOffset] == '.')
|
||||||
{
|
{
|
||||||
SysAssert(Process::GetWorkingDirectory(buffer));
|
if (!Process::GetWorkingDirectory(buffer))
|
||||||
buffer += kPathSplitter;
|
{
|
||||||
|
result.clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Binary directory
|
// Binary directory
|
||||||
else if (path[iOffset] == '^')
|
else if (path[iOffset] == '^')
|
||||||
{
|
{
|
||||||
SysAssert(Process::GetProcDirectory(buffer));
|
if (!Process::GetProcDirectory(buffer))
|
||||||
buffer += kPathSplitter;
|
{
|
||||||
|
result.clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Local Aurora profile
|
// Local Aurora profile
|
||||||
else if (path[iOffset] == '~')
|
else if (path[iOffset] == '~')
|
||||||
{
|
{
|
||||||
SysAssert(FS::GetProfileDomain(buffer));
|
if (!FS::GetProfileDomain(buffer))
|
||||||
|
{
|
||||||
|
result.clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Global Aurora profile
|
// Global Aurora profile
|
||||||
else if (path[iOffset] == '!')
|
else if (path[iOffset] == '!')
|
||||||
{
|
{
|
||||||
SysAssert(FS::GetSystemDomain(buffer));
|
if (!FS::GetSystemDomain(buffer))
|
||||||
|
{
|
||||||
|
result.clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (path[iOffset] == '?')
|
else if (path[iOffset] == '?')
|
||||||
{
|
{
|
||||||
|
@ -49,7 +49,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
str = {};
|
AuResetMember(str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ namespace Aurora::IO::FS
|
|||||||
auto pathex = NormalizePathRet(path);
|
auto pathex = NormalizePathRet(path);
|
||||||
if (pathex.empty())
|
if (pathex.empty())
|
||||||
{
|
{
|
||||||
|
SysPushErrorMemory();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
#define _USE_GET_CWD
|
#define _USE_GET_CWD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <Source/IO/FS/FS.hpp>
|
||||||
|
|
||||||
namespace Aurora::Process
|
namespace Aurora::Process
|
||||||
{
|
{
|
||||||
AUKN_SYM bool GetWorkingDirectory(AuString &path)
|
AUKN_SYM bool GetWorkingDirectory(AuString &path)
|
||||||
@ -36,6 +38,11 @@ namespace Aurora::Process
|
|||||||
|
|
||||||
path = Locale::ConvertFromWChar(eh.data(), length);
|
path = Locale::ConvertFromWChar(eh.data(), length);
|
||||||
|
|
||||||
|
if (!path.ends_with(AuFS::kPathSplitter))
|
||||||
|
{
|
||||||
|
path += AuFS::kPathSplitter;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
#elif defined(AURORA_PLATFORM_ANDROID)
|
#elif defined(AURORA_PLATFORM_ANDROID)
|
||||||
@ -52,6 +59,11 @@ namespace Aurora::Process
|
|||||||
|
|
||||||
path.resize(strlen(path.data()));
|
path.resize(strlen(path.data()));
|
||||||
|
|
||||||
|
if (!path.ends_with(AuFS::kPathSplitter))
|
||||||
|
{
|
||||||
|
path += AuFS::kPathSplitter;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -195,7 +207,13 @@ namespace Aurora::Process
|
|||||||
cachedPartialPath = cachedFullPath.substr(0, indexA);
|
cachedPartialPath = cachedFullPath.substr(0, indexA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!cachedPartialPath.ends_with(AuFS::kPathSplitter))
|
||||||
|
{
|
||||||
|
cachedPartialPath += AuFS::kPathSplitter;
|
||||||
|
}
|
||||||
|
|
||||||
returnCached:
|
returnCached:
|
||||||
|
|
||||||
module = cachedModule;
|
module = cachedModule;
|
||||||
fullPath = cachedFullPath;
|
fullPath = cachedFullPath;
|
||||||
partialPath = cachedPartialPath;
|
partialPath = cachedPartialPath;
|
||||||
|
@ -55,7 +55,7 @@ namespace Aurora::Processes
|
|||||||
|
|
||||||
static void OpenerThread()
|
static void OpenerThread()
|
||||||
{
|
{
|
||||||
CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
|
(void)CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
|
||||||
RunTasks();
|
RunTasks();
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
@ -97,6 +97,12 @@ namespace Aurora::Processes
|
|||||||
auto path = AuIOFS::NormalizePathRet(file);
|
auto path = AuIOFS::NormalizePathRet(file);
|
||||||
bool bFileExists {};
|
bool bFileExists {};
|
||||||
|
|
||||||
|
if (path.empty())
|
||||||
|
{
|
||||||
|
SysPushErrorMemory();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(bFileExists = AuFS::FileExists(path)) &&
|
if (!(bFileExists = AuFS::FileExists(path)) &&
|
||||||
!AuFS::DirExists(path))
|
!AuFS::DirExists(path))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user