瀏覽代碼

* BugFix: Corrections to the Unix file IO to allow for compilation on ARM Unix devics.

Robert MacGregor 4 年之前
父節點
當前提交
dd03af5041

+ 1 - 6
Engine/source/platformMac/macVolume.mm

@@ -175,9 +175,4 @@ bool MacFileSystemChangeNotifier::internalRemoveNotification( const Torque::Path
 Torque::FS::FileSystemRef Platform::FS::createNativeFS( const String &volume )
 {
    return new MacFileSystem( volume );
-}
-
-bool Torque::FS::VerifyWriteAccess(const Torque::Path &path)
-{
-   return true;
-}
+}

+ 90 - 0
Engine/source/platformPOSIX/POSIXFileio.cpp

@@ -0,0 +1,90 @@
+#include "core/fileio.h"
+#include "core/util/tVector.h"
+#include "core/stringTable.h"
+#include "console/console.h"
+#include "core/strings/stringFunctions.h"
+#include "util/tempAlloc.h"
+#include "cinterface/c_controlInterface.h"
+#include "core/volume.h"
+
+/* these are for reading directors, getting stats, etc. */
+#include <dirent.h>
+#include <sys/stat.h>
+
+const int MaxPath = PATH_MAX;
+
+//------------------------------------------------------------------------------
+// munge the case of the specified pathName.  This means try to find the actual
+// filename in with case-insensitive matching on the specified pathName, and
+// store the actual found name.
+bool ResolvePathCaseInsensitive(char* pathName, S32 pathNameSize, bool requiredAbsolute)
+{
+    char tempBuf[MaxPath];
+    dStrncpy(tempBuf, pathName, pathNameSize);
+
+    // Check if we're an absolute path
+    if (pathName[0] != '/')
+    {
+        AssertFatal(!requiredAbsolute, "PATH must be absolute");
+        return false;
+    }
+
+    struct stat filestat;
+    const int MaxPathEl = 200;
+    char *currChar = pathName;
+    char testPath[MaxPath];
+    char pathEl[MaxPathEl];
+    bool done = false;
+    bool foundMatch = false;
+
+    dStrncpy(tempBuf, "/", MaxPath);
+    currChar++;
+
+    while (!done)
+    {
+        char* termChar = dStrchr(currChar, '/');
+        if (termChar == NULL)
+            termChar = dStrchr(currChar, '\0');
+        AssertFatal(termChar, "Can't find / or NULL terminator");
+
+        S32 pathElLen = (termChar - currChar);
+        dStrncpy(pathEl, currChar, pathElLen);
+        pathEl[pathElLen] = '\0';
+        dStrncpy(testPath, tempBuf, MaxPath);
+        dStrcat(testPath, pathEl, MaxPath);
+        if (stat(testPath, &filestat) != -1)
+        {
+            dStrncpy(tempBuf, testPath, MaxPath);
+        }
+        else
+        {
+            DIR *dir = opendir(tempBuf);
+            struct dirent* ent;
+            while (dir != NULL && (ent = readdir(dir)) != NULL)
+            {
+                if (dStricmp(pathEl, ent->d_name) == 0)
+                {
+                    foundMatch = true;
+                    dStrcat(tempBuf, ent->d_name, MaxPath);
+                    break;
+                }
+            }
+
+            if (!foundMatch)
+                dStrncpy(tempBuf, testPath, MaxPath);
+            if (dir)
+                closedir(dir);
+        }
+        if (*termChar == '/')
+        {
+            dStrcat(tempBuf, "/", MaxPath);
+            termChar++;
+            currChar = termChar;
+        }
+        else
+            done = true;
+    }
+
+    dStrncpy(pathName, tempBuf, pathNameSize);
+    return foundMatch;
+}

+ 3 - 2
Engine/source/platformX86UNIX/x86UNIXIO.cpp → Engine/source/platformPOSIX/POSIXIO.cpp

@@ -20,7 +20,8 @@
 // IN THE SOFTWARE.
 //-----------------------------------------------------------------------------
 
-#include "platformX86UNIX/platformX86UNIX.h"
+#include "platform/types.h"
+#include "platform/platformMemory.h"
 #include "core/volume.h"
 
 #include <sys/types.h>
@@ -54,4 +55,4 @@ ssize_t x86UNIXWrite(int fd, const void *buf, size_t nbytes)
 bool Torque::FS::VerifyWriteAccess(const Torque::Path &path)
 {
    return true;
-}
+}

+ 0 - 76
Engine/source/platformX86UNIX/x86UNIXFileio.cpp

@@ -179,82 +179,6 @@ bool dPathCopy(const char *fromName, const char *toName, bool nooverwrite)
     return sgPrefDir;
  }
 
- //------------------------------------------------------------------------------
- // munge the case of the specified pathName.  This means try to find the actual
- // filename in with case-insensitive matching on the specified pathName, and
- // store the actual found name.
- bool ResolvePathCaseInsensitive(char* pathName, S32 pathNameSize, bool requiredAbsolute)
- {
-    char tempBuf[MaxPath];
-    dStrncpy(tempBuf, pathName, pathNameSize);
-
-    // Check if we're an absolute path
-    if (pathName[0] != '/')
-    {
-        AssertFatal(!requiredAbsolute, "PATH must be absolute");
-        return false;
-    }
-
-    struct stat filestat;
-    const int MaxPathEl = 200;
-    char *currChar = pathName;
-    char testPath[MaxPath];
-    char pathEl[MaxPathEl];
-    bool done = false;
-    bool foundMatch = false;
-
-    dStrncpy(tempBuf, "/", MaxPath);
-    currChar++;
-
-    while (!done)
-    {
-       char* termChar = dStrchr(currChar, '/');
-       if (termChar == NULL)
-          termChar = dStrchr(currChar, '\0');
-       AssertFatal(termChar, "Can't find / or NULL terminator");
-
-       S32 pathElLen = (termChar - currChar);
-       dStrncpy(pathEl, currChar, pathElLen);
-       pathEl[pathElLen] = '\0';
-       dStrncpy(testPath, tempBuf, MaxPath);
-       dStrcat(testPath, pathEl, MaxPath);
-       if (stat(testPath, &filestat) != -1)
-       {
-          dStrncpy(tempBuf, testPath, MaxPath);
-       }
-       else
-       {
-          DIR *dir = opendir(tempBuf);
-          struct dirent* ent;
-          while (dir != NULL && (ent = readdir(dir)) != NULL)
-          {
-             if (dStricmp(pathEl, ent->d_name) == 0)
-             {
-                foundMatch = true;
-                dStrcat(tempBuf, ent->d_name, MaxPath);
-                break;
-             }
-          }
-
-          if (!foundMatch)
-             dStrncpy(tempBuf, testPath, MaxPath);
-          if (dir)
-             closedir(dir);
-       }
-       if (*termChar == '/')
-       {
-          dStrcat(tempBuf, "/", MaxPath);
-          termChar++;
-          currChar = termChar;
-       }
-       else
-          done = true;
-    }
-
-    dStrncpy(pathName, tempBuf, pathNameSize);
-    return foundMatch;
- }
-
  //-----------------------------------------------------------------------------
  // Returns true if the pathname exists, false otherwise.  If isFile is true,
  // the pathname is assumed to be a file path, and only the directory part