ohmu
·
2026-10-15
1#include "os.h"
2#include "common/FFcache.h"
3
4void ffDetectOSImpl(FFOSResult* os);
5
6static FFOSResult result;
7
8static void initOSResult(void* storage) {
9 FFOSResult* os = storage;
10
11 ffStrbufInit(&os->name);
12 ffStrbufInit(&os->prettyName);
13 ffStrbufInit(&os->id);
14 ffStrbufInit(&os->version);
15 ffStrbufInit(&os->versionID);
16 ffStrbufInit(&os->codename);
17 ffStrbufInit(&os->buildID);
18 ffStrbufInit(&os->idLike);
19 ffStrbufInit(&os->variant);
20 ffStrbufInit(&os->variantID);
21 ffDetectOSImpl(os);
22}
23
24static void destroyOSResult(void* storage) {
25 FFOSResult* os = storage;
26
27 ffStrbufDestroy(&os->name);
28 ffStrbufDestroy(&os->prettyName);
29 ffStrbufDestroy(&os->id);
30 ffStrbufDestroy(&os->version);
31 ffStrbufDestroy(&os->versionID);
32 ffStrbufDestroy(&os->codename);
33 ffStrbufDestroy(&os->buildID);
34 ffStrbufDestroy(&os->idLike);
35 ffStrbufDestroy(&os->variant);
36 ffStrbufDestroy(&os->variantID);
37}
38
39static FFcacheEntry ffCacheEntryOS = {
40 .name = "os",
41 .storage = &result,
42 .init = initOSResult,
43 .destroy = destroyOSResult,
44};
45
46const FFOSResult* ffDetectOS(void) {
47 return ffCacheGet(&ffCacheEntryOS);
48}