mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-11-01 02:22:52 +01:00
InitSystem: detect version
This commit is contained in:
@@ -4,9 +4,10 @@
|
||||
|
||||
typedef struct FFInitSystemResult
|
||||
{
|
||||
uint32_t pid;
|
||||
FFstrbuf name;
|
||||
FFstrbuf exe;
|
||||
FFstrbuf version;
|
||||
uint32_t pid;
|
||||
} FFInitSystemResult;
|
||||
|
||||
const char* ffDetectInitSystem(FFInitSystemResult* result);
|
||||
|
||||
@@ -10,5 +10,51 @@ const char* ffDetectInitSystem(FFInitSystemResult* result)
|
||||
|
||||
ffProcessGetInfoLinux((int) result->pid, &result->name, &result->exe, &exeName, NULL);
|
||||
|
||||
if (ffStrbufEqualS(&result->name, "systemd"))
|
||||
{
|
||||
if (ffProcessAppendStdOut(&result->version, (char* const[]) {
|
||||
"systemctl",
|
||||
"--version",
|
||||
NULL,
|
||||
}) == NULL && result->version.length)
|
||||
{
|
||||
uint32_t iStart = ffStrbufFirstIndexC(&result->version, '(');
|
||||
if (iStart < result->version.length)
|
||||
{
|
||||
uint32_t iEnd = ffStrbufNextIndexC(&result->version, iStart + 1, ')');
|
||||
ffStrbufSubstrBefore(&result->version, iEnd);
|
||||
ffStrbufSubstrAfter(&result->version, iStart);
|
||||
}
|
||||
else
|
||||
{
|
||||
iStart = ffStrbufFirstIndexC(&result->version, ' ');
|
||||
if (iStart < result->version.length)
|
||||
{
|
||||
uint32_t iEnd = ffStrbufNextIndexC(&result->version, iStart + 1, ' ');
|
||||
ffStrbufSubstrBefore(&result->version, iEnd);
|
||||
ffStrbufSubstrAfter(&result->version, iStart);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (ffStrbufEqualS(&result->name, "launchd"))
|
||||
{
|
||||
if (ffProcessAppendStdOut(&result->version, (char* const[]) {
|
||||
"launchctl",
|
||||
"version",
|
||||
NULL,
|
||||
}) == NULL && result->version.length)
|
||||
{
|
||||
uint32_t iStart = ffStrbufFirstIndexS(&result->version, "Version ");
|
||||
if (iStart < result->version.length)
|
||||
{
|
||||
iStart += strlen("Version");
|
||||
uint32_t iEnd = ffStrbufNextIndexC(&result->version, iStart + 1, ':');
|
||||
ffStrbufSubstrBefore(&result->version, iEnd);
|
||||
ffStrbufSubstrAfter(&result->version, iStart);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user