[+] PlatformFS abstraction / hook layer
This commit is contained in:
parent
8a94676549
commit
54672f812e
100
Include/Aurora/IO/FS/Hook/FSPlatform.hpp
Normal file
100
Include/Aurora/IO/FS/Hook/FSPlatform.hpp
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/***
|
||||||
|
Copyright (C) 2021-2024 Jamie Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||||
|
|
||||||
|
File: FSPlatform.hpp
|
||||||
|
Date: 2021-XX-XX - 2024-12-01
|
||||||
|
Author: Reece
|
||||||
|
***/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Aurora::IO::FS
|
||||||
|
{
|
||||||
|
struct UpdateTimes;
|
||||||
|
|
||||||
|
struct IPlatformFS
|
||||||
|
{
|
||||||
|
// Aurora::Win32Open-style API (not CreateFileW)
|
||||||
|
// [*] Will miss the FILE_ATTRIBUTE_NORMAL flag
|
||||||
|
// [*] dwAttributes and dwFlags are unmerged for Win8-11 extensions
|
||||||
|
virtual AuOptional<void *> Win32OpenHook(const void *lpFileName,
|
||||||
|
AuUInt32 dwDesiredAccess,
|
||||||
|
AuUInt32 dwShareMode,
|
||||||
|
bool bInherit,
|
||||||
|
AuUInt32 dwCreationDisposition,
|
||||||
|
AuUInt32 dwFlags,
|
||||||
|
AuUInt32 dwAttributes) = 0;
|
||||||
|
|
||||||
|
virtual AuOptional<int> PosixOpenHook(const char *pPathName,
|
||||||
|
int flags,
|
||||||
|
AuUInt64 uFlags) = 0;
|
||||||
|
|
||||||
|
virtual IFileStream *OpenExNew(const AuROString &path,
|
||||||
|
EFileOpenMode openMode,
|
||||||
|
EFileAdvisoryLockLevel lock,
|
||||||
|
bool bCheck) = 0;
|
||||||
|
|
||||||
|
virtual void NukeStream(IFileStream *) = 0;
|
||||||
|
|
||||||
|
virtual IAsyncFileStream *OpenAsyncNew(const AuROString &path,
|
||||||
|
EFileOpenMode openMode,
|
||||||
|
AuOptional<bool> optbDirectIO,
|
||||||
|
AuOptional<EFileAdvisoryLockLevel> optLock) = 0;
|
||||||
|
|
||||||
|
virtual void NukeAsyncProvider(IAsyncFileStream *) = 0;
|
||||||
|
|
||||||
|
virtual AuSPtr<IReadDir> ReadDir(const AuROString &string) = 0;
|
||||||
|
|
||||||
|
virtual bool FilesInDirectory(const AuROString &string,
|
||||||
|
AuList<AuString> &files) = 0;
|
||||||
|
|
||||||
|
virtual bool DirsInDirectory(const AuROString &string,
|
||||||
|
AuList<AuString> &dirs) = 0;
|
||||||
|
|
||||||
|
virtual bool ReadFile(const AuROString &path,
|
||||||
|
AuByteBuffer &buffer) = 0;
|
||||||
|
|
||||||
|
virtual bool FileExists(const AuROString &path) = 0;
|
||||||
|
|
||||||
|
virtual bool DirExists(const AuROString &path) = 0;
|
||||||
|
|
||||||
|
virtual bool DirMk(const AuROString &path) = 0;
|
||||||
|
|
||||||
|
virtual bool Remove(const AuROString &path) = 0;
|
||||||
|
|
||||||
|
virtual bool Relink(const AuROString &src,
|
||||||
|
const AuROString &dest) = 0;
|
||||||
|
|
||||||
|
virtual bool Copy(const AuROString &src,
|
||||||
|
const AuROString &dest) = 0;
|
||||||
|
|
||||||
|
virtual bool StatFile(const AuROString &path,
|
||||||
|
Stat &stat) = 0;
|
||||||
|
|
||||||
|
virtual bool UpdateFileTimes(const AuROString &path,
|
||||||
|
const UpdateTimes ×) = 0;
|
||||||
|
|
||||||
|
virtual AuList<AuString> FileAttrsList(const AuROString &path) = 0;
|
||||||
|
|
||||||
|
virtual AuResult<Memory::ByteBuffer> FileAttrsGet(const AuROString &path,
|
||||||
|
const AuROString &attr) = 0;
|
||||||
|
|
||||||
|
virtual bool FileAttrsSet(const AuROString &path, const AuROString &attr,
|
||||||
|
const Memory::MemoryViewRead &view) = 0;
|
||||||
|
|
||||||
|
virtual bool FileAttrsDel(const AuROString &path, const AuROString &attr) = 0;
|
||||||
|
|
||||||
|
virtual bool BlockFile(const AuROString &path) = 0;
|
||||||
|
|
||||||
|
virtual bool UnblockFile(const AuROString &path) = 0;
|
||||||
|
|
||||||
|
virtual bool TrustFile(const AuROString &path) = 0;
|
||||||
|
|
||||||
|
virtual bool IsFileBlocked(const AuROString &path) = 0;
|
||||||
|
|
||||||
|
virtual bool IsFileTrusted(const AuROString &path) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
AUKN_SYM AuSPtr<IPlatformFS> GetOSPlatform();
|
||||||
|
AUKN_SYM AuSPtr<IPlatformFS> GetCurrentPlatform();
|
||||||
|
AUKN_SYM void SetCurrentPlatform(AuSPtr<IPlatformFS> pThat);
|
||||||
|
}
|
@ -98,6 +98,24 @@ namespace Aurora::IO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HANDLE Win32OpenHooked(LPCWSTR lpFileName,
|
||||||
|
DWORD dwDesiredAccess,
|
||||||
|
DWORD dwShareMode,
|
||||||
|
bool bInherit,
|
||||||
|
DWORD dwCreationDisposition,
|
||||||
|
DWORD dwFlags,
|
||||||
|
DWORD dwAttributes)
|
||||||
|
{
|
||||||
|
if (auto optHandle = AuFS::GetCurrentPlatform()->Win32OpenHook(lpFileName, dwDesiredAccess, dwShareMode, bInherit, dwCreationDisposition, dwFlags, dwAttributes))
|
||||||
|
{
|
||||||
|
return optHandle.Value();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Win32Open(lpFileName, dwDesiredAccess, dwShareMode, bInherit, dwCreationDisposition, dwFlags, dwAttributes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool AFileHandle::InitFromPath(HandleCreate create)
|
bool AFileHandle::InitFromPath(HandleCreate create)
|
||||||
{
|
{
|
||||||
HANDLE hFileHandle;
|
HANDLE hFileHandle;
|
||||||
@ -164,7 +182,7 @@ namespace Aurora::IO
|
|||||||
{
|
{
|
||||||
case FS::EFileOpenMode::eRead:
|
case FS::EFileOpenMode::eRead:
|
||||||
{
|
{
|
||||||
hFileHandle = Win32Open(win32Path.c_str(),
|
hFileHandle = Win32OpenHooked(win32Path.c_str(),
|
||||||
GENERIC_READ,
|
GENERIC_READ,
|
||||||
dwShare,
|
dwShare,
|
||||||
false,
|
false,
|
||||||
@ -188,7 +206,7 @@ namespace Aurora::IO
|
|||||||
|
|
||||||
if (create.bFailIfNonEmptyFile)
|
if (create.bFailIfNonEmptyFile)
|
||||||
{
|
{
|
||||||
hFileHandle = Win32Open(win32Path.c_str(),
|
hFileHandle = Win32OpenHooked(win32Path.c_str(),
|
||||||
GENERIC_WRITE | GENERIC_READ | DELETE,
|
GENERIC_WRITE | GENERIC_READ | DELETE,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
@ -208,7 +226,7 @@ namespace Aurora::IO
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hFileHandle = Win32Open(win32Path.c_str(),
|
hFileHandle = Win32OpenHooked(win32Path.c_str(),
|
||||||
GENERIC_WRITE | GENERIC_READ | DELETE,
|
GENERIC_WRITE | GENERIC_READ | DELETE,
|
||||||
dwShare,
|
dwShare,
|
||||||
false,
|
false,
|
||||||
@ -218,7 +236,7 @@ namespace Aurora::IO
|
|||||||
|
|
||||||
if (hFileHandle == INVALID_HANDLE_VALUE)
|
if (hFileHandle == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
hFileHandle = Win32Open(win32Path.c_str(),
|
hFileHandle = Win32OpenHooked(win32Path.c_str(),
|
||||||
GENERIC_WRITE | GENERIC_READ | DELETE,
|
GENERIC_WRITE | GENERIC_READ | DELETE,
|
||||||
dwShare,
|
dwShare,
|
||||||
false,
|
false,
|
||||||
@ -245,7 +263,7 @@ namespace Aurora::IO
|
|||||||
|
|
||||||
if (create.bFailIfNonEmptyFile)
|
if (create.bFailIfNonEmptyFile)
|
||||||
{
|
{
|
||||||
hFileHandle = Win32Open(win32Path.c_str(),
|
hFileHandle = Win32OpenHooked(win32Path.c_str(),
|
||||||
GENERIC_WRITE | DELETE,
|
GENERIC_WRITE | DELETE,
|
||||||
NULL,
|
NULL,
|
||||||
false,
|
false,
|
||||||
@ -265,7 +283,7 @@ namespace Aurora::IO
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hFileHandle = Win32Open(win32Path.c_str(),
|
hFileHandle = Win32OpenHooked(win32Path.c_str(),
|
||||||
GENERIC_WRITE | FILE_READ_ATTRIBUTES | DELETE,
|
GENERIC_WRITE | FILE_READ_ATTRIBUTES | DELETE,
|
||||||
dwShare,
|
dwShare,
|
||||||
false,
|
false,
|
||||||
@ -275,7 +293,7 @@ namespace Aurora::IO
|
|||||||
|
|
||||||
if (hFileHandle == INVALID_HANDLE_VALUE)
|
if (hFileHandle == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
hFileHandle = Win32Open(win32Path.c_str(),
|
hFileHandle = Win32OpenHooked(win32Path.c_str(),
|
||||||
GENERIC_WRITE | DELETE,
|
GENERIC_WRITE | DELETE,
|
||||||
dwShare,
|
dwShare,
|
||||||
false,
|
false,
|
||||||
|
@ -114,6 +114,18 @@ namespace Aurora::IO
|
|||||||
this->uOSReadHandle = this->uOSWriteHandle = DupHandle(bError ? STDERR_FILENO : STDOUT_FILENO, true, bSharing);
|
this->uOSReadHandle = this->uOSWriteHandle = DupHandle(bError ? STDERR_FILENO : STDOUT_FILENO, true, bSharing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int PosixOpenHooked(const char *pathname, int flags, mode_t mode)
|
||||||
|
{
|
||||||
|
if (auto optFD = AuFS::GetCurrentPlatform()->PosixOpenHook(pathname, flags, mode))
|
||||||
|
{
|
||||||
|
return optFD.Value();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return PosixOpen(pathname, flags, mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool AFileHandle::InitFromPath(HandleCreate create)
|
bool AFileHandle::InitFromPath(HandleCreate create)
|
||||||
{
|
{
|
||||||
int iFileDescriptor { -1 };
|
int iFileDescriptor { -1 };
|
||||||
@ -191,7 +203,7 @@ namespace Aurora::IO
|
|||||||
// TBD
|
// TBD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
iFileDescriptor = PosixOpen(pathex.c_str(),
|
iFileDescriptor = PosixOpenHooked(pathex.c_str(),
|
||||||
flags,
|
flags,
|
||||||
0664);
|
0664);
|
||||||
|
|
||||||
@ -211,7 +223,7 @@ namespace Aurora::IO
|
|||||||
{
|
{
|
||||||
RuntimeWaitForSecondaryTick();
|
RuntimeWaitForSecondaryTick();
|
||||||
|
|
||||||
iFileDescriptor = PosixOpen(pathex.c_str(),
|
iFileDescriptor = PosixOpenHooked(pathex.c_str(),
|
||||||
flags,
|
flags,
|
||||||
0664);
|
0664);
|
||||||
}
|
}
|
||||||
@ -227,7 +239,7 @@ namespace Aurora::IO
|
|||||||
if (errno == EISDIR)
|
if (errno == EISDIR)
|
||||||
{
|
{
|
||||||
flags &= ~(O_WRONLY | O_RDWR);
|
flags &= ~(O_WRONLY | O_RDWR);
|
||||||
iFileDescriptor = PosixOpen(pathex.c_str(),
|
iFileDescriptor = PosixOpenHooked(pathex.c_str(),
|
||||||
flags,
|
flags,
|
||||||
0664);
|
0664);
|
||||||
}
|
}
|
||||||
|
@ -617,7 +617,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM IAsyncFileStream *OpenAsyncNew(const AuROString &path, EFileOpenMode openMode, AuOptional<bool> optbDirectIO, AuOptional<EFileAdvisoryLockLevel> optLock)
|
IAsyncFileStream *PlatformFS::OpenAsyncNew(const AuROString &path, EFileOpenMode openMode, AuOptional<bool> optbDirectIO, AuOptional<EFileAdvisoryLockLevel> optLock)
|
||||||
{
|
{
|
||||||
auto bDirectIO = optbDirectIO.ValueOr(true);
|
auto bDirectIO = optbDirectIO.ValueOr(true);
|
||||||
auto lock = optLock.ValueOr(EFileAdvisoryLockLevel::eNoSafety);
|
auto lock = optLock.ValueOr(EFileAdvisoryLockLevel::eNoSafety);
|
||||||
@ -653,7 +653,7 @@ namespace Aurora::IO::FS
|
|||||||
return pStream;
|
return pStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM void OpenAsyncRelease(IAsyncFileStream *handle)
|
void PlatformFS::NukeAsyncProvider(IAsyncFileStream *handle)
|
||||||
{
|
{
|
||||||
AuSafeDelete<LinuxAsyncFileStream *>(handle);
|
AuSafeDelete<LinuxAsyncFileStream *>(handle);
|
||||||
}
|
}
|
||||||
|
@ -732,7 +732,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM IAsyncFileStream *OpenAsyncNew(const AuROString &path, EFileOpenMode openMode, AuOptional<bool> optbDirectIO, AuOptional<EFileAdvisoryLockLevel> optLock)
|
IAsyncFileStream *PlatformFS::OpenAsyncNew(const AuROString &path, EFileOpenMode openMode, AuOptional<bool> optbDirectIO, AuOptional<EFileAdvisoryLockLevel> optLock)
|
||||||
{
|
{
|
||||||
auto bDirectIO = optbDirectIO.ValueOr(true);
|
auto bDirectIO = optbDirectIO.ValueOr(true);
|
||||||
auto lock = optLock.ValueOr(EFileAdvisoryLockLevel::eNoSafety);
|
auto lock = optLock.ValueOr(EFileAdvisoryLockLevel::eNoSafety);
|
||||||
@ -768,7 +768,7 @@ namespace Aurora::IO::FS
|
|||||||
return pStream;
|
return pStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM void OpenAsyncRelease(IAsyncFileStream *handle)
|
void PlatformFS::NukeAsyncProvider(IAsyncFileStream *handle)
|
||||||
{
|
{
|
||||||
AuSafeDelete<NtAsyncFileStream *>(handle);
|
AuSafeDelete<NtAsyncFileStream *>(handle);
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
AUKN_SYM AuSPtr<IReadDir> ReadDir(const AuROString &string)
|
AuSPtr<IReadDir> PlatformFS::ReadDir(const AuROString &string)
|
||||||
{
|
{
|
||||||
if (string.empty())
|
if (string.empty())
|
||||||
{
|
{
|
||||||
@ -149,7 +149,7 @@ namespace Aurora::IO::FS
|
|||||||
return pObj;
|
return pObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool FilesInDirectory(const AuROString &string, AuList<AuString> &files)
|
bool PlatformFS::FilesInDirectory(const AuROString &string, AuList<AuString> &files)
|
||||||
{
|
{
|
||||||
auto itr = ReadDir(string);
|
auto itr = ReadDir(string);
|
||||||
if (!itr)
|
if (!itr)
|
||||||
@ -174,7 +174,7 @@ namespace Aurora::IO::FS
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool DirsInDirectory(const AuROString &string, AuList<AuString> &dirs)
|
bool PlatformFS::DirsInDirectory(const AuROString &string, AuList<AuString> &dirs)
|
||||||
{
|
{
|
||||||
auto itr = ReadDir(string);
|
auto itr = ReadDir(string);
|
||||||
if (!itr)
|
if (!itr)
|
||||||
@ -199,7 +199,7 @@ namespace Aurora::IO::FS
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool ReadFile(const AuROString &path, AuByteBuffer &buffer)
|
bool PlatformFS::ReadFile(const AuROString &path, AuByteBuffer &buffer)
|
||||||
{
|
{
|
||||||
std::wstring win32Path;
|
std::wstring win32Path;
|
||||||
LARGE_INTEGER length;
|
LARGE_INTEGER length;
|
||||||
@ -294,7 +294,7 @@ namespace Aurora::IO::FS
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool FileExists(const AuROString &path)
|
bool PlatformFS::FileExists(const AuROString &path)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -322,7 +322,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool DirExists(const AuROString &path)
|
bool PlatformFS::DirExists(const AuROString &path)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -350,7 +350,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool DirMk(const AuROString &path)
|
bool PlatformFS::DirMk(const AuROString &path)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -376,7 +376,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool Remove(const AuROString &path)
|
bool PlatformFS::Remove(const AuROString &path)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -433,7 +433,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool Relink(const AuROString &src, const AuROString &dest)
|
bool PlatformFS::Relink(const AuROString &src, const AuROString &dest)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -468,7 +468,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool Copy(const AuROString &src, const AuROString &dest)
|
bool PlatformFS::Copy(const AuROString &src, const AuROString &dest)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -502,7 +502,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool StatFile(const AuROString &path, Stat &stat)
|
bool PlatformFS::StatFile(const AuROString &path, Stat &stat)
|
||||||
{
|
{
|
||||||
WIN32_FILE_ATTRIBUTE_DATA data;
|
WIN32_FILE_ATTRIBUTE_DATA data;
|
||||||
|
|
||||||
|
@ -189,12 +189,12 @@ namespace Aurora::IO::FS
|
|||||||
return pObj;
|
return pObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM AuSPtr<IReadDir> ReadDir(const AuROString &string)
|
AuSPtr<IReadDir> PlatformFS::ReadDir(const AuROString &string)
|
||||||
{
|
{
|
||||||
return ReadDirEx(string, false);
|
return ReadDirEx(string, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool FilesInDirectory(const AuROString &string, AuList<AuString> &files)
|
bool PlatformFS::FilesInDirectory(const AuROString &string, AuList<AuString> &files)
|
||||||
{
|
{
|
||||||
auto itr = ReadDirEx(string, true);
|
auto itr = ReadDirEx(string, true);
|
||||||
if (!itr)
|
if (!itr)
|
||||||
@ -219,7 +219,7 @@ namespace Aurora::IO::FS
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool DirsInDirectory(const AuROString &string, AuList<AuString> &dirs)
|
bool PlatformFS::DirsInDirectory(const AuROString &string, AuList<AuString> &dirs)
|
||||||
{
|
{
|
||||||
auto itr = ReadDirEx(string, true);
|
auto itr = ReadDirEx(string, true);
|
||||||
if (!itr)
|
if (!itr)
|
||||||
@ -272,7 +272,7 @@ namespace Aurora::IO::FS
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool ReadFile(const AuROString &path, AuByteBuffer &buffer)
|
bool PlatformFS::ReadFile(const AuROString &path, AuByteBuffer &buffer)
|
||||||
{
|
{
|
||||||
AuMemoryViewWrite writeView;
|
AuMemoryViewWrite writeView;
|
||||||
|
|
||||||
@ -344,7 +344,7 @@ namespace Aurora::IO::FS
|
|||||||
return dir ? S_ISDIR(s.st_mode) : S_ISREG(s.st_mode);
|
return dir ? S_ISDIR(s.st_mode) : S_ISREG(s.st_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool FileExists(const AuROString &path)
|
bool PlatformFS::FileExists(const AuROString &path)
|
||||||
{
|
{
|
||||||
if (path.empty())
|
if (path.empty())
|
||||||
{
|
{
|
||||||
@ -362,7 +362,7 @@ namespace Aurora::IO::FS
|
|||||||
return UnixExists(pathExpanded, false);
|
return UnixExists(pathExpanded, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool DirExists(const AuROString &path)
|
bool PlatformFS::DirExists(const AuROString &path)
|
||||||
{
|
{
|
||||||
if (path.empty())
|
if (path.empty())
|
||||||
{
|
{
|
||||||
@ -380,7 +380,7 @@ namespace Aurora::IO::FS
|
|||||||
return UnixExists(pathExpanded, true);
|
return UnixExists(pathExpanded, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool DirMk(const AuROString &path)
|
bool PlatformFS::DirMk(const AuROString &path)
|
||||||
{
|
{
|
||||||
if (path.empty())
|
if (path.empty())
|
||||||
{
|
{
|
||||||
@ -398,7 +398,7 @@ namespace Aurora::IO::FS
|
|||||||
return CreateDirectories(pathExpanded, false);
|
return CreateDirectories(pathExpanded, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool Remove(const AuROString &path)
|
bool PlatformFS::Remove(const AuROString &path)
|
||||||
{
|
{
|
||||||
struct stat s;
|
struct stat s;
|
||||||
|
|
||||||
@ -458,7 +458,7 @@ namespace Aurora::IO::FS
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool Relink(const AuROString &src, const AuROString &dest)
|
bool PlatformFS::Relink(const AuROString &src, const AuROString &dest)
|
||||||
{
|
{
|
||||||
if (src.empty() ||
|
if (src.empty() ||
|
||||||
dest.empty())
|
dest.empty())
|
||||||
@ -484,7 +484,7 @@ namespace Aurora::IO::FS
|
|||||||
|
|
||||||
#if defined(AURORA_IS_LINUX_DERIVED)
|
#if defined(AURORA_IS_LINUX_DERIVED)
|
||||||
|
|
||||||
AUKN_SYM bool Copy(const AuROString &src, const AuROString &dest)
|
bool PlatformFS::Copy(const AuROString &src, const AuROString &dest)
|
||||||
{
|
{
|
||||||
if (src.empty() ||
|
if (src.empty() ||
|
||||||
dest.empty())
|
dest.empty())
|
||||||
@ -537,7 +537,7 @@ namespace Aurora::IO::FS
|
|||||||
|
|
||||||
#elif defined(AURORA_IS_BSD_DERIVED)
|
#elif defined(AURORA_IS_BSD_DERIVED)
|
||||||
|
|
||||||
AUKN_SYM bool Copy(const AuROString &src, const AuROString &dest)
|
bool PlatformFS::Copy(const AuROString &src, const AuROString &dest)
|
||||||
{
|
{
|
||||||
if (src.empty() ||
|
if (src.empty() ||
|
||||||
dest.empty())
|
dest.empty())
|
||||||
@ -589,7 +589,7 @@ namespace Aurora::IO::FS
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
AUKN_SYM bool Copy(const AuROString &src, const AuROString &dest)
|
bool PlatformFS::Copy(const AuROString &src, const AuROString &dest)
|
||||||
{
|
{
|
||||||
// TODO: not that i care
|
// TODO: not that i care
|
||||||
return false;
|
return false;
|
||||||
@ -597,7 +597,7 @@ namespace Aurora::IO::FS
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
AUKN_SYM bool StatFile(const AuROString &pathRel, Stat &stat)
|
bool PlatformFS::StatFile(const AuROString &pathRel, Stat &stat)
|
||||||
{
|
{
|
||||||
stat = {};
|
stat = {};
|
||||||
|
|
||||||
|
@ -7,6 +7,9 @@
|
|||||||
***/
|
***/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#include "FSPlatform.hpp"
|
||||||
|
|
||||||
#if !defined(NO_FSTREAM) && (!defined(__has_include) || __has_include(<fstream>))
|
#if !defined(NO_FSTREAM) && (!defined(__has_include) || __has_include(<fstream>))
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#if !defined(HAS_FSTREAM)
|
#if !defined(HAS_FSTREAM)
|
||||||
|
214
Source/IO/FS/FSPlatform.cpp
Normal file
214
Source/IO/FS/FSPlatform.cpp
Normal file
@ -0,0 +1,214 @@
|
|||||||
|
/***
|
||||||
|
Copyright (C) 2021-2024 Jamie Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||||
|
|
||||||
|
File: FSPlatform.cpp
|
||||||
|
Date: 2024-12-01
|
||||||
|
Author: Reece
|
||||||
|
***/
|
||||||
|
#include <Source/RuntimeInternal.hpp>
|
||||||
|
#include "FSPlatform.hpp"
|
||||||
|
|
||||||
|
namespace Aurora::IO::FS
|
||||||
|
{
|
||||||
|
static AuMutex gPlatformMutex;
|
||||||
|
static AuSPtr<IPlatformFS> gPtrPlatform;
|
||||||
|
PlatformFS gPlatform;
|
||||||
|
|
||||||
|
AUKN_SYM AuSPtr<IPlatformFS> GetOSPlatform()
|
||||||
|
{
|
||||||
|
return AuUnsafeRaiiToShared(&gPlatform);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM AuSPtr<IPlatformFS> GetCurrentPlatform()
|
||||||
|
{
|
||||||
|
// perf hack: dont enter the global lock if we know we dont need to copy the control block
|
||||||
|
if (gPtrPlatform.get())
|
||||||
|
{
|
||||||
|
AU_LOCK_GLOBAL_GUARD(gPlatformMutex);
|
||||||
|
return gPtrPlatform;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return AuUnsafeRaiiToShared(&gPlatform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM void SetCurrentPlatform(AuSPtr<IPlatformFS> pThat)
|
||||||
|
{
|
||||||
|
AU_LOCK_GLOBAL_GUARD(gPlatformMutex);
|
||||||
|
gPtrPlatform = pThat;
|
||||||
|
}
|
||||||
|
|
||||||
|
AuOptional<void *> PlatformFS::Win32OpenHook(const void *lpFileName,
|
||||||
|
AuUInt32 dwDesiredAccess,
|
||||||
|
AuUInt32 dwShareMode,
|
||||||
|
bool bInherit,
|
||||||
|
AuUInt32 dwCreationDisposition,
|
||||||
|
AuUInt32 dwFlags,
|
||||||
|
AuUInt32 dwAttributes)
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
AuOptional<int> PlatformFS::PosixOpenHook(const char *pPathName,
|
||||||
|
int flags,
|
||||||
|
AuUInt64 uFlags)
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM AuSPtr<IReadDir> ReadDir(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->ReadDir(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool FilesInDirectory(const AuROString &path,
|
||||||
|
AuList<AuString> &files)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->FilesInDirectory(path, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool DirsInDirectory(const AuROString &path,
|
||||||
|
AuList<AuString> &dirs)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->DirsInDirectory(path, dirs);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool ReadFile(const AuROString &path,
|
||||||
|
AuByteBuffer &buffer)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->ReadFile(path, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool FileExists(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->FileExists(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool DirExists(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->DirExists(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool DirMk(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->DirMk(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool Remove(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->Remove(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool Relink(const AuROString &src,
|
||||||
|
const AuROString &dest)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->Relink(src, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool Copy(const AuROString &src,
|
||||||
|
const AuROString &dest)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->Copy(src, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool StatFile(const AuROString &path,
|
||||||
|
Stat &stat)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->StatFile(path, stat);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool UpdateFileTimes(const AuROString &path,
|
||||||
|
const UpdateTimes ×)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->UpdateFileTimes(path, times);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM AuList<AuString> FileAttrsList(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->FileAttrsList(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM AuResult<Memory::ByteBuffer> FileAttrsGet(const AuROString &path,
|
||||||
|
const AuROString &attr)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->FileAttrsGet(path, attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool FileAttrsSet(const AuROString &path, const AuROString &attr,
|
||||||
|
const Memory::MemoryViewRead &view)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->FileAttrsSet(path, attr, view);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool FileAttrsDel(const AuROString &path,
|
||||||
|
const AuROString &attr)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->FileAttrsDel(path, attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool BlockFile(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->BlockFile(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool UnblockFile(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->UnblockFile(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool TrustFile(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->TrustFile(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool IsFileBlocked(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->IsFileBlocked(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM bool IsFileTrusted(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->IsFileTrusted(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM IFileStream *CreateNew(const AuROString &path)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->OpenExNew(path, EFileOpenMode::eWrite, EFileAdvisoryLockLevel::eBlockReadWrite, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM void CreateRelease(IFileStream *that)
|
||||||
|
{
|
||||||
|
GetCurrentPlatform()->NukeStream(that);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM IFileStream *OpenNew(const AuROString &path, EFileOpenMode openMode, EFileAdvisoryLockLevel lock)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->OpenExNew(path, openMode, lock, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM void OpenRelease(IFileStream *that)
|
||||||
|
{
|
||||||
|
GetCurrentPlatform()->NukeStream(that);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM IFileStream *OpenReadNew(const AuROString &path, EFileAdvisoryLockLevel level)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->OpenExNew(path, EFileOpenMode::eRead, level, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM void OpenReadRelease(IFileStream *that)
|
||||||
|
{
|
||||||
|
GetCurrentPlatform()->NukeStream(that);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM IFileStream *OpenWriteNew(const AuROString &path, EFileAdvisoryLockLevel level)
|
||||||
|
{
|
||||||
|
return GetCurrentPlatform()->OpenExNew(path, EFileOpenMode::eWrite, level, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
AUKN_SYM void OpenWriteRelease(IFileStream *that)
|
||||||
|
{
|
||||||
|
GetCurrentPlatform()->NukeStream(that);
|
||||||
|
}
|
||||||
|
}
|
100
Source/IO/FS/FSPlatform.hpp
Normal file
100
Source/IO/FS/FSPlatform.hpp
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/***
|
||||||
|
Copyright (C) 2021-2024 Jamie Reece Wilson (a/k/a "Reece"). All rights reserved.
|
||||||
|
|
||||||
|
File: FSPlatform.hpp
|
||||||
|
Date: 2024-12-01
|
||||||
|
Author: Reece
|
||||||
|
***/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Aurora/IO/FS/Hook/FSPlatform.hpp>
|
||||||
|
|
||||||
|
namespace Aurora::IO::FS
|
||||||
|
{
|
||||||
|
struct UpdateTimes;
|
||||||
|
|
||||||
|
struct PlatformFS : IPlatformFS
|
||||||
|
{
|
||||||
|
AuOptional<void *> Win32OpenHook(const void *lpFileName,
|
||||||
|
AuUInt32 dwDesiredAccess,
|
||||||
|
AuUInt32 dwShareMode,
|
||||||
|
bool bInherit,
|
||||||
|
AuUInt32 dwCreationDisposition,
|
||||||
|
AuUInt32 dwFlags,
|
||||||
|
AuUInt32 dwAttributes) override;
|
||||||
|
|
||||||
|
AuOptional<int> PosixOpenHook(const char *pPathName,
|
||||||
|
int flags,
|
||||||
|
AuUInt64 uFlags) override;
|
||||||
|
|
||||||
|
IFileStream *OpenExNew(const AuROString &path,
|
||||||
|
EFileOpenMode openMode,
|
||||||
|
EFileAdvisoryLockLevel lock,
|
||||||
|
bool bCheck) override;
|
||||||
|
|
||||||
|
void NukeStream(IFileStream *) override;
|
||||||
|
|
||||||
|
IAsyncFileStream *OpenAsyncNew(const AuROString &path,
|
||||||
|
EFileOpenMode openMode,
|
||||||
|
AuOptional<bool> optbDirectIO,
|
||||||
|
AuOptional<EFileAdvisoryLockLevel> optLock) override;
|
||||||
|
|
||||||
|
void NukeAsyncProvider(IAsyncFileStream *) override;
|
||||||
|
|
||||||
|
|
||||||
|
AuSPtr<IReadDir> ReadDir(const AuROString &string) override;
|
||||||
|
|
||||||
|
bool FilesInDirectory(const AuROString &string,
|
||||||
|
AuList<AuString> &files) override;
|
||||||
|
|
||||||
|
bool DirsInDirectory(const AuROString &string,
|
||||||
|
AuList<AuString> &dirs) override;
|
||||||
|
|
||||||
|
bool ReadFile(const AuROString &path,
|
||||||
|
AuByteBuffer &buffer) override;
|
||||||
|
|
||||||
|
bool FileExists(const AuROString &path) override;
|
||||||
|
|
||||||
|
bool DirExists(const AuROString &path) override;
|
||||||
|
|
||||||
|
bool DirMk(const AuROString &path) override;
|
||||||
|
|
||||||
|
bool Remove(const AuROString &path) override;
|
||||||
|
|
||||||
|
bool Relink(const AuROString &src,
|
||||||
|
const AuROString &dest) override;
|
||||||
|
|
||||||
|
bool Copy(const AuROString &src,
|
||||||
|
const AuROString &dest) override;
|
||||||
|
|
||||||
|
bool StatFile(const AuROString &path,
|
||||||
|
Stat &stat) override;
|
||||||
|
|
||||||
|
bool UpdateFileTimes(const AuROString &path,
|
||||||
|
const UpdateTimes ×) override;
|
||||||
|
|
||||||
|
AuList<AuString> FileAttrsList(const AuROString &path) override;
|
||||||
|
|
||||||
|
AuResult<Memory::ByteBuffer> FileAttrsGet(const AuROString &path,
|
||||||
|
const AuROString &attr) override;
|
||||||
|
|
||||||
|
bool FileAttrsSet(const AuROString &path,
|
||||||
|
const AuROString &attr,
|
||||||
|
const Memory::MemoryViewRead &view) override;
|
||||||
|
|
||||||
|
bool FileAttrsDel(const AuROString &path,
|
||||||
|
const AuROString &attr) override;
|
||||||
|
|
||||||
|
bool BlockFile(const AuROString &path) override;
|
||||||
|
|
||||||
|
bool UnblockFile(const AuROString &path) override;
|
||||||
|
|
||||||
|
bool TrustFile(const AuROString &path) override;
|
||||||
|
|
||||||
|
bool IsFileBlocked(const AuROString &path) override;
|
||||||
|
|
||||||
|
bool IsFileTrusted(const AuROString &path) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern PlatformFS gPlatform;
|
||||||
|
}
|
@ -25,7 +25,7 @@ namespace Aurora::IO::FS
|
|||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool UpdateFileTimes(const AuROString &path, const UpdateTimes ×)
|
bool PlatformFS::UpdateFileTimes(const AuROString &path, const UpdateTimes ×)
|
||||||
{
|
{
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
FILETIME created;
|
FILETIME created;
|
||||||
|
@ -31,7 +31,7 @@ namespace Aurora::IO::FS
|
|||||||
temp->tv_usec = ts.tv_nsec / 1'000ull;
|
temp->tv_usec = ts.tv_nsec / 1'000ull;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool UpdateFileTimes(const AuROString &path, const UpdateTimes ×)
|
bool PlatformFS::UpdateFileTimes(const AuROString &path, const UpdateTimes ×)
|
||||||
{
|
{
|
||||||
if (times.createdNs)
|
if (times.createdNs)
|
||||||
{
|
{
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
namespace Aurora::IO::FS
|
namespace Aurora::IO::FS
|
||||||
{
|
{
|
||||||
AUKN_SYM AuList<AuString> FileAttrsList(const AuROString &path)
|
AuList<AuString> PlatformFS::FileAttrsList(const AuROString &path)
|
||||||
{
|
{
|
||||||
AuList<AuString> names;
|
AuList<AuString> names;
|
||||||
WIN32_FIND_STREAM_DATA data;
|
WIN32_FIND_STREAM_DATA data;
|
||||||
@ -108,7 +108,7 @@ namespace Aurora::IO::FS
|
|||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM AuResult<Memory::ByteBuffer> FileAttrsGet(const AuROString &path, const AuROString &attr)
|
AuResult<Memory::ByteBuffer> PlatformFS::FileAttrsGet(const AuROString &path, const AuROString &attr)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -127,7 +127,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool FileAttrsSet(const AuROString &path, const AuROString &attr, const Memory::MemoryViewRead &view)
|
bool PlatformFS::FileAttrsSet(const AuROString &path, const AuROString &attr, const Memory::MemoryViewRead &view)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -139,7 +139,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool FileAttrsDel(const AuROString &path, const AuROString &attr)
|
bool PlatformFS::FileAttrsDel(const AuROString &path, const AuROString &attr)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
namespace Aurora::IO::FS
|
namespace Aurora::IO::FS
|
||||||
{
|
{
|
||||||
AUKN_SYM AuList<AuString> FileAttrsList(const AuROString &path)
|
AuList<AuString> PlatformFS::FileAttrsList(const AuROString &path)
|
||||||
{
|
{
|
||||||
static const auto kLength = 10 * 1024;
|
static const auto kLength = 10 * 1024;
|
||||||
AuString buffer;
|
AuString buffer;
|
||||||
@ -46,7 +46,7 @@ namespace Aurora::IO::FS
|
|||||||
return AuSplitStringLegacy(buffer, "\00");
|
return AuSplitStringLegacy(buffer, "\00");
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM AuResult<AuByteBuffer> FileAttrsGet(const AuROString &path, const AuROString &attr)
|
AuResult<AuByteBuffer> PlatformFS::FileAttrsGet(const AuROString &path, const AuROString &attr)
|
||||||
{
|
{
|
||||||
AuString copy(attr);
|
AuString copy(attr);
|
||||||
AuByteBuffer buffer;
|
AuByteBuffer buffer;
|
||||||
@ -87,7 +87,7 @@ namespace Aurora::IO::FS
|
|||||||
return AuMove(buffer);
|
return AuMove(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool FileAttrsSet(const AuROString &path, const AuROString &attr, const Memory::MemoryViewRead &view)
|
bool PlatformFS::FileAttrsSet(const AuROString &path, const AuROString &attr, const Memory::MemoryViewRead &view)
|
||||||
{
|
{
|
||||||
AuString copy(attr);
|
AuString copy(attr);
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ namespace Aurora::IO::FS
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool FileAttrsDel(const AuROString &path, const AuROString &attr)
|
bool PlatformFS::FileAttrsDel(const AuROString &path, const AuROString &attr)
|
||||||
{
|
{
|
||||||
AuString copy(attr);
|
AuString copy(attr);
|
||||||
|
|
||||||
|
@ -566,7 +566,7 @@ namespace Aurora::IO::FS
|
|||||||
AuSafeDelete<WinFileStream *>(that);
|
AuSafeDelete<WinFileStream *>(that);
|
||||||
}
|
}
|
||||||
|
|
||||||
static IFileStream *OpenNewEx(const AuROString &path,
|
IFileStream *PlatformFS::OpenExNew(const AuROString &path,
|
||||||
EFileOpenMode openMode,
|
EFileOpenMode openMode,
|
||||||
EFileAdvisoryLockLevel lock,
|
EFileAdvisoryLockLevel lock,
|
||||||
bool bCheck)
|
bool bCheck)
|
||||||
@ -609,42 +609,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM IFileStream *CreateNew(const AuROString &path)
|
void PlatformFS::NukeStream(IFileStream *that)
|
||||||
{
|
|
||||||
return OpenNewEx(path, EFileOpenMode::eWrite, EFileAdvisoryLockLevel::eBlockReadWrite, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM void CreateRelease(IFileStream *that)
|
|
||||||
{
|
|
||||||
AuSafeDelete<WinFileStream *>(that);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM IFileStream *OpenNew(const AuROString &path, EFileOpenMode openMode, EFileAdvisoryLockLevel lock)
|
|
||||||
{
|
|
||||||
return OpenNewEx(path, openMode, lock, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM void OpenRelease(IFileStream *that)
|
|
||||||
{
|
|
||||||
AuSafeDelete<WinFileStream *>(that);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM IFileStream *OpenReadNew(const AuROString &path, EFileAdvisoryLockLevel level)
|
|
||||||
{
|
|
||||||
return OpenNew(path, EFileOpenMode::eRead, level);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM void OpenReadRelease(IFileStream * that)
|
|
||||||
{
|
|
||||||
AuSafeDelete<WinFileStream *>(that);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM IFileStream *OpenWriteNew(const AuROString &path, EFileAdvisoryLockLevel level)
|
|
||||||
{
|
|
||||||
return OpenNew(path, EFileOpenMode::eWrite, level);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM void OpenWriteRelease(IFileStream *that)
|
|
||||||
{
|
{
|
||||||
AuSafeDelete<WinFileStream *>(that);
|
AuSafeDelete<WinFileStream *>(that);
|
||||||
}
|
}
|
||||||
|
@ -433,7 +433,7 @@ namespace Aurora::IO::FS
|
|||||||
AuSafeDelete<PosixFileStream *>(that);
|
AuSafeDelete<PosixFileStream *>(that);
|
||||||
}
|
}
|
||||||
|
|
||||||
static IFileStream *OpenNewEx(const AuROString &path,
|
IFileStream *PlatformFS::OpenExNew(const AuROString &path,
|
||||||
EFileOpenMode openMode,
|
EFileOpenMode openMode,
|
||||||
EFileAdvisoryLockLevel lock,
|
EFileAdvisoryLockLevel lock,
|
||||||
bool bCheck)
|
bool bCheck)
|
||||||
@ -476,42 +476,7 @@ namespace Aurora::IO::FS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM IFileStream *CreateNew(const AuROString &path)
|
void PlatformFS::NukeStream(IFileStream *that)
|
||||||
{
|
|
||||||
return OpenNewEx(path, EFileOpenMode::eWrite, EFileAdvisoryLockLevel::eBlockReadWrite, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM void CreateRelease(IFileStream *that)
|
|
||||||
{
|
|
||||||
AuSafeDelete<PosixFileStream *>(that);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM IFileStream *OpenNew(const AuROString &path, EFileOpenMode openMode, EFileAdvisoryLockLevel lock)
|
|
||||||
{
|
|
||||||
return OpenNewEx(path, openMode, lock, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM void OpenRelease(IFileStream *that)
|
|
||||||
{
|
|
||||||
AuSafeDelete<PosixFileStream *>(that);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM IFileStream *OpenReadNew(const AuROString &path, EFileAdvisoryLockLevel level)
|
|
||||||
{
|
|
||||||
return OpenNewEx(path, EFileOpenMode::eRead, level, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM void OpenReadRelease(IFileStream * that)
|
|
||||||
{
|
|
||||||
AuSafeDelete<PosixFileStream *>(that);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM IFileStream *OpenWriteNew(const AuROString &path, EFileAdvisoryLockLevel level)
|
|
||||||
{
|
|
||||||
return OpenNewEx(path, EFileOpenMode::eWrite, level, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
AUKN_SYM void OpenWriteRelease(IFileStream *that)
|
|
||||||
{
|
{
|
||||||
AuSafeDelete<PosixFileStream *>(that);
|
AuSafeDelete<PosixFileStream *>(that);
|
||||||
}
|
}
|
||||||
|
@ -11,17 +11,17 @@
|
|||||||
|
|
||||||
namespace Aurora::IO::FS
|
namespace Aurora::IO::FS
|
||||||
{
|
{
|
||||||
AUKN_SYM bool BlockFile(const AuROString &path)
|
bool PlatformFS::BlockFile(const AuROString &path)
|
||||||
{
|
{
|
||||||
return AuFS::WriteFile(AuString(path) + ":Zone.Identifier", "[ZoneTransfer]\r\nZoneId=3\r\n");
|
return AuFS::WriteFile(AuString(path) + ":Zone.Identifier", "[ZoneTransfer]\r\nZoneId=3\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool UnblockFile(const AuROString &path)
|
bool PlatformFS::UnblockFile(const AuROString &path)
|
||||||
{
|
{
|
||||||
return AuFS::WriteFile(AuString(path) + ":Zone.Identifier", "[ZoneTransfer]\r\nZoneId=0\r\n");
|
return AuFS::WriteFile(AuString(path) + ":Zone.Identifier", "[ZoneTransfer]\r\nZoneId=0\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool TrustFile(const AuROString &path)
|
bool PlatformFS::TrustFile(const AuROString &path)
|
||||||
{
|
{
|
||||||
AuString idc;
|
AuString idc;
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ namespace Aurora::IO::FS
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool IsFileBlocked(const AuROString &path)
|
bool PlatformFS::IsFileBlocked(const AuROString &path)
|
||||||
{
|
{
|
||||||
AuString content;
|
AuString content;
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ namespace Aurora::IO::FS
|
|||||||
AuStringContains(content, "ZoneId=4\r\n"); // untrusted
|
AuStringContains(content, "ZoneId=4\r\n"); // untrusted
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool IsFileTrusted(const AuROString &path)
|
bool PlatformFS::IsFileTrusted(const AuROString &path)
|
||||||
{
|
{
|
||||||
AuString content;
|
AuString content;
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
namespace Aurora::IO::FS
|
namespace Aurora::IO::FS
|
||||||
{
|
{
|
||||||
AUKN_SYM bool BlockFile(const AuROString &path)
|
bool PlatformFS::BlockFile(const AuROString &path)
|
||||||
{
|
{
|
||||||
auto srcPath = NormalizePathRet(path);
|
auto srcPath = NormalizePathRet(path);
|
||||||
if (srcPath.empty())
|
if (srcPath.empty())
|
||||||
@ -81,7 +81,7 @@ namespace Aurora::IO::FS
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool UnblockFile(const AuROString &path)
|
bool PlatformFS::UnblockFile(const AuROString &path)
|
||||||
{
|
{
|
||||||
auto srcPath = NormalizePathRet(path);
|
auto srcPath = NormalizePathRet(path);
|
||||||
if (srcPath.empty())
|
if (srcPath.empty())
|
||||||
@ -109,7 +109,7 @@ namespace Aurora::IO::FS
|
|||||||
return AuFS::FileExists(srcPath);
|
return AuFS::FileExists(srcPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool TrustFile(const AuROString &path)
|
bool PlatformFS::TrustFile(const AuROString &path)
|
||||||
{
|
{
|
||||||
struct stat s;
|
struct stat s;
|
||||||
mode_t mode { 0755 };
|
mode_t mode { 0755 };
|
||||||
@ -136,7 +136,7 @@ namespace Aurora::IO::FS
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool IsFileBlocked(const AuROString &path)
|
bool PlatformFS::IsFileBlocked(const AuROString &path)
|
||||||
{
|
{
|
||||||
auto srcPath = NormalizePathRet(path);
|
auto srcPath = NormalizePathRet(path);
|
||||||
if (srcPath.empty())
|
if (srcPath.empty())
|
||||||
@ -160,7 +160,7 @@ namespace Aurora::IO::FS
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM bool IsFileTrusted(const AuROString &path)
|
bool PlatformFS::IsFileTrusted(const AuROString &path)
|
||||||
{
|
{
|
||||||
struct stat s;
|
struct stat s;
|
||||||
auto srcPath = NormalizePathRet(path);
|
auto srcPath = NormalizePathRet(path);
|
||||||
|
Loading…
Reference in New Issue
Block a user