diff --git a/src/core/file_sys/vfs/vfs_real.cpp b/src/core/file_sys/vfs/vfs_real.cpp index 1eafff6c06..60997a8a65 100644 --- a/src/core/file_sys/vfs/vfs_real.cpp +++ b/src/core/file_sys/vfs/vfs_real.cpp @@ -449,8 +449,19 @@ std::vector RealVfsDirectory::GetFiles() const { FileTimeStampRaw RealVfsDirectory::GetFileTimeStamp(std::string_view path_) const { const auto full_path = FS::SanitizePath(path + '/' + std::string(path_)); +#ifdef __OPENORBIS__ + // DO NOT USE NORMAL STAT, it's bugged on OO toolchain + OrbisKernelStat st{}; + const auto stat_result = stat(full_path.c_str(), reinterpret_cast(std::addressof(st))); + if (stat_result != 0) + return {}; + return { + .created{u64(st.st_ctime)}, + .accessed{u64(st.st_atime)}, + .modified{u64(st.st_mtime)}, + }; +#else const auto fs_path = std::filesystem::path{FS::ToU8String(full_path)}; - #ifdef _WIN32 struct _stat64 file_status; const auto stat_result = _wstat64(fs_path.c_str(), &file_status); @@ -458,16 +469,14 @@ FileTimeStampRaw RealVfsDirectory::GetFileTimeStamp(std::string_view path_) cons struct stat file_status; const auto stat_result = stat(fs_path.c_str(), &file_status); #endif - - if (stat_result != 0) { + if (stat_result != 0) return {}; - } - return { - .created{static_cast(file_status.st_ctime)}, - .accessed{static_cast(file_status.st_atime)}, - .modified{static_cast(file_status.st_mtime)}, + .created{u64(file_status.st_ctime)}, + .accessed{u64(file_status.st_atime)}, + .modified{u64(file_status.st_mtime)}, }; +#endif } std::vector RealVfsDirectory::GetSubdirectories() const {