Files
fastfetch/src/common/impl/FFPlatform.c
T

94 lines
2.8 KiB
C
Raw Normal View History

2023-01-15 15:57:26 +01:00
#include "FFPlatform_private.h"
2026-01-06 09:48:38 +08:00
#include "common/stringUtils.h"
#include "common/io.h"
2024-07-02 10:12:26 +08:00
#include "detection/version/version.h"
2023-01-15 15:57:26 +01:00
2026-03-29 09:28:49 +08:00
void ffPlatformInit(FFPlatform* platform) {
2023-01-15 15:57:26 +01:00
ffStrbufInit(&platform->homeDir);
ffStrbufInit(&platform->cacheDir);
ffListInit(&platform->configDirs, sizeof(FFstrbuf));
ffListInit(&platform->dataDirs, sizeof(FFstrbuf));
2023-08-24 13:47:20 +08:00
ffStrbufInit(&platform->exePath);
ffStrbufInit(&platform->cwd);
2023-01-15 15:57:26 +01:00
ffStrbufInit(&platform->userName);
2025-04-09 14:58:36 +08:00
ffStrbufInit(&platform->fullUserName);
2023-01-15 15:57:26 +01:00
ffStrbufInit(&platform->hostName);
ffStrbufInit(&platform->userShell);
2026-03-29 09:28:49 +08:00
#ifdef _WIN32
ffStrbufInit(&platform->sid);
2026-03-29 09:28:49 +08:00
#endif
2024-07-02 10:12:26 +08:00
FFPlatformSysinfo* info = &platform->sysinfo;
ffStrbufInit(&info->name);
ffStrbufInit(&info->release);
ffStrbufInit(&info->version);
ffStrbufInit(&info->architecture);
2023-01-15 15:57:26 +01:00
2023-01-15 16:06:50 +01:00
ffPlatformInitImpl(platform);
2023-01-15 15:57:26 +01:00
2026-03-29 09:28:49 +08:00
if (info->name.length == 0) {
2024-07-02 10:12:26 +08:00
ffStrbufSetStatic(&info->name, ffVersionResult.sysName);
2026-03-29 09:28:49 +08:00
}
2023-01-15 15:57:26 +01:00
2026-03-29 09:28:49 +08:00
if (info->architecture.length == 0) {
2024-07-02 10:12:26 +08:00
ffStrbufSetStatic(&info->architecture, ffVersionResult.architecture);
2026-03-29 09:28:49 +08:00
}
2023-01-15 15:57:26 +01:00
}
2026-03-29 09:28:49 +08:00
void ffPlatformDestroy(FFPlatform* platform) {
2023-01-15 15:57:26 +01:00
ffStrbufDestroy(&platform->homeDir);
ffStrbufDestroy(&platform->cacheDir);
2026-03-29 09:28:49 +08:00
FF_LIST_FOR_EACH (FFstrbuf, dir, platform->configDirs) {
2023-01-15 15:57:26 +01:00
ffStrbufDestroy(dir);
2026-03-29 09:28:49 +08:00
}
2023-01-15 15:57:26 +01:00
ffListDestroy(&platform->configDirs);
2026-03-29 09:28:49 +08:00
FF_LIST_FOR_EACH (FFstrbuf, dir, platform->dataDirs) {
2023-01-15 15:57:26 +01:00
ffStrbufDestroy(dir);
2026-03-29 09:28:49 +08:00
}
2023-01-15 15:57:26 +01:00
ffListDestroy(&platform->dataDirs);
2024-04-08 09:10:03 +08:00
ffStrbufDestroy(&platform->exePath);
ffStrbufDestroy(&platform->cwd);
2023-01-15 15:57:26 +01:00
ffStrbufDestroy(&platform->userName);
ffStrbufDestroy(&platform->hostName);
ffStrbufDestroy(&platform->userShell);
2025-04-28 22:49:31 +08:00
ffStrbufDestroy(&platform->fullUserName);
2023-01-16 00:35:48 +08:00
2026-03-29 09:28:49 +08:00
#ifdef _WIN32
ffStrbufDestroy(&platform->sid);
2026-03-29 09:28:49 +08:00
#endif
2024-07-02 10:12:26 +08:00
FFPlatformSysinfo* info = &platform->sysinfo;
ffStrbufDestroy(&info->architecture);
ffStrbufDestroy(&info->name);
ffStrbufDestroy(&info->release);
ffStrbufDestroy(&info->version);
2023-01-15 15:57:26 +01:00
}
2026-03-29 09:28:49 +08:00
void ffPlatformPathAddAbsolute(FFlist* dirs, const char* path) {
if (!ffPathExists(path, FF_PATHTYPE_DIRECTORY)) {
return;
2026-03-29 09:28:49 +08:00
}
2023-01-15 15:57:26 +01:00
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreateS(path);
ffStrbufEnsureEndsWithC(&buffer, '/');
2026-03-29 09:28:49 +08:00
if (!ffListContains(dirs, &buffer, (void*) ffStrbufEqual)) {
ffStrbufInitMove((FFstrbuf*) ffListAdd(dirs), &buffer);
2026-03-29 09:28:49 +08:00
}
2023-01-15 15:57:26 +01:00
}
2026-03-29 09:28:49 +08:00
void ffPlatformPathAddHome(FFlist* dirs, const FFPlatform* platform, const char* suffix) {
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreateA(64);
ffStrbufAppend(&buffer, &platform->homeDir);
ffStrbufAppendS(&buffer, suffix);
ffStrbufEnsureEndsWithC(&buffer, '/');
2026-03-29 09:28:49 +08:00
if (ffPathExists(buffer.chars, FF_PATHTYPE_DIRECTORY) && !ffListContains(dirs, &buffer, (void*) ffStrbufEqual)) {
ffStrbufInitMove((FFstrbuf*) ffListAdd(dirs), &buffer);
2026-03-29 09:28:49 +08:00
}
2023-01-15 15:57:26 +01:00
}