diff options
-rw-r--r-- | src/skel/crossplatform.cpp | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/src/skel/crossplatform.cpp b/src/skel/crossplatform.cpp index e9320c05..4b7d3d9a 100644 --- a/src/skel/crossplatform.cpp +++ b/src/skel/crossplatform.cpp @@ -26,28 +26,21 @@ void GetLocalTime_CP(SYSTEMTIME *out) { // Compatible with Linux/POSIX and MinGW on Windows #ifndef _WIN32 HANDLE FindFirstFile(const char* pathname, WIN32_FIND_DATA* firstfile) { - char pathCopy[32]; + char pathCopy[MAX_PATH]; + strcpy(pathCopy, pathname); - strncpy(pathCopy, pathname, 32); - char* folder = strtok(pathCopy, "*"); + char *folder = strtok(pathCopy, "*"); + char *extension = strtok(NULL, "*"); + // because strtok doesn't return NULL for last delimiter + if (extension - folder == strlen(pathname)) + extension = nil; + // Case-sensitivity and backslashes... - char *realFolder = casepath(folder); - char *extension = nil; + // Will be freed at the bottom + char *realFolder = casepath(folder); if (realFolder) { - realFolder[strlen(realFolder)] = '*'; - extension = strtok(NULL, "*"); - if (extension) { - strcat(realFolder, extension); - } - - strncpy(pathCopy, realFolder, 32); - free(realFolder); - folder = strtok(pathCopy, "*"); - } else { - // Wildcard (*) - if (strlen(folder) + 1 != strlen(pathname)) - extension = strtok(NULL, "*"); + folder = realFolder; } strncpy(firstfile->folder, folder, sizeof(firstfile->folder)); @@ -57,8 +50,11 @@ HANDLE FindFirstFile(const char* pathname, WIN32_FIND_DATA* firstfile) { else firstfile->extension[0] = '\0'; + if (realFolder) + free(realFolder); + HANDLE d; - if ((d = (HANDLE)opendir(folder)) == NULL || !FindNextFile(d, firstfile)) + if ((d = (HANDLE)opendir(firstfile->folder)) == NULL || !FindNextFile(d, firstfile)) return NULL; return d; |