Modules: refactor module option handling for static allocation

Moves module option structs out of global config and removes dynamic allocation, using static buffers and size assertions for safer, simpler management.

Refactors module initialization and destruction to work with isolated option structs, eliminating the need for the previous modules container and related code.

Unifies module option header usage and updates detection logic to leverage statically-sized option buffers, improving encapsulation and maintainability.

Simplifies module function signatures and reduces coupling between modules and config.

Enhances future extensibility and reliability by enforcing max size constraints and removing unnecessary indirections.
This commit is contained in:
李通洲
2025-08-04 14:25:14 +08:00
parent 559082806b
commit 75d2c668d0
289 changed files with 1449 additions and 1672 deletions
+24 -25
View File
@@ -412,6 +412,30 @@ void ffGenerateDiskJsonResult(FFDiskOptions* options, yyjson_mut_doc* doc, yyjso
}
}
void ffInitDiskOptions(FFDiskOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "");
ffStrbufInit(&options->folders);
#if _WIN32 || __APPLE__ || __ANDROID__
ffStrbufInit(&options->hideFolders);
#else
ffStrbufInitStatic(&options->hideFolders, "/efi:/boot:/boot/efi:/boot/firmware");
#endif
ffStrbufInit(&options->hideFS);
options->showTypes = FF_DISK_VOLUME_TYPE_REGULAR_BIT | FF_DISK_VOLUME_TYPE_EXTERNAL_BIT | FF_DISK_VOLUME_TYPE_READONLY_BIT;
options->calcType = FF_DISK_CALC_TYPE_FREE;
options->percent = (FFPercentageModuleConfig) { 50, 80, 0 };
}
void ffDestroyDiskOptions(FFDiskOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
ffStrbufDestroy(&options->folders);
ffStrbufDestroy(&options->hideFolders);
ffStrbufDestroy(&options->hideFS);
}
FFModuleBaseInfo ffDiskModuleInfo = {
.name = FF_DISK_MODULE_NAME,
.description = "Print partitions, space usage, file system, etc",
@@ -448,28 +472,3 @@ FFModuleBaseInfo ffDiskModuleInfo = {
{"Years fraction after creation", "years-fraction"},
}))
};
void ffInitDiskOptions(FFDiskOptions* options)
{
options->moduleInfo = ffDiskModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "");
ffStrbufInit(&options->folders);
#if _WIN32 || __APPLE__ || __ANDROID__
ffStrbufInit(&options->hideFolders);
#else
ffStrbufInitStatic(&options->hideFolders, "/efi:/boot:/boot/efi:/boot/firmware");
#endif
ffStrbufInit(&options->hideFS);
options->showTypes = FF_DISK_VOLUME_TYPE_REGULAR_BIT | FF_DISK_VOLUME_TYPE_EXTERNAL_BIT | FF_DISK_VOLUME_TYPE_READONLY_BIT;
options->calcType = FF_DISK_CALC_TYPE_FREE;
options->percent = (FFPercentageModuleConfig) { 50, 80, 0 };
}
void ffDestroyDiskOptions(FFDiskOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
ffStrbufDestroy(&options->folders);
ffStrbufDestroy(&options->hideFolders);
ffStrbufDestroy(&options->hideFS);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_DISK_MODULE_NAME "Disk"
+2 -3
View File
@@ -1,7 +1,5 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
#include "common/percent.h"
@@ -25,7 +23,6 @@ typedef enum __attribute__((__packed__)) FFDiskCalcType
typedef struct FFDiskOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
FFstrbuf folders;
@@ -35,3 +32,5 @@ typedef struct FFDiskOptions
FFDiskCalcType calcType;
FFPercentageModuleConfig percent;
} FFDiskOptions;
static_assert(sizeof(FFDiskOptions) <= FF_OPTION_MAX_SIZE, "FFDiskOptions size exceeds maximum allowed size");