Files
fastfetch/src/modules/os.c
T

129 lines
4.4 KiB
C
Raw Normal View History

2021-02-18 22:25:36 +01:00
#include "fastfetch.h"
2021-02-27 18:30:05 +01:00
void ffPrintOS(FFinstance* instance)
2021-02-18 22:25:36 +01:00
{
2021-02-27 18:30:05 +01:00
if(ffPrintCachedValue(instance, "OS"))
2021-02-22 16:52:51 +01:00
return;
2021-03-27 17:48:32 +01:00
// Documentation of the fields:
// https://www.freedesktop.org/software/systemd/man/os-release.html
char name[128]; name[0] = '\0';
char prettyName[128]; prettyName[0] = '\0';
char id[128]; id[0] = '\0';
char idLike[128]; idLike[0] = '\0';
char variant[128]; variant[0] = '\0';
char variantId[128]; variantId[0] = '\0';
char version[128]; version[0] = '\0';
char versionId[128]; versionId[0] = '\0';
char versionCodename[128]; versionCodename[0] = '\0';
char buildId[128]; buildId[0] = '\0';
FILE* osRelease = fopen("/etc/os-release", "r");
if(osRelease == NULL)
osRelease = fopen("/usr/lib/os-release", "r");
char* line = NULL;
size_t len;
while (getline(&line, &len, osRelease) != -1)
{
sscanf(line, "NAME=\"%[^\"]+", name);
sscanf(line, "NAME=%[^\n]", name);
sscanf(line, "PRETTY_NAME=\"%[^\"]+", prettyName);
sscanf(line, "PRETTY_NAME=%[^\n]", prettyName);
sscanf(line, "ID=\"%[^\"]+", id);
sscanf(line, "ID=%[^\n]", id);
sscanf(line, "ID_LIKE=\"%[^\"]+", idLike);
sscanf(line, "ID_LIKE=%[^\n]", idLike);
sscanf(line, "VARIANT=\"%[^\"]+", variant);
sscanf(line, "VARIANT=%[^\n]", variant);
sscanf(line, "VARIANT_ID=\"%[^\"]+", variantId);
sscanf(line, "VARIANT_ID=%[^\n]", variantId);
sscanf(line, "VERSION=\"%[^\"]+", version);
sscanf(line, "VERSION=%[^\n]", version);
sscanf(line, "VERSION_ID=\"%[^\"]+", versionId);
sscanf(line, "VERSION_ID=%[^\n]", versionId);
sscanf(line, "VERSION_CODENAME=\"%[^\"]+", versionCodename);
sscanf(line, "VERSION_CODENAME=%[^\n]", versionCodename);
sscanf(line, "BUILD_ID=\"%[^\"]+", buildId);
sscanf(line, "BUILD_ID=%[^\n]", buildId);
}
fclose(osRelease);
if(line != NULL)
free(line);
FF_STRBUF_CREATE(os);
2021-03-19 20:57:07 +01:00
2021-03-23 19:48:52 +01:00
if(instance->config.osFormat.length == 0)
{
2021-03-27 17:48:32 +01:00
if(prettyName[0] != '\0')
{
ffStrbufAppendS(&os, prettyName);
}
else if(name[0] == '\0' && id[0] == '\0')
2021-03-23 19:48:52 +01:00
{
2021-03-27 17:48:32 +01:00
ffStrbufAppendS(&os, instance->state.utsname.sysname);
}
else
{
if(name[0] != '\0')
ffStrbufAppendS(&os, name);
else
ffStrbufAppendS(&os, id);
if(version[0] != '\0')
{
ffStrbufAppendC(&os, ' ');
ffStrbufAppendS(&os, version);
}
else
{
if(versionId[0] != '\0')
{
ffStrbufAppendC(&os, ' ');
ffStrbufAppendS(&os, versionId);
}
if(variant[0] != '\0')
{
ffStrbufAppendS(&os, " (");
ffStrbufAppendS(&os, variant);
ffStrbufAppendC(&os, ')');
}
else if(variantId[0] != '\0')
{
ffStrbufAppendS(&os, " (");
ffStrbufAppendS(&os, variantId);
ffStrbufAppendC(&os, ')');
}
}
2021-03-23 19:48:52 +01:00
}
2021-03-27 17:48:32 +01:00
ffStrbufAppendC(&os, ' ');
ffStrbufAppendS(&os, instance->state.utsname.machine);
2021-03-23 19:48:52 +01:00
}
else
2021-03-19 20:57:07 +01:00
{
2021-03-27 17:48:32 +01:00
ffParseFormatString(&os, &instance->config.osFormat, 12,
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, instance->state.utsname.sysname},
2021-03-19 20:57:07 +01:00
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, name},
2021-03-27 17:48:32 +01:00
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, prettyName},
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, id},
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, idLike},
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, variant},
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, variantId},
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, version},
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, versionId},
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, versionCodename},
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, buildId},
2021-03-19 20:57:07 +01:00
(FFformatarg){FF_FORMAT_ARG_TYPE_STRING, instance->state.utsname.machine}
);
}
2021-02-22 16:52:51 +01:00
ffPrintAndSaveCachedValue(instance, "OS", &os);
2021-03-19 20:57:07 +01:00
ffStrbufDestroy(&os);
2021-02-18 22:25:36 +01:00
}