InitSystem: detect version

This commit is contained in:
李通洲
2024-05-29 14:22:57 +08:00
parent 90690ba315
commit bb11cff700
3 changed files with 62 additions and 6 deletions
+2 -1
View File
@@ -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;
}