ffGetPropValue

This commit is contained in:
Linus Dierheimer
2021-05-13 12:27:44 +02:00
parent f8868ae3c4
commit 4d7a06ac97
16 changed files with 182 additions and 188 deletions
+2 -2
View File
@@ -44,8 +44,8 @@ void ffPrintCPU(FFinstance* instance)
while(getline(&line, &len, cpuinfo) != -1)
{
sscanf(line, "model name%*s %[^\n]", name);
sscanf(line, "vendor_id%*s %[^\n]", vendor);
sscanf(line, "model name%*s %256[^\n]", name);
sscanf(line, "vendor_id%*s %256[^\n]", vendor);
sscanf(line, "cpu cores%*s %i", &physicalCores);
//Stop after the first CPU
+24 -25
View File
@@ -1,47 +1,46 @@
#include "fastfetch.h"
#include <string.h>
#define FF_LOCALE_MODULE_NAME "Locale"
#define FF_LOCALE_NUM_FORMAT_ARGS 1
static void getLocaleFromEnv(FFstrbuf* locale)
{
ffStrbufAppendS(locale, getenv("LANG"));
if(locale->length > 0)
return;
ffStrbufAppendS(locale, getenv("LC_ALL"));
if(locale->length > 0)
return;
ffStrbufAppendS(locale, getenv("LC_CTYPE"));
if(locale->length > 0)
return;
ffStrbufAppendS(locale, getenv("LC_MESSAGES"));
}
void ffPrintLocale(FFinstance* instance)
{
if(ffPrintFromCache(instance, FF_LOCALE_MODULE_NAME, &instance->config.localeKey, &instance->config.localeFormat, FF_LOCALE_NUM_FORMAT_ARGS))
return;
char localeCode[256];
FFstrbuf locale;
ffStrbufInit(&locale);
FILE *fp;
fp = fopen("/etc/locale.conf", "r");
ffParsePropFile("/etc/locale.conf", "LANG=", &locale);
if (fp == NULL) {
if (getenv("LANG") != NULL)
strcpy(localeCode, getenv("LANG"));
else if (getenv("LC_ALL") != NULL)
strcpy(localeCode, getenv("LC_ALL"));
else if (getenv("LC_CTYPE") != NULL)
strcpy(localeCode, getenv("LC_CTYPE"));
else if (getenv("LC_CTYPE") != NULL)
strcpy(localeCode, getenv("LC_CTYPE"));
else if (getenv("LC_MESSAGES") != NULL)
strcpy(localeCode, getenv("LC_MESSAGES"));
} else {
ffParsePropFile("/etc/locale.conf", "LANG=%[^\n]", localeCode);
fclose(fp);
}
if (locale.length == 0)
getLocaleFromEnv(&locale);
if(localeCode[0] == '\0')
if(locale.length == 0)
{
ffPrintError(instance, FF_LOCALE_MODULE_NAME, 0, &instance->config.localeKey, &instance->config.localeFormat, FF_LOCALE_NUM_FORMAT_ARGS, "No locale found");
return;
}
FF_STRBUF_CREATE(locale);
ffStrbufSetS(&locale, localeCode);
ffPrintAndSaveToCache(instance, FF_LOCALE_MODULE_NAME, &instance->config.localeKey, &locale, &instance->config.localeFormat, FF_LOCALE_NUM_FORMAT_ARGS, (FFformatarg[]){
{FF_FORMAT_ARG_TYPE_STRING, localeCode}
{FF_FORMAT_ARG_TYPE_STRBUF, &locale}
});
ffStrbufDestroy(&locale);
+23 -47
View File
@@ -30,19 +30,19 @@ const FFOSResult* ffDetectOS(FFinstance* instance)
return &result;
}
ffStrbufInitA(&result.systemName, 256);
ffStrbufInitA(&result.name, 256);
ffStrbufInitA(&result.prettyName, 256);
ffStrbufInitA(&result.id, 256);
ffStrbufInitA(&result.idLike, 256);
ffStrbufInitA(&result.variant, 256);
ffStrbufInitA(&result.variantID, 256);
ffStrbufInitA(&result.version, 256);
ffStrbufInitA(&result.versionID, 256);
ffStrbufInitA(&result.codename, 256);
ffStrbufInitA(&result.buildID, 256);
ffStrbufInitA(&result.architecture, 256);
ffStrbufInitA(&result.error, 256);
ffStrbufInit(&result.systemName);
ffStrbufInit(&result.name);
ffStrbufInit(&result.prettyName);
ffStrbufInit(&result.id);
ffStrbufInit(&result.idLike);
ffStrbufInit(&result.variant);
ffStrbufInit(&result.variantID);
ffStrbufInit(&result.version);
ffStrbufInit(&result.versionID);
ffStrbufInit(&result.codename);
ffStrbufInit(&result.buildID);
ffStrbufInit(&result.architecture);
ffStrbufInit(&result.error);
ffStrbufSetS(&result.systemName, instance->state.utsname.sysname);
ffStrbufSetS(&result.architecture, instance->state.utsname.machine);
@@ -54,42 +54,18 @@ const FFOSResult* ffDetectOS(FFinstance* instance)
// https://www.freedesktop.org/software/systemd/man/os-release.html
while (getline(&line, &len, osRelease) != -1)
{
sscanf(line, "NAME=%[^\n]", result.name.chars);
sscanf(line, "NAME=\"%[^\"]+", result.name.chars);
sscanf(line, "PRETTY_NAME=%[^\n]", result.prettyName.chars);
sscanf(line, "PRETTY_NAME=\"%[^\"]+", result.prettyName.chars);
sscanf(line, "ID=%[^\n]", result.id.chars);
sscanf(line, "ID=\"%[^\"]+", result.id.chars);
sscanf(line, "ID_LIKE=%[^\n]", result.idLike.chars);
sscanf(line, "ID_LIKE=\"%[^\"]+", result.idLike.chars);
sscanf(line, "VARIANT=%[^\n]", result.variant.chars);
sscanf(line, "VARIANT=\"%[^\"]+", result.variant.chars);
sscanf(line, "VARIANT_ID=%[^\n]", result.variantID.chars);
sscanf(line, "VARIANT_ID=\"%[^\"]+", result.variantID.chars);
sscanf(line, "VERSION=%[^\n]", result.version.chars);
sscanf(line, "VERSION=\"%[^\"]+", result.version.chars);
sscanf(line, "VERSION_ID=%[^\n]", result.versionID.chars);
sscanf(line, "VERSION_ID=\"%[^\"]+", result.versionID.chars);
sscanf(line, "VERSION_CODENAME=%[^\n]", result.codename.chars);
sscanf(line, "VERSION_CODENAME=\"%[^\"]+", result.codename.chars);
sscanf(line, "BUILD_ID=%[^\n]", result.buildID.chars);
sscanf(line, "BUILD_ID=\"%[^\"]+", result.buildID.chars);
ffGetPropValue(line, "NAME=", &result.name);
ffGetPropValue(line, "PRETTY_NAME=", &result.prettyName);
ffGetPropValue(line, "ID=", &result.id);
ffGetPropValue(line, "ID_LIKE=", &result.idLike);
ffGetPropValue(line, "VARIANT=", &result.variant);
ffGetPropValue(line, "VARIANT_ID=", &result.variantID);
ffGetPropValue(line, "VERSION=", &result.version);
ffGetPropValue(line, "VERSION_ID=", &result.versionID);
ffGetPropValue(line, "VERSION_CODENAME=", &result.codename);
ffGetPropValue(line, "BUILD_ID=", &result.buildID);
}
ffStrbufRecalculateLength(&result.systemName);
ffStrbufRecalculateLength(&result.name);
ffStrbufRecalculateLength(&result.prettyName);
ffStrbufRecalculateLength(&result.id);
ffStrbufRecalculateLength(&result.idLike);
ffStrbufRecalculateLength(&result.variant);
ffStrbufRecalculateLength(&result.variantID);
ffStrbufRecalculateLength(&result.version);
ffStrbufRecalculateLength(&result.versionID);
ffStrbufRecalculateLength(&result.codename);
ffStrbufRecalculateLength(&result.buildID);
ffStrbufRecalculateLength(&result.architecture);
ffStrbufRecalculateLength(&result.error);
if(line != NULL)
free(line);
+3
View File
@@ -87,6 +87,9 @@ void ffPrintPackages(FFinstance* instance)
FF_PRINT_PACKAGE(flatpak)
FF_PRINT_PACKAGE(snap)
//Fix linter warning of unused value of all
(void) all;
#undef FF_PRINT_PACKAGE
putchar('\n');
+2 -1
View File
@@ -33,9 +33,10 @@ static void getTerminalName(FFinstance* instance, const char* pid, FFTerminalRes
char name[256];
char ppid[256];
if(fscanf(stat, "%*s (%[^)])%*s%s", name, ppid) != 2)
if(fscanf(stat, "%*s (%255[^)])%*s%255s", name, ppid) != 2)
{
ffStrbufSetS(&result->error, "fscanf(stat, \"%*s (%[^)])%*s%s\", name, ppid) != 2");
fclose(stat);
return;
}
+48 -42
View File
@@ -1,5 +1,4 @@
#include "fastfetch.h"
#include <string.h>
#define FF_TERMFONT_MODULE_NAME "Terminal Font"
#define FF_TERMFONT_NUM_FORMAT_ARGS 4
@@ -31,41 +30,50 @@ static void printTerminalFont(FFinstance* instance, const char* font)
ffStrbufDestroy(&pretty);
}
static void printTerminalFontFromConfigFile(FFinstance* instance, const char* configFile, const char* regex)
static void printTerminalFontFromConfigFile(FFinstance* instance, const char* configFile, const char* start)
{
char font[128];
ffParsePropFileConfig(instance, configFile, regex, font);
if(font[0] == '\0')
{
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find terminal font in \"$XDG_CONFIG_HOME/%s\"", regex, configFile);
return;
}
FFstrbuf font;
ffStrbufInit(&font);
ffParsePropFileConfig(instance, configFile, start, &font);
printTerminalFont(instance, font);
if(font.length == 0)
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find terminal font in \"$XDG_CONFIG_HOME/%s\"", configFile);
else
printTerminalFont(instance, font.chars);
ffStrbufDestroy(&font);
}
static void printKonsole(FFinstance* instance)
{
char profile[128];
ffParsePropFileConfig(instance, "konsolerc", "DefaultProfile=%[^\n]", profile);
if(profile[0] == '\0')
FFstrbuf profile;
ffStrbufInit(&profile);
ffParsePropFileConfig(instance, "konsolerc", "DefaultProfile=", &profile);
if(profile.length == 0)
{
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find \"DefaultProfile=%[^\n]\" in \".config/konsolerc\"");
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find \"DefaultProfile=%[^\\n]\" in \".config/konsolerc\"");
ffStrbufDestroy(&profile);
return;
}
char profilePath[256];
sprintf(profilePath, ".local/share/konsole/%s", profile);
FFstrbuf profilePath;
ffStrbufInitA(&profilePath, 64);
ffStrbufAppendS(&profilePath, ".local/share/konsole/");
ffStrbufAppend(&profilePath, &profile);
char font[128];
ffParsePropFileHome(instance, profilePath, "Font=%[^\n]", font);
if(font[0] == '\0')
{
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find \"Font=%%[^\\n]\" in \"%s\"", profilePath);
return;
}
FFstrbuf font;
ffStrbufInit(&font);
ffParsePropFileHome(instance, profilePath.chars, "Font=", &font);
printTerminalFont(instance, font);
if(font.length == 0)
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find \"Font=%%[^\\n]\" in \"%s\"", profilePath.chars);
else
printTerminalFont(instance, font.chars);
ffStrbufDestroy(&font);
ffStrbufDestroy(&profilePath);
ffStrbufDestroy(&profile);
}
static void printTilixTerminal(FFinstance* instance)
@@ -97,42 +105,41 @@ static void printTilixTerminal(FFinstance* instance)
else if(!res.boolValueSet || res.boolValue) // system font
fontName = ffSettingsGetDConf(instance, "/org/gnome/desktop/interface/monospace-font-name", FF_VARIANT_TYPE_STRING).strValue;
if(!fontName)
{
if(fontName == NULL)
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find \"Terminal font\" in Tilix settings");
ffStrbufDestroy(&key);
return;
}
else
printTerminalFont(instance, fontName);
printTerminalFont(instance, fontName);
ffStrbufDestroy(&key);
}
static void printXCFETerminal(FFinstance* instance)
{
char useSysFont[6];
FFstrbuf useSysFont;
ffStrbufInit(&useSysFont);
if(!ffParsePropFileConfig(instance, "xfce4/terminal/terminalrc", "FontUseSystem=%[^\n]", useSysFont))
if(!ffParsePropFileConfig(instance, "xfce4/terminal/terminalrc", "FontUseSystem=", &useSysFont))
{
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't open \"$XDG_CONFIG_HOME/xfce4/terminal/terminalrc\"");
ffStrbufDestroy(&useSysFont);
return;
}
if((useSysFont[0] == '\0') || strcasecmp(useSysFont, "FALSE") == 0)
if(useSysFont.length == 0 || ffStrbufIgnCaseCompS(&useSysFont, "FALSE") == 0)
{
printTerminalFontFromConfigFile(instance, "xfce4/terminal/terminalrc", "FontName=%[^\n]");
printTerminalFontFromConfigFile(instance, "xfce4/terminal/terminalrc", "FontName=");
ffStrbufDestroy(&useSysFont);
return;
}
ffStrbufDestroy(&useSysFont);
const char* fontName = ffSettingsGetXFConf(instance, "xsettings", "/Gtk/MonospaceFontName", FF_VARIANT_TYPE_STRING).strValue;
if(fontName == NULL)
{
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find \"xsettings::/Gtk/MonospaceFontName\" in XFConf");
return;
}
printTerminalFont(instance, fontName);
else
printTerminalFont(instance, fontName);
}
static void printTTY(FFinstance* instance)
@@ -140,8 +147,7 @@ static void printTTY(FFinstance* instance)
FFstrbuf font;
ffStrbufInit(&font);
ffParsePropFile("/etc/vconsole.conf", "Font=%[^\n]", font.chars);
ffStrbufRecalculateLength(&font);
ffParsePropFile("/etc/vconsole.conf", "Font=", &font);
if(font.length == 0)
{
@@ -172,7 +178,7 @@ void ffPrintTerminalFont(FFinstance* instance)
else if(ffStrbufIgnCaseCompS(&result->exeName, "xfce4-terminal") == 0)
printXCFETerminal(instance);
else if(ffStrbufIgnCaseCompS(&result->exeName, "lxterminal") == 0)
printTerminalFontFromConfigFile(instance, "lxterminal/lxterminal.conf", "fontname=%[^\n]");
printTerminalFontFromConfigFile(instance, "lxterminal/lxterminal.conf", "fontname=");
else if(ffStrbufIgnCaseCompS(&result->exeName, "tilix") == 0)
printTilixTerminal(instance);
else if(ffStrbufStartsWithIgnCaseS(&result->exeName, "/dev/tty"))
+10 -5
View File
@@ -21,16 +21,20 @@ static void printWMTheme(FFinstance* instance, const char* theme)
static void printWMThemeFromConfigFile(FFinstance* instance, const char* configFile, const char* themeRegex, const char* defaultValue)
{
char theme[256];
FFstrbuf theme;
ffStrbufInit(&theme);
if(!ffParsePropFileConfig(instance, configFile, themeRegex, theme))
if(!ffParsePropFileConfig(instance, configFile, themeRegex, &theme))
{
ffPrintError(instance, FF_WMTHEME_MODULE_NAME, 0, &instance->config.wmThemeKey, &instance->config.wmThemeFormat, FF_WMTHEME_NUM_FORMAT_ARGS, "Config file %s doesn't exist", configFile);
ffStrbufDestroy(&theme);
return;
}
if(*theme == '\0')
if(theme.length == 0)
{
ffStrbufDestroy(&theme);
if(defaultValue == NULL)
{
ffPrintError(instance, FF_WMTHEME_MODULE_NAME, 0, &instance->config.wmThemeKey, &instance->config.wmThemeFormat, FF_WMTHEME_NUM_FORMAT_ARGS, "Couldn't find theme in %s", configFile);
@@ -41,7 +45,8 @@ static void printWMThemeFromConfigFile(FFinstance* instance, const char* configF
return;
}
printWMTheme(instance, theme);
printWMTheme(instance, theme.chars);
ffStrbufDestroy(&theme);
}
static void printMutter(FFinstance* instance)
@@ -178,7 +183,7 @@ void ffPrintWMTheme(FFinstance* instance)
}
if(ffStrbufIgnCaseCompS(&result->wmPrettyName, "KWin") == 0 || ffStrbufIgnCaseCompS(&result->wmPrettyName, "KDE") == 0 || ffStrbufIgnCaseCompS(&result->wmPrettyName, "Plasma") == 0)
printWMThemeFromConfigFile(instance, "kwinrc", " theme=%s", "Breeze");
printWMThemeFromConfigFile(instance, "kwinrc", "theme=", "Breeze");
else if(ffStrbufIgnCaseCompS(&result->wmPrettyName, "Xfwm4") == 0 || ffStrbufIgnCaseCompS(&result->wmPrettyName, "Xfwm") == 0)
printXFWM4(instance);
else if(ffStrbufIgnCaseCompS(&result->wmPrettyName, "Mutter") == 0 || ffStrbufIgnCaseCompS(&result->wmPrettyName, "Gnome") == 0 || ffStrbufIgnCaseCompS(&result->wmPrettyName, "Ubuntu") == 0)