From 0f9b5f274a9a2d9decff69c963b40ce37365d2a9 Mon Sep 17 00:00:00 2001 From: Jonas Kulla Date: Wed, 8 Mar 2017 16:30:07 +0100 Subject: [PATCH] Filesystem: Search for "Fonts/" with case-insensitivity --- src/filesystem.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/filesystem.cpp b/src/filesystem.cpp index fe5d403..d7fd36b 100644 --- a/src/filesystem.cpp +++ b/src/filesystem.cpp @@ -458,7 +458,7 @@ struct FontSetsCBData SharedFontState *sfs; }; -static void fontSetEnumCB(void *data, const char *, +static void fontSetEnumCB(void *data, const char *dir, const char *fname) { FontSetsCBData *d = static_cast(data); @@ -480,7 +480,7 @@ static void fontSetEnumCB(void *data, const char *, return; char filename[512]; - snprintf(filename, sizeof(filename), "Fonts/%s", fname); + snprintf(filename, sizeof(filename), "%s/%s", dir, fname); PHYSFS_File *handle = PHYSFS_openRead(filename); @@ -495,11 +495,29 @@ static void fontSetEnumCB(void *data, const char *, SDL_RWclose(&ops); } +/* Basically just a case-insensitive search + * for the folder "Fonts"... */ +static void findFontsFolderCB(void *data, const char *, + const char *fname) +{ + size_t i = 0; + char buffer[512]; + const char *s = fname; + + while (s && i < sizeof(buffer)) + buffer[i++] = tolower(*s++); + + buffer[i] = '\0'; + + if (strcmp(buffer, "fonts") == 0) + PHYSFS_enumerateFilesCallback(fname, fontSetEnumCB, data); +} + void FileSystem::initFontSets(SharedFontState &sfs) { FontSetsCBData d = { p, &sfs }; - PHYSFS_enumerateFilesCallback("Fonts", fontSetEnumCB, &d); + PHYSFS_enumerateFilesCallback(".", findFontsFolderCB, &d); } struct OpenReadEnumData