From 948bc43d858de52500db30a191f267fe316fb75d Mon Sep 17 00:00:00 2001 From: Robert MacGregor Date: Sat, 18 Dec 2021 03:56:11 -0500 Subject: [PATCH] * Feature: Augment VFS file information with creation times & update some console functions to use VFS. --- Engine/source/console/fileSystemFunctions.cpp | 30 ++++++------------- Engine/source/core/memVolume.cpp | 7 +++-- Engine/source/core/util/zip/zipVolume.cpp | 3 ++ Engine/source/core/volume.cpp | 12 ++++++++ Engine/source/core/volume.h | 2 ++ Engine/source/platformPOSIX/posixVolume.cpp | 1 + Engine/source/platformWin32/winVolume.cpp | 4 +++ 7 files changed, 36 insertions(+), 23 deletions(-) diff --git a/Engine/source/console/fileSystemFunctions.cpp b/Engine/source/console/fileSystemFunctions.cpp index eea26a984..34fd77bc5 100644 --- a/Engine/source/console/fileSystemFunctions.cpp +++ b/Engine/source/console/fileSystemFunctions.cpp @@ -530,8 +530,12 @@ DefineEngineFunction(fileSize, S32, ( const char* fileName ),, "@ingroup FileSystem") { - Con::expandScriptFilename(sgScriptFilenameBuffer, sizeof(sgScriptFilenameBuffer), fileName); - return Platform::getFileSize( sgScriptFilenameBuffer ); + StrongRefPtr node = Torque::FS::GetFileNode(fileName); + if (node.isValid()) + { + return node->getSize(); + } + return -1; } DefineEngineFunction( fileModifiedTime, String, ( const char* fileName ),, @@ -609,13 +613,7 @@ DefineEngineFunction(fileDelete, bool, ( const char* path ),, "@return True if file was successfully deleted\n" "@ingroup FileSystem") { - static char fileName[1024]; - static char sandboxFileName[1024]; - - Con::expandScriptFilename( fileName, sizeof( fileName ), path ); - Platform::makeFullPathName(fileName, sandboxFileName, sizeof(sandboxFileName)); - - return dFileDelete(sandboxFileName); + return Torque::FS::Remove(path); } @@ -830,13 +828,7 @@ DefineEngineFunction( pathCopy, bool, ( const char* fromFile, const char* toFile "@note Only present in a Tools build of Torque.\n" "@ingroup FileSystem") { - char qualifiedFromFile[ 2048 ]; - char qualifiedToFile[ 2048 ]; - - Platform::makeFullPathName( fromFile, qualifiedFromFile, sizeof( qualifiedFromFile ) ); - Platform::makeFullPathName( toFile, qualifiedToFile, sizeof( qualifiedToFile ) ); - - return dPathCopy( qualifiedFromFile, qualifiedToFile, noOverwrite ); + return Torque::FS::CopyFile(fromFile, toFile, noOverwrite); } //----------------------------------------------------------------------------- @@ -876,11 +868,7 @@ DefineEngineFunction( createPath, bool, ( const char* path ),, "@note Only present in a Tools build of Torque.\n" "@ingroup FileSystem" ) { - static char pathName[1024]; - - Con::expandScriptFilename( pathName, sizeof( pathName ), path ); - - return Platform::createPath( pathName ); + return Torque::FS::CreatePath(path); } #endif // TORQUE_TOOLS diff --git a/Engine/source/core/memVolume.cpp b/Engine/source/core/memVolume.cpp index 56d53174f..31cbd76dd 100644 --- a/Engine/source/core/memVolume.cpp +++ b/Engine/source/core/memVolume.cpp @@ -46,7 +46,8 @@ namespace Torque mBuffer = dMalloc(mBufferSize); dMemset(mBuffer, 0, mBufferSize); mModified = Time::getCurrentTime(); - mLastAccess = mModified; + mLastAccess = mModified; + mCreated = mModified; mFileSystem = fs; } @@ -62,6 +63,7 @@ namespace Torque attr->size = mFileSize; attr->mtime = mModified; attr->atime = mLastAccess; + attr->ctime = mCreated; return true; } @@ -81,6 +83,7 @@ namespace Torque U32 mBufferSize; // This is the size of the memory buffer >= mFileSize U32 mFileSize; // This is the size of the "file" <= mBufferSize Time mModified; // Last modified + Time mCreated; // When Created Time mLastAccess; // Last access MemFileSystem* mFileSystem; }; @@ -508,4 +511,4 @@ namespace Torque } } // Namespace Mem -} // Namespace Torque \ No newline at end of file +} // Namespace Torque diff --git a/Engine/source/core/util/zip/zipVolume.cpp b/Engine/source/core/util/zip/zipVolume.cpp index d56c9471e..6fe6edb37 100644 --- a/Engine/source/core/util/zip/zipVolume.cpp +++ b/Engine/source/core/util/zip/zipVolume.cpp @@ -86,6 +86,7 @@ public: // use the mod time for both mod and access time, since we only have mod time in the CD attr->mtime = ZipArchive::DOSTimeToTime(mZipEntry->mCD.mModTime, mZipEntry->mCD.mModDate); attr->atime = ZipArchive::DOSTimeToTime(mZipEntry->mCD.mModTime, mZipEntry->mCD.mModDate); + attr->ctime = ZipArchive::DOSTimeToTime(mZipEntry->mCD.mModTime, mZipEntry->mCD.mModDate); attr->size = mZipEntry->mCD.mUncompressedSize; return true; @@ -197,6 +198,7 @@ public: // use the mod time for both mod and access time, since we only have mod time in the CD attr->mtime = ZipArchive::DOSTimeToTime(mZipEntry->mCD.mModTime, mZipEntry->mCD.mModDate); attr->atime = ZipArchive::DOSTimeToTime(mZipEntry->mCD.mModTime, mZipEntry->mCD.mModDate); + attr->ctime = ZipArchive::DOSTimeToTime(mZipEntry->mCD.mModTime, mZipEntry->mCD.mModDate); attr->size = mZipEntry->mCD.mUncompressedSize; return true; @@ -291,6 +293,7 @@ public: ZipArchive::ZipEntry* zipEntry = mArchive->getRoot(); attr->mtime = ZipArchive::DOSTimeToTime(zipEntry->mCD.mModTime, zipEntry->mCD.mModDate); attr->atime = ZipArchive::DOSTimeToTime(zipEntry->mCD.mModTime, zipEntry->mCD.mModDate); + attr->ctime = ZipArchive::DOSTimeToTime(zipEntry->mCD.mModTime, zipEntry->mCD.mModDate); attr->size = zipEntry->mCD.mUncompressedSize; return true; diff --git a/Engine/source/core/volume.cpp b/Engine/source/core/volume.cpp index 570dcc2cd..a0a4570d7 100644 --- a/Engine/source/core/volume.cpp +++ b/Engine/source/core/volume.cpp @@ -273,6 +273,18 @@ Time FileNode::getModifiedTime() return attrs.mtime; } +Time FileNode::getCreatedTime() +{ + Attributes attrs; + + bool success = getAttributes(&attrs); + + if (!success) + return Time(); + + return attrs.ctime; +} + U64 FileNode::getSize() { Attributes attrs; diff --git a/Engine/source/core/volume.h b/Engine/source/core/volume.h index 627fdb58a..4766439c6 100644 --- a/Engine/source/core/volume.h +++ b/Engine/source/core/volume.h @@ -114,6 +114,7 @@ public: String name; ///< File/Directory name Time mtime; ///< Last modified time Time atime; ///< Last access time + Time ctime; ///< Creation Time U64 size; }; @@ -128,6 +129,7 @@ public: // Convenience routines - may be overridden for optimal access virtual Time getModifiedTime(); ///< @note This will return Time() on failure + virtual Time getCreatedTime(); ///< @note This will return Time() on failure virtual U64 getSize(); ///< @note This will return 0 on failure virtual U32 getChecksum(); ///< @note This will return 0 on failure diff --git a/Engine/source/platformPOSIX/posixVolume.cpp b/Engine/source/platformPOSIX/posixVolume.cpp index 3a1067aa6..b50a226e3 100644 --- a/Engine/source/platformPOSIX/posixVolume.cpp +++ b/Engine/source/platformPOSIX/posixVolume.cpp @@ -135,6 +135,7 @@ static void copyStatAttributes(const struct stat& info, FileNode::Attributes* at attr->size = info.st_size; attr->mtime = UnixTimeToTime(info.st_mtime); attr->atime = UnixTimeToTime(info.st_atime); + attr->ctime = UnixTimeToTime(info.st_ctime); } diff --git a/Engine/source/platformWin32/winVolume.cpp b/Engine/source/platformWin32/winVolume.cpp index 779a5d7b9..0271ff96b 100644 --- a/Engine/source/platformWin32/winVolume.cpp +++ b/Engine/source/platformWin32/winVolume.cpp @@ -143,6 +143,10 @@ static void _CopyStatAttributes(const WIN32_FIND_DATAW& info, FileNode::Attribut attr->atime = Win32FileTimeToTime( info.ftLastAccessTime.dwLowDateTime, info.ftLastAccessTime.dwHighDateTime); + + attr->ctime = Win32FileTimeToTime( + info.ftCreationTime.dwLowDateTime, + info.ftCreationTime.dwHighDateTime); }