Przeglądaj źródła

* Feature: Augment VFS file information with creation times & update some console functions to use VFS.

Robert MacGregor 3 lat temu
rodzic
commit
948bc43d85

+ 9 - 21
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<Torque::FS::FileNode> 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

+ 5 - 2
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
+} // Namespace Torque

+ 3 - 0
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; 

+ 12 - 0
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;

+ 2 - 0
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
 

+ 1 - 0
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);
 }
 
 

+ 4 - 0
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);
 }