diff --git a/src/raylib.h b/src/raylib.h index 30ba8bd2a..b55f91d71 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -194,6 +194,10 @@ #define MAGENTA CLITERAL(Color){ 255, 0, 255, 255 } // Magenta #define RAYWHITE CLITERAL(Color){ 245, 245, 245, 255 } // My own White (raylib logo) +// Filter string used in ScanDirectoryFiles, ScanDirectoryFilesRecursively and +// LoadDirectoryFilesEx to include directories in the result array +#define FILTER_FOLDER "/DIR" + //---------------------------------------------------------------------------------- // Structures Definition //---------------------------------------------------------------------------------- diff --git a/src/rcore.c b/src/rcore.c index 972d58600..ebf1c67e1 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -3313,10 +3313,21 @@ static void ScanDirectoryFiles(const char *basePath, FilePathList *files, const if (filter != NULL) { - if (IsFileExtension(path, filter)) + if (IsPathFile(path)) { - strcpy(files->paths[files->count], path); - files->count++; + if (IsFileExtension(path, filter)) + { + strcpy(files->paths[files->count], path); + files->count++; + } + } + else + { + if (TextFindIndex(filter, FILTER_FOLDER) >= 0) + { + strcpy(files->paths[files->count], path); + files->count++; + } } } else @@ -3376,7 +3387,22 @@ static void ScanDirectoryFilesRecursively(const char *basePath, FilePathList *fi break; } } - else ScanDirectoryFilesRecursively(path, files, filter); + else + { + if (filter != NULL && TextFindIndex(filter, FILTER_FOLDER) >= 0) + { + strcpy(files->paths[files->count], path); + files->count++; + } + + if (files->count >= files->capacity) + { + TRACELOG(LOG_WARNING, "FILEIO: Maximum filepath scan capacity reached (%i files)", files->capacity); + break; + } + + ScanDirectoryFilesRecursively(path, files, filter); + } } }