|
@@ -113,7 +113,7 @@
|
|
|
|
|
|
#include <stdlib.h> // Required for: srand(), rand(), atexit()
|
|
#include <stdlib.h> // Required for: srand(), rand(), atexit()
|
|
#include <stdio.h> // Required for: sprintf() [Used in OpenURL()]
|
|
#include <stdio.h> // Required for: sprintf() [Used in OpenURL()]
|
|
-#include <string.h> // Required for: strrchr(), strcmp(), strlen(), memset()
|
|
|
|
|
|
+#include <string.h> // Required for: strlen(), strcpy(), strcmp(), strrchr(), memset()
|
|
#include <time.h> // Required for: time() [Used in InitTimer()]
|
|
#include <time.h> // Required for: time() [Used in InitTimer()]
|
|
#include <math.h> // Required for: tan() [Used in BeginMode3D()], atan2f() [Used in LoadVrStereoConfig()]
|
|
#include <math.h> // Required for: tan() [Used in BeginMode3D()], atan2f() [Used in LoadVrStereoConfig()]
|
|
|
|
|
|
@@ -1940,34 +1940,61 @@ bool FileExists(const char *fileName)
|
|
}
|
|
}
|
|
|
|
|
|
// Check file extension
|
|
// Check file extension
|
|
-// TODO: Avoid [rtext] module dependency
|
|
|
|
bool IsFileExtension(const char *fileName, const char *ext)
|
|
bool IsFileExtension(const char *fileName, const char *ext)
|
|
{
|
|
{
|
|
- #define MAX_FILE_EXTENSION_LENGTH 16
|
|
|
|
|
|
+ #define MAX_FILE_EXTENSIONS 32
|
|
|
|
|
|
bool result = false;
|
|
bool result = false;
|
|
const char *fileExt = GetFileExtension(fileName);
|
|
const char *fileExt = GetFileExtension(fileName);
|
|
|
|
|
|
if (fileExt != NULL)
|
|
if (fileExt != NULL)
|
|
{
|
|
{
|
|
-#if defined(SUPPORT_MODULE_RTEXT) && defined(SUPPORT_TEXT_MANIPULATION)
|
|
|
|
- int extCount = 0;
|
|
|
|
- char **checkExts = TextSplit(ext, ';', &extCount); // WARNING: Module required: rtext
|
|
|
|
-
|
|
|
|
- char fileExtLower[MAX_FILE_EXTENSION_LENGTH + 1] = { 0 };
|
|
|
|
- strncpy(fileExtLower, TextToLower(fileExt), MAX_FILE_EXTENSION_LENGTH); // WARNING: Module required: rtext
|
|
|
|
|
|
+ int fileExtLen = strlen(fileExt);
|
|
|
|
+ char fileExtLower[8] = { 0 };
|
|
|
|
+ char *fileExtLowerPtr = fileExtLower;
|
|
|
|
+ for (int i = 0; i < fileExtLen; i++)
|
|
|
|
+ {
|
|
|
|
+ // Copy and convert to lower-case
|
|
|
|
+ if ((fileExt[i] >= 'A') && (fileExt[i] <= 'Z')) fileExtLower[i] = fileExt[i] + 32;
|
|
|
|
+ else fileExtLower[i] = fileExt[i];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ int extCount = 1;
|
|
|
|
+ int extLen = strlen(ext);
|
|
|
|
+ char *extList = (char *)RL_CALLOC(extLen + 1, 1);
|
|
|
|
+ char *extListPtrs[MAX_FILE_EXTENSIONS] = { 0 };
|
|
|
|
+ strcpy(extList, ext);
|
|
|
|
+ extListPtrs[0] = extList;
|
|
|
|
+
|
|
|
|
+ for (int i = 0; i < extLen; i++)
|
|
|
|
+ {
|
|
|
|
+ // Convert to lower-case if extension is upper-case
|
|
|
|
+ if ((extList[i] >= 'A') && (extList[i] <= 'Z')) extList[i] += 32;
|
|
|
|
+
|
|
|
|
+ // Get pointer to next extension and add null-terminator
|
|
|
|
+ if ((extList[i] == ';') && (extCount < (MAX_FILE_EXTENSIONS - 1)))
|
|
|
|
+ {
|
|
|
|
+ extList[i] = '\0';
|
|
|
|
+ extListPtrs[extCount] = extList + i + 1;
|
|
|
|
+ extCount++;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
for (int i = 0; i < extCount; i++)
|
|
for (int i = 0; i < extCount; i++)
|
|
{
|
|
{
|
|
- if (strcmp(fileExtLower, TextToLower(checkExts[i])) == 0)
|
|
|
|
|
|
+ // Consider the case where extension provided
|
|
|
|
+ // does not start with the '.'
|
|
|
|
+ fileExtLowerPtr = fileExtLower;
|
|
|
|
+ if (extListPtrs[i][0] != '.') fileExtLowerPtr++;
|
|
|
|
+
|
|
|
|
+ if (strcmp(fileExtLowerPtr, extListPtrs[i]) == 0)
|
|
{
|
|
{
|
|
result = true;
|
|
result = true;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-#else
|
|
|
|
- if (strcmp(fileExt, ext) == 0) result = true;
|
|
|
|
-#endif
|
|
|
|
|
|
+
|
|
|
|
+ RL_FREE(extList);
|
|
}
|
|
}
|
|
|
|
|
|
return result;
|
|
return result;
|