2023-01-15 15:57:26 +01:00
|
|
|
#include "FFPlatform_private.h"
|
2023-02-01 15:56:25 +01:00
|
|
|
#include "util/stringUtils.h"
|
2023-06-29 10:31:20 +08:00
|
|
|
#include "common/io/io.h"
|
2023-01-15 15:57:26 +01:00
|
|
|
|
|
|
|
|
void ffPlatformInit(FFPlatform* platform)
|
|
|
|
|
{
|
|
|
|
|
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);
|
2023-01-15 15:57:26 +01:00
|
|
|
|
|
|
|
|
ffStrbufInit(&platform->userName);
|
|
|
|
|
ffStrbufInit(&platform->hostName);
|
|
|
|
|
ffStrbufInit(&platform->userShell);
|
|
|
|
|
|
|
|
|
|
ffStrbufInit(&platform->systemName);
|
|
|
|
|
ffStrbufInit(&platform->systemRelease);
|
|
|
|
|
ffStrbufInit(&platform->systemVersion);
|
|
|
|
|
ffStrbufInit(&platform->systemArchitecture);
|
|
|
|
|
|
2023-01-15 16:06:50 +01:00
|
|
|
ffPlatformInitImpl(platform);
|
2023-01-15 15:57:26 +01:00
|
|
|
|
|
|
|
|
if(platform->systemName.length == 0)
|
|
|
|
|
{
|
|
|
|
|
#if defined(__linux__)
|
|
|
|
|
ffStrbufAppendS(&platform->systemName, "Linux");
|
|
|
|
|
#elif defined(__FreeBSD__)
|
|
|
|
|
ffStrbufAppendS(&platform->systemName, "FreeBSD");
|
|
|
|
|
#elif defined(__APPLE__)
|
|
|
|
|
ffStrbufAppendS(&platform->systemName, "Darwin");
|
2023-01-15 17:00:36 +08:00
|
|
|
#elif defined(_WIN32)
|
2023-01-15 15:57:26 +01:00
|
|
|
ffStrbufAppendS(&platform->systemName, "Windows_NT");
|
2023-01-15 17:00:36 +08:00
|
|
|
#else
|
|
|
|
|
ffStrbufAppendS(&platform->systemName, "Unknown");
|
2023-01-15 15:57:26 +01:00
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(platform->systemArchitecture.length == 0)
|
2023-01-16 01:20:10 +08:00
|
|
|
ffStrbufAppendS(&platform->systemArchitecture, "Unknown");
|
2023-01-15 15:57:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ffPlatformDestroy(FFPlatform* platform)
|
|
|
|
|
{
|
|
|
|
|
ffStrbufDestroy(&platform->homeDir);
|
|
|
|
|
ffStrbufDestroy(&platform->cacheDir);
|
|
|
|
|
|
|
|
|
|
FF_LIST_FOR_EACH(FFstrbuf, dir, platform->configDirs)
|
|
|
|
|
ffStrbufDestroy(dir);
|
|
|
|
|
ffListDestroy(&platform->configDirs);
|
|
|
|
|
|
|
|
|
|
FF_LIST_FOR_EACH(FFstrbuf, dir, platform->dataDirs)
|
|
|
|
|
ffStrbufDestroy(dir);
|
|
|
|
|
ffListDestroy(&platform->dataDirs);
|
2024-04-08 09:10:03 +08:00
|
|
|
ffStrbufDestroy(&platform->exePath);
|
2023-01-15 15:57:26 +01:00
|
|
|
|
|
|
|
|
ffStrbufDestroy(&platform->userName);
|
|
|
|
|
ffStrbufDestroy(&platform->hostName);
|
|
|
|
|
ffStrbufDestroy(&platform->userShell);
|
2023-01-16 00:35:48 +08:00
|
|
|
|
|
|
|
|
ffStrbufDestroy(&platform->systemArchitecture);
|
|
|
|
|
ffStrbufDestroy(&platform->systemName);
|
|
|
|
|
ffStrbufDestroy(&platform->systemRelease);
|
|
|
|
|
ffStrbufDestroy(&platform->systemVersion);
|
2023-09-23 11:56:00 +08:00
|
|
|
ffStrbufDestroy(&platform->systemDisplayVersion);
|
2023-01-15 15:57:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ffPlatformPathAddAbsolute(FFlist* dirs, const char* path)
|
|
|
|
|
{
|
2023-06-29 10:31:20 +08:00
|
|
|
if (!ffPathExists(path, FF_PATHTYPE_DIRECTORY))
|
|
|
|
|
return;
|
2023-01-15 15:57:26 +01:00
|
|
|
|
2023-06-29 10:31:20 +08:00
|
|
|
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreateS(path);
|
|
|
|
|
ffStrbufEnsureEndsWithC(&buffer, '/');
|
|
|
|
|
if (!ffListContains(dirs, &buffer, (void*) ffStrbufEqual))
|
|
|
|
|
ffStrbufInitMove((FFstrbuf*) ffListAdd(dirs), &buffer);
|
2023-01-15 15:57:26 +01:00
|
|
|
}
|
|
|
|
|
|
2023-06-29 10:31:20 +08:00
|
|
|
void ffPlatformPathAddHome(FFlist* dirs, const FFPlatform* platform, const char* suffix)
|
2023-01-15 15:57:26 +01:00
|
|
|
{
|
2023-06-29 10:31:20 +08:00
|
|
|
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreateA(64);
|
|
|
|
|
ffStrbufAppend(&buffer, &platform->homeDir);
|
|
|
|
|
ffStrbufAppendS(&buffer, suffix);
|
|
|
|
|
ffStrbufEnsureEndsWithC(&buffer, '/');
|
|
|
|
|
if (ffPathExists(buffer.chars, FF_PATHTYPE_DIRECTORY) && !ffListContains(dirs, &buffer, (void*) ffStrbufEqual))
|
|
|
|
|
ffStrbufInitMove((FFstrbuf*) ffListAdd(dirs), &buffer);
|
2023-01-15 15:57:26 +01:00
|
|
|
}
|