From 6f66b8726228b69dcd71e091aef049333272ef5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 13 Oct 2022 22:28:43 +0800 Subject: [PATCH] Windows: support --list-presets --- src/detection/packages/packages_windows.c | 2 +- src/fastfetch.c | 38 +++++++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/detection/packages/packages_windows.c b/src/detection/packages/packages_windows.c index b64374e0e..d9712b6f7 100644 --- a/src/detection/packages/packages_windows.c +++ b/src/detection/packages/packages_windows.c @@ -15,7 +15,7 @@ static uint32_t getNumElements(const char* searchPath /* including `\*` suffix * { if(wfd.dwFileAttributes & type) counter++; - } while (FindNextFileA(hFind, &wfd) == TRUE); + } while (FindNextFileA(hFind, &wfd)); FindClose(hFind); } diff --git a/src/fastfetch.c b/src/fastfetch.c index d21913664..817dd5dba 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -7,11 +7,13 @@ #include #include #include -#include #include #ifdef WIN32 #include "util/windows/getline.h" + #include +#else + #include #endif typedef struct CustomValue @@ -434,7 +436,6 @@ static inline void listAvailablePresetsFromFolder(FFstrbuf* folder, uint8_t inde { if(entry->d_type == DT_DIR) { - if(strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) continue; @@ -453,7 +454,38 @@ static inline void listAvailablePresetsFromFolder(FFstrbuf* folder, uint8_t inde closedir(dir); #else - FF_UNUSED(folder, indentation, folderName); + uint32_t folderLength = folder->length; + + if(folderName != NULL) + printf("%s/\n", folderName); + + ffStrbufAppendC(folder, '*'); + WIN32_FIND_DATAA entry; + HANDLE hFind = FindFirstFileA(folder->chars, &entry); + if(hFind == INVALID_HANDLE_VALUE) + return; + + do + { + if (entry.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + if(strcmp(entry.cFileName, ".") == 0 || strcmp(entry.cFileName, "..") == 0) + continue; + + ffStrbufSubstrBefore(folder, folderLength); + ffStrbufAppendS(folder, entry.cFileName); + ffStrbufAppendC(folder, '/'); + listAvailablePresetsFromFolder(folder, (uint8_t) (indentation + 1), entry.cFileName); + ffStrbufSubstrBefore(folder, folderLength); + continue; + } + + for(uint8_t i = 0; i < indentation; i++) + fputs(" | ", stdout); + + puts(entry.cFileName); + } while (FindNextFileA(hFind, &entry)); + FindClose(hFind); #endif }