diff --git a/Engine/source/platformMac/macVolume.mm b/Engine/source/platformMac/macVolume.mm index c360be3a1..00152eef8 100644 --- a/Engine/source/platformMac/macVolume.mm +++ b/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; -} +} \ No newline at end of file diff --git a/Engine/source/platformPOSIX/POSIXFileio.cpp b/Engine/source/platformPOSIX/POSIXFileio.cpp new file mode 100644 index 000000000..8bdcea7b5 --- /dev/null +++ b/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 +#include + +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; +} \ No newline at end of file diff --git a/Engine/source/platformX86UNIX/x86UNIXIO.cpp b/Engine/source/platformPOSIX/POSIXIO.cpp similarity index 96% rename from Engine/source/platformX86UNIX/x86UNIXIO.cpp rename to Engine/source/platformPOSIX/POSIXIO.cpp index 975b9a9f5..8ac5924f9 100644 --- a/Engine/source/platformX86UNIX/x86UNIXIO.cpp +++ b/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 @@ -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; -} +} \ No newline at end of file diff --git a/Engine/source/platformX86UNIX/x86UNIXFileio.cpp b/Engine/source/platformX86UNIX/x86UNIXFileio.cpp index a3d6c2d55..591b28f1c 100644 --- a/Engine/source/platformX86UNIX/x86UNIXFileio.cpp +++ b/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