From 602844766310318ea68eb086ba4b7c9542ec40d3 Mon Sep 17 00:00:00 2001 From: foxblock Date: Sun, 1 Sep 2024 23:31:51 +0200 Subject: [PATCH] Add filtering folders in ScanDirectoryFiles and ScanDirectoryFilesRecursively Add define FILTER_FOLDER for that purpose Fix folder names matching filter being added to result --- src/raylib.h | 4 ++++ src/rcore.c | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) 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); + } } }