From 03bc2dade9bde9868d7c9d1d38ad48998eb1341d Mon Sep 17 00:00:00 2001 From: Carter Li Date: Tue, 8 Apr 2025 09:11:08 +0800 Subject: [PATCH] Fastfetch: fix loading presets in `{exePath}/presets` Regression of v2.40.0 --- src/fastfetch.c | 15 ++++++++++++--- src/util/platform/FFPlatform_unix.c | 8 -------- src/util/platform/FFPlatform_windows.c | 8 -------- 3 files changed, 12 insertions(+), 19 deletions(-) diff --git a/src/fastfetch.c b/src/fastfetch.c index 19ff6a982..ccd4b37bf 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -483,13 +483,22 @@ static void optionParseConfigFile(FFdata* data, const char* key, const char* val if (instance.state.platform.exePath.length) { - ffStrbufSet(&absolutePath, &instance.state.platform.exePath); - ffStrbufSubstrBeforeLastC(&absolutePath, '/'); - ffStrbufAppendS(&absolutePath, "/"); + uint32_t lastSlash = ffStrbufLastIndexC(&instance.state.platform.exePath, '/') + 1; + assert(lastSlash < instance.state.platform.exePath.length); + + // Try {exePath}/ + ffStrbufSetNS(&absolutePath, lastSlash, instance.state.platform.exePath.chars); ffStrbufAppendS(&absolutePath, value); if (needExtension) ffStrbufAppendS(&absolutePath, ".jsonc"); + if (parseJsoncFile(absolutePath.chars, strictJson)) return; + // Try {exePath}/presets/ + ffStrbufSubstrBefore(&absolutePath, lastSlash); + ffStrbufAppendS(&absolutePath, "presets/"); + ffStrbufAppendS(&absolutePath, value); + if (needExtension) + ffStrbufAppendS(&absolutePath, ".jsonc"); if (parseJsoncFile(absolutePath.chars, strictJson)) return; } diff --git a/src/util/platform/FFPlatform_unix.c b/src/util/platform/FFPlatform_unix.c index a6d5321d6..fbf59d85f 100644 --- a/src/util/platform/FFPlatform_unix.c +++ b/src/util/platform/FFPlatform_unix.c @@ -172,14 +172,6 @@ static void getDataDirs(FFPlatform* platform) #endif ffPlatformPathAddAbsolute(&platform->dataDirs, FASTFETCH_TARGET_DIR_USR "/local/share/"); ffPlatformPathAddAbsolute(&platform->dataDirs, FASTFETCH_TARGET_DIR_USR "/share/"); - - if (platform->exePath.length > 0) - { - // Add ${currentExePath} - FF_STRBUF_AUTO_DESTROY path = ffStrbufCreateCopy(&platform->exePath); - ffStrbufSubstrBeforeLastC(&path, '/'); - ffPlatformPathAddAbsolute(&platform->dataDirs, path.chars); - } } static void getUserName(FFPlatform* platform, const struct passwd* pwd) diff --git a/src/util/platform/FFPlatform_windows.c b/src/util/platform/FFPlatform_windows.c index d95c9443f..71feae3f3 100644 --- a/src/util/platform/FFPlatform_windows.c +++ b/src/util/platform/FFPlatform_windows.c @@ -129,14 +129,6 @@ static void getDataDirs(FFPlatform* platform) platformPathAddKnownFolder(&platform->dataDirs, &FOLDERID_RoamingAppData); platformPathAddKnownFolder(&platform->dataDirs, &FOLDERID_LocalAppData); ffPlatformPathAddHome(&platform->dataDirs, platform, ""); - - if (platform->exePath.length > 0) - { - // Add ${currentExePath} - FF_STRBUF_AUTO_DESTROY path = ffStrbufCreateCopy(&platform->exePath); - ffStrbufSubstrBeforeLastC(&path, '/'); - ffPlatformPathAddAbsolute(&platform->dataDirs, path.chars); - } } static void getUserName(FFPlatform* platform)