FileSystem: Add Error parameter to StatFile()
This commit is contained in:
parent
1434507b41
commit
57d3aa4850
|
@ -1874,12 +1874,15 @@ static void TranslateStat64(struct stat* st, const struct _stat64& st64)
|
||||||
st->st_ctime = static_cast<time_t>(st64.st_ctime);
|
st->st_ctime = static_cast<time_t>(st64.st_ctime);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileSystem::StatFile(const char* path, struct stat* st)
|
bool FileSystem::StatFile(const char* path, struct stat* st, Error* error)
|
||||||
{
|
{
|
||||||
// convert to wide string
|
// convert to wide string
|
||||||
const std::wstring wpath = GetWin32Path(path);
|
const std::wstring wpath = GetWin32Path(path);
|
||||||
if (wpath.empty())
|
if (wpath.empty()) [[unlikely]]
|
||||||
|
{
|
||||||
|
Error::SetStringView(error, "Path is empty.");
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
struct _stat64 st64;
|
struct _stat64 st64;
|
||||||
if (_wstati64(wpath.c_str(), &st64) != 0)
|
if (_wstati64(wpath.c_str(), &st64) != 0)
|
||||||
|
@ -1889,31 +1892,43 @@ bool FileSystem::StatFile(const char* path, struct stat* st)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileSystem::StatFile(std::FILE* fp, struct stat* st)
|
bool FileSystem::StatFile(std::FILE* fp, struct stat* st, Error* error)
|
||||||
{
|
{
|
||||||
const int fd = _fileno(fp);
|
const int fd = _fileno(fp);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
|
{
|
||||||
|
Error::SetErrno(error, "_fileno() failed: ", errno);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
struct _stat64 st64;
|
struct _stat64 st64;
|
||||||
if (_fstati64(fd, &st64) != 0)
|
if (_fstati64(fd, &st64) != 0)
|
||||||
|
{
|
||||||
|
Error::SetErrno(error, "_fstati64() failed: ", errno);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
TranslateStat64(st, st64);
|
TranslateStat64(st, st64);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileSystem::StatFile(const char* path, FILESYSTEM_STAT_DATA* sd)
|
bool FileSystem::StatFile(const char* path, FILESYSTEM_STAT_DATA* sd, Error* error)
|
||||||
{
|
{
|
||||||
// convert to wide string
|
// convert to wide string
|
||||||
const std::wstring wpath = GetWin32Path(path);
|
const std::wstring wpath = GetWin32Path(path);
|
||||||
if (wpath.empty())
|
if (wpath.empty()) [[unlikely]]
|
||||||
|
{
|
||||||
|
Error::SetStringView(error, "Path is empty.");
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// determine attributes for the path. if it's a directory, things have to be handled differently..
|
// determine attributes for the path. if it's a directory, things have to be handled differently..
|
||||||
DWORD fileAttributes = GetFileAttributesW(wpath.c_str());
|
DWORD fileAttributes = GetFileAttributesW(wpath.c_str());
|
||||||
if (fileAttributes == INVALID_FILE_ATTRIBUTES)
|
if (fileAttributes == INVALID_FILE_ATTRIBUTES)
|
||||||
|
{
|
||||||
|
Error::SetWin32(error, "GetFileAttributesW() failed: ", GetLastError());
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// test if it is a directory
|
// test if it is a directory
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
|
@ -1930,12 +1945,16 @@ bool FileSystem::StatFile(const char* path, FILESYSTEM_STAT_DATA* sd)
|
||||||
|
|
||||||
// createfile succeded?
|
// createfile succeded?
|
||||||
if (hFile == INVALID_HANDLE_VALUE)
|
if (hFile == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
Error::SetWin32(error, "CreateFileW() failed: ", GetLastError());
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// use GetFileInformationByHandle
|
// use GetFileInformationByHandle
|
||||||
BY_HANDLE_FILE_INFORMATION bhfi;
|
BY_HANDLE_FILE_INFORMATION bhfi;
|
||||||
if (GetFileInformationByHandle(hFile, &bhfi) == FALSE)
|
if (GetFileInformationByHandle(hFile, &bhfi) == FALSE)
|
||||||
{
|
{
|
||||||
|
Error::SetWin32(error, "GetFileInformationByHandle() failed: ", GetLastError());
|
||||||
CloseHandle(hFile);
|
CloseHandle(hFile);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1951,15 +1970,21 @@ bool FileSystem::StatFile(const char* path, FILESYSTEM_STAT_DATA* sd)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileSystem::StatFile(std::FILE* fp, FILESYSTEM_STAT_DATA* sd)
|
bool FileSystem::StatFile(std::FILE* fp, FILESYSTEM_STAT_DATA* sd, Error* error)
|
||||||
{
|
{
|
||||||
const int fd = _fileno(fp);
|
const int fd = _fileno(fp);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
|
{
|
||||||
|
Error::SetErrno(error, "_fileno() failed: ", errno);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
struct _stat64 st;
|
struct _stat64 st;
|
||||||
if (_fstati64(fd, &st) != 0)
|
if (_fstati64(fd, &st) != 0)
|
||||||
|
{
|
||||||
|
Error::SetErrno(error, "_fstati64() failed: ", errno);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// parse attributes
|
// parse attributes
|
||||||
sd->CreationTime = st.st_ctime;
|
sd->CreationTime = st.st_ctime;
|
||||||
|
@ -2420,26 +2445,44 @@ bool FileSystem::FindFiles(const char* path, const char* pattern, u32 flags, Fin
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileSystem::StatFile(const char* path, struct stat* st)
|
bool FileSystem::StatFile(const char* path, struct stat* st, Error* error)
|
||||||
{
|
{
|
||||||
return stat(path, st) == 0;
|
if (stat(path, st) != 0)
|
||||||
|
{
|
||||||
|
Error::SetErrno(error, "stat() failed: ", errno);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileSystem::StatFile(std::FILE* fp, struct stat* st)
|
bool FileSystem::StatFile(std::FILE* fp, struct stat* st, Error* error)
|
||||||
{
|
{
|
||||||
const int fd = fileno(fp);
|
const int fd = fileno(fp);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
|
{
|
||||||
|
Error::SetErrno(error, "fileno() failed: ", errno);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return fstat(fd, st) == 0;
|
if (fstat(fd, st) != 0)
|
||||||
|
{
|
||||||
|
Error::SetErrno(error, "fstat() failed: ", errno);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileSystem::StatFile(const char* path, FILESYSTEM_STAT_DATA* sd)
|
bool FileSystem::StatFile(const char* path, FILESYSTEM_STAT_DATA* sd, Error* error)
|
||||||
{
|
{
|
||||||
// stat file
|
// stat file
|
||||||
struct stat sysStatData;
|
struct stat sysStatData;
|
||||||
if (stat(path, &sysStatData) < 0)
|
if (stat(path, &sysStatData) < 0)
|
||||||
|
{
|
||||||
|
Error::SetErrno(error, "stat() failed: ", errno);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// parse attributes
|
// parse attributes
|
||||||
sd->CreationTime = sysStatData.st_ctime;
|
sd->CreationTime = sysStatData.st_ctime;
|
||||||
|
@ -2451,16 +2494,22 @@ bool FileSystem::StatFile(const char* path, FILESYSTEM_STAT_DATA* sd)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileSystem::StatFile(std::FILE* fp, FILESYSTEM_STAT_DATA* sd)
|
bool FileSystem::StatFile(std::FILE* fp, FILESYSTEM_STAT_DATA* sd, Error* error)
|
||||||
{
|
{
|
||||||
const int fd = fileno(fp);
|
const int fd = fileno(fp);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
|
{
|
||||||
|
Error::SetErrno(error, "fileno() failed: ", errno);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// stat file
|
// stat file
|
||||||
struct stat sysStatData;
|
struct stat sysStatData;
|
||||||
if (fstat(fd, &sysStatData) < 0)
|
if (fstat(fd, &sysStatData) != 0)
|
||||||
|
{
|
||||||
|
Error::SetErrno(error, "stat() failed: ", errno);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// parse attributes
|
// parse attributes
|
||||||
sd->CreationTime = sysStatData.st_ctime;
|
sd->CreationTime = sysStatData.st_ctime;
|
||||||
|
|
|
@ -66,10 +66,10 @@ std::vector<std::string> GetRootDirectoryList();
|
||||||
bool FindFiles(const char* path, const char* pattern, u32 flags, FindResultsArray* results);
|
bool FindFiles(const char* path, const char* pattern, u32 flags, FindResultsArray* results);
|
||||||
|
|
||||||
/// Stat file
|
/// Stat file
|
||||||
bool StatFile(const char* path, struct stat* st);
|
bool StatFile(const char* path, struct stat* st, Error* error = nullptr);
|
||||||
bool StatFile(std::FILE* fp, struct stat* st);
|
bool StatFile(std::FILE* fp, struct stat* st, Error* error = nullptr);
|
||||||
bool StatFile(const char* path, FILESYSTEM_STAT_DATA* sd);
|
bool StatFile(const char* path, FILESYSTEM_STAT_DATA* sd, Error* error = nullptr);
|
||||||
bool StatFile(std::FILE* fp, FILESYSTEM_STAT_DATA* sd);
|
bool StatFile(std::FILE* fp, FILESYSTEM_STAT_DATA* sd, Error* error = nullptr);
|
||||||
s64 GetPathFileSize(const char* path);
|
s64 GetPathFileSize(const char* path);
|
||||||
|
|
||||||
/// File exists?
|
/// File exists?
|
||||||
|
|
Loading…
Reference in New Issue