mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:42:09 +02:00
Host (Linux): reports marketing product name on Asahi Linux
This commit is contained in:
@@ -71,6 +71,7 @@ const FFSmbiosHeader* ffSmbiosNextEntry(const FFSmbiosHeader* header)
|
||||
#define loff_t off_t
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
bool ffGetSmbiosValue(const char* devicesPath, const char* classPath, FFstrbuf* buffer)
|
||||
{
|
||||
if (ffReadFileBuffer(devicesPath, buffer))
|
||||
@@ -90,6 +91,7 @@ bool ffGetSmbiosValue(const char* devicesPath, const char* classPath, FFstrbuf*
|
||||
ffStrbufClear(buffer);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
typedef struct FFSmbios20EntryPoint
|
||||
{
|
||||
|
||||
@@ -2,14 +2,20 @@
|
||||
#include "common/io.h"
|
||||
#include "common/smbiosHelper.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
const char* ffDetectBios(FFBiosResult* bios)
|
||||
{
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/bios_date", "/sys/class/dmi/id/bios_date", &bios->date);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/bios_release", "/sys/class/dmi/id/bios_release", &bios->release);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/bios_vendor", "/sys/class/dmi/id/bios_vendor", &bios->vendor);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/bios_version", "/sys/class/dmi/id/bios_version", &bios->version);
|
||||
if (ffGetSmbiosValue("/sys/devices/virtual/dmi/id/bios_date", "/sys/class/dmi/id/bios_date", &bios->date))
|
||||
{
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/bios_release", "/sys/class/dmi/id/bios_release", &bios->release);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/bios_vendor", "/sys/class/dmi/id/bios_vendor", &bios->vendor);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/bios_version", "/sys/class/dmi/id/bios_version", &bios->version);
|
||||
}
|
||||
else if (ffReadFileBuffer("/proc/device-tree/chosen/u-boot,version", &bios->version))
|
||||
{
|
||||
ffStrbufTrimRight(&bios->version, '\0');
|
||||
ffStrbufSetStatic(&bios->vendor, "U-Boot");
|
||||
}
|
||||
|
||||
if (ffPathExists("/sys/firmware/efi/", FF_PATHTYPE_DIRECTORY) || ffPathExists("/sys/firmware/acpi/tables/UEFI", FF_PATHTYPE_FILE))
|
||||
ffStrbufSetStatic(&bios->type, "UEFI");
|
||||
else
|
||||
|
||||
@@ -5,18 +5,13 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
static void getHostProductName(FFstrbuf* name)
|
||||
static bool getHostProductName(FFstrbuf* name)
|
||||
{
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/model", name))
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/model", name) ||
|
||||
ffReadFileBuffer("/sys/firmware/devicetree/base/banner-name", name))
|
||||
{
|
||||
ffStrbufTrimRight(name, '\0');
|
||||
return;
|
||||
}
|
||||
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/banner-name", name))
|
||||
{
|
||||
ffStrbufTrimRight(name, '\0');
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ffReadFileBuffer("/tmp/sysinfo/model", name))
|
||||
@@ -24,38 +19,61 @@ static void getHostProductName(FFstrbuf* name)
|
||||
ffStrbufTrimRightSpace(name);
|
||||
ffStrbufTrimRight(name, '\0');
|
||||
if(ffIsSmbiosValueSet(name))
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
ffStrbufClear(name);
|
||||
return false;
|
||||
}
|
||||
|
||||
static void getHostSerialNumber(FFstrbuf* serial)
|
||||
static bool getHostSerialNumber(FFstrbuf* serial)
|
||||
{
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/smbios/smbios/system/serial", serial))
|
||||
ffStrbufTrimRight(serial, '\0');
|
||||
else if (ffReadFileBuffer("/sys/firmware/devicetree/base/serial-number", serial))
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/smbios/smbios/system/serial", serial) ||
|
||||
ffReadFileBuffer("/sys/firmware/devicetree/base/serial-number", serial))
|
||||
{
|
||||
ffStrbufTrimRight(serial, '\0');
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool getHostProductFamily(FFstrbuf* family)
|
||||
{
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/smbios/smbios/system/family", family) ||
|
||||
ffReadFileBuffer("/sys/firmware/devicetree/base/smbios/smbios/system/product", family))
|
||||
{
|
||||
ffStrbufTrimRight(family, '\0');
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool getHostVendor(FFstrbuf* vendor)
|
||||
{
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/smbios/smbios/system/manufacturer", vendor))
|
||||
{
|
||||
ffStrbufTrimRight(vendor, '\0');
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* ffDetectHost(FFHostResult* host)
|
||||
{
|
||||
if (!ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_family", "/sys/class/dmi/id/product_family", &host->family))
|
||||
// This is a hack for Asahi Linux, whose product_family is empty
|
||||
if (ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_family", "/sys/class/dmi/id/product_family", &host->family))
|
||||
{
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/smbios/smbios/system/product", &host->family))
|
||||
ffStrbufTrimRight(&host->family, '\0');
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_name", "/sys/class/dmi/id/product_name", &host->name);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_version", "/sys/class/dmi/id/product_version", &host->version);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_sku", "/sys/class/dmi/id/product_sku", &host->sku);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_serial", "/sys/class/dmi/id/product_serial", &host->serial);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/sys_vendor", "/sys/class/dmi/id/sys_vendor", &host->vendor);
|
||||
}
|
||||
if (!ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_name", "/sys/class/dmi/id/product_name", &host->name))
|
||||
getHostProductName(&host->name);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_version", "/sys/class/dmi/id/product_version", &host->version);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_sku", "/sys/class/dmi/id/product_sku", &host->sku);
|
||||
if (!ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_serial", "/sys/class/dmi/id/product_serial", &host->serial))
|
||||
getHostSerialNumber(&host->serial);
|
||||
ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_uuid", "/sys/class/dmi/id/product_uuid", &host->uuid);
|
||||
if (!ffGetSmbiosValue("/sys/devices/virtual/dmi/id/sys_vendor", "/sys/class/dmi/id/sys_vendor", &host->vendor))
|
||||
else
|
||||
{
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/smbios/smbios/system/manufacturer", &host->vendor))
|
||||
ffStrbufTrimRight(&host->vendor, '\0');
|
||||
getHostProductFamily(&host->family);
|
||||
getHostProductName(&host->name);
|
||||
getHostSerialNumber(&host->serial);
|
||||
getHostVendor(&host->vendor);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
|
||||
@@ -23,7 +23,7 @@ bool ffPrintHost(FFHostOptions* options)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if(host.family.length == 0 && host.name.length == 0)
|
||||
if(host.name.length == 0 && host.family.length == 0)
|
||||
{
|
||||
ffPrintError(FF_HOST_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "neither product_family nor product_name is set by O.E.M.");
|
||||
goto exit;
|
||||
|
||||
Reference in New Issue
Block a user