mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-11-09 06:30:10 +01:00
Chore: run clang-format
```bash find . -type f \( -name "*.c" -o -name "*.h" -o -name "*.cpp" -o -name "*.hpp" \) ! -path "src/3rdparty/*" -print0 | xargs -0 clang-format -i ```
This commit is contained in:
@@ -3,8 +3,7 @@
|
||||
#include "fastfetch.h"
|
||||
#include "modules/host/option.h"
|
||||
|
||||
typedef struct FFHostResult
|
||||
{
|
||||
typedef struct FFHostResult {
|
||||
FFstrbuf family;
|
||||
FFstrbuf name;
|
||||
FFstrbuf version;
|
||||
|
||||
@@ -3,26 +3,14 @@
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
const char* ffDetectHost(FFHostResult* host)
|
||||
{
|
||||
const char* ffDetectHost(FFHostResult* host) {
|
||||
// http://newandroidbook.com/ddb/
|
||||
ffSettingsGetAndroidProperty("ro.product.device", &host->family);
|
||||
|
||||
ffSettingsGetAndroidProperty("ro.product.marketname", &host->name)
|
||||
|| ffSettingsGetAndroidProperty("ro.vendor.product.display", &host->name)
|
||||
|| ffSettingsGetAndroidProperty("ro.vivo.market.name", &host->name)
|
||||
|| ffSettingsGetAndroidProperty("ro.product.oppo_model", &host->name)
|
||||
|| ffSettingsGetAndroidProperty("ro.oppo.market.name", &host->name)
|
||||
|| ffSettingsGetAndroidProperty("ro.vendor.oplus.market.enname", &host->name)
|
||||
|| ffSettingsGetAndroidProperty("ro.config.devicename", &host->name)
|
||||
|| ffSettingsGetAndroidProperty("ro.config.marketing_name", &host->name)
|
||||
|| ffSettingsGetAndroidProperty("ro.product.vendor.model", &host->name)
|
||||
|| ffSettingsGetAndroidProperty("ro.product.brand", &host->name);
|
||||
ffSettingsGetAndroidProperty("ro.product.marketname", &host->name) || ffSettingsGetAndroidProperty("ro.vendor.product.display", &host->name) || ffSettingsGetAndroidProperty("ro.vivo.market.name", &host->name) || ffSettingsGetAndroidProperty("ro.product.oppo_model", &host->name) || ffSettingsGetAndroidProperty("ro.oppo.market.name", &host->name) || ffSettingsGetAndroidProperty("ro.vendor.oplus.market.enname", &host->name) || ffSettingsGetAndroidProperty("ro.config.devicename", &host->name) || ffSettingsGetAndroidProperty("ro.config.marketing_name", &host->name) || ffSettingsGetAndroidProperty("ro.product.vendor.model", &host->name) || ffSettingsGetAndroidProperty("ro.product.brand", &host->name);
|
||||
|
||||
if (ffSettingsGetAndroidProperty("ro.product.model", &host->version))
|
||||
{
|
||||
if (ffStrbufStartsWithIgnCase(&host->version, &host->name))
|
||||
{
|
||||
if (ffSettingsGetAndroidProperty("ro.product.model", &host->version)) {
|
||||
if (ffStrbufStartsWithIgnCase(&host->version, &host->name)) {
|
||||
ffStrbufSubstrAfter(&host->version, host->name.length);
|
||||
ffStrbufTrimLeft(&host->version, ' ');
|
||||
}
|
||||
@@ -30,8 +18,7 @@ const char* ffDetectHost(FFHostResult* host)
|
||||
|
||||
ffSettingsGetAndroidProperty("ro.product.manufacturer", &host->vendor);
|
||||
|
||||
if(host->vendor.length && !ffStrbufStartsWithIgnCase(&host->name, &host->vendor))
|
||||
{
|
||||
if (host->vendor.length && !ffStrbufStartsWithIgnCase(&host->name, &host->vendor)) {
|
||||
ffStrbufPrependS(&host->name, " ");
|
||||
ffStrbufPrepend(&host->name, &host->vendor);
|
||||
}
|
||||
|
||||
@@ -4,55 +4,65 @@
|
||||
|
||||
#include <IOKit/IOKitLib.h>
|
||||
|
||||
const char* getProductNameWithIokit(FFstrbuf* result)
|
||||
{
|
||||
const char* getProductNameWithIokit(FFstrbuf* result) {
|
||||
FF_IOOBJECT_AUTO_RELEASE io_registry_entry_t registryEntry = IORegistryEntryFromPath(MACH_PORT_NULL, "IODeviceTree:/product");
|
||||
if (!registryEntry)
|
||||
if (!registryEntry) {
|
||||
return "IOServiceGetMatchingService() failed";
|
||||
}
|
||||
|
||||
FF_CFTYPE_AUTO_RELEASE CFStringRef productName = IORegistryEntryCreateCFProperty(registryEntry, CFSTR("product-name"), kCFAllocatorDefault, kNilOptions);
|
||||
if (!productName)
|
||||
if (!productName) {
|
||||
return "IORegistryEntryCreateCFProperty() failed";
|
||||
}
|
||||
|
||||
return ffCfStrGetString(productName, result);
|
||||
}
|
||||
|
||||
const char* getOthersByIokit(FFHostResult* host)
|
||||
{
|
||||
const char* getOthersByIokit(FFHostResult* host) {
|
||||
FF_IOOBJECT_AUTO_RELEASE io_registry_entry_t registryEntry = IOServiceGetMatchingService(MACH_PORT_NULL, IOServiceMatching("IOPlatformExpertDevice"));
|
||||
if (!registryEntry)
|
||||
if (!registryEntry) {
|
||||
return "IOServiceGetMatchingService() failed";
|
||||
}
|
||||
|
||||
FF_CFTYPE_AUTO_RELEASE CFStringRef serialNumber = IORegistryEntryCreateCFProperty(registryEntry, CFSTR(kIOPlatformSerialNumberKey), kCFAllocatorDefault, kNilOptions);
|
||||
if (serialNumber)
|
||||
if (serialNumber) {
|
||||
ffCfStrGetString(serialNumber, &host->serial);
|
||||
}
|
||||
|
||||
FF_CFTYPE_AUTO_RELEASE CFStringRef uuid = IORegistryEntryCreateCFProperty(registryEntry, CFSTR(kIOPlatformUUIDKey), kCFAllocatorDefault, kNilOptions);
|
||||
if (uuid)
|
||||
if (uuid) {
|
||||
ffCfStrGetString(uuid, &host->uuid);
|
||||
}
|
||||
|
||||
FF_CFTYPE_AUTO_RELEASE CFStringRef manufacturer = IORegistryEntryCreateCFProperty(registryEntry, CFSTR("manufacturer"), kCFAllocatorDefault, kNilOptions);
|
||||
if (manufacturer)
|
||||
if (manufacturer) {
|
||||
ffCfStrGetString(manufacturer, &host->vendor);
|
||||
}
|
||||
|
||||
FF_CFTYPE_AUTO_RELEASE CFStringRef version = IORegistryEntryCreateCFProperty(registryEntry, CFSTR("version"), kCFAllocatorDefault, kNilOptions);
|
||||
if (version)
|
||||
if (version) {
|
||||
ffCfStrGetString(version, &host->version);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char* ffDetectHost(FFHostResult* host)
|
||||
{
|
||||
const char* ffDetectHost(FFHostResult* host) {
|
||||
const char* error = ffSysctlGetString("hw.product", &host->family);
|
||||
if (error) error = ffSysctlGetString("hw.model", &host->family);
|
||||
if (error) return error;
|
||||
if (error) {
|
||||
error = ffSysctlGetString("hw.model", &host->family);
|
||||
}
|
||||
if (error) {
|
||||
return error;
|
||||
}
|
||||
|
||||
ffStrbufSetStatic(&host->name, ffHostGetMacProductNameWithHwModel(&host->family));
|
||||
if (host->name.length == 0)
|
||||
if (host->name.length == 0) {
|
||||
getProductNameWithIokit(&host->name);
|
||||
if (host->name.length == 0)
|
||||
}
|
||||
if (host->name.length == 0) {
|
||||
ffStrbufSet(&host->name, &host->family);
|
||||
}
|
||||
getOthersByIokit(host);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
#include "common/settings.h"
|
||||
#include "common/smbiosHelper.h"
|
||||
|
||||
const char* ffDetectHost(FFHostResult* host)
|
||||
{
|
||||
const char* ffDetectHost(FFHostResult* host) {
|
||||
ffSettingsGetFreeBSDKenv("smbios.system.product", &host->name);
|
||||
ffCleanUpSmbiosValue(&host->name);
|
||||
ffSettingsGetFreeBSDKenv("smbios.system.family", &host->family);
|
||||
@@ -19,9 +18,9 @@ const char* ffDetectHost(FFHostResult* host)
|
||||
ffSettingsGetFreeBSDKenv("smbios.system.maker", &host->vendor);
|
||||
ffCleanUpSmbiosValue(&host->vendor);
|
||||
|
||||
#ifdef __x86_64__
|
||||
#ifdef __x86_64__
|
||||
ffHostDetectMac(host);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -5,114 +5,98 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
static bool getHostProductName(FFstrbuf* name)
|
||||
{
|
||||
static bool getHostProductName(FFstrbuf* name) {
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/model", name) ||
|
||||
ffReadFileBuffer("/sys/firmware/devicetree/base/banner-name", name))
|
||||
{
|
||||
ffReadFileBuffer("/sys/firmware/devicetree/base/banner-name", name)) {
|
||||
ffStrbufTrimRight(name, '\0');
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ffReadFileBuffer("/tmp/sysinfo/model", name))
|
||||
{
|
||||
if (ffReadFileBuffer("/tmp/sysinfo/model", name)) {
|
||||
ffStrbufTrimRightSpace(name);
|
||||
ffStrbufTrimRight(name, '\0');
|
||||
if(ffIsSmbiosValueSet(name))
|
||||
if (ffIsSmbiosValueSet(name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool getHostSerialNumber(FFstrbuf* serial)
|
||||
{
|
||||
static bool getHostSerialNumber(FFstrbuf* serial) {
|
||||
if (ffReadFileBuffer("/sys/firmware/devicetree/base/smbios/smbios/system/serial", serial) ||
|
||||
ffReadFileBuffer("/sys/firmware/devicetree/base/serial-number", serial))
|
||||
{
|
||||
ffReadFileBuffer("/sys/firmware/devicetree/base/serial-number", serial)) {
|
||||
ffStrbufTrimRight(serial, '\0');
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool getHostProductFamily(FFstrbuf* family)
|
||||
{
|
||||
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))
|
||||
{
|
||||
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))
|
||||
{
|
||||
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)
|
||||
{
|
||||
const char* ffDetectHost(FFHostResult* host) {
|
||||
// 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 (ffGetSmbiosValue("/sys/devices/virtual/dmi/id/product_family", "/sys/class/dmi/id/product_family", &host->family)) {
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
getHostProductFamily(&host->family);
|
||||
getHostProductName(&host->name);
|
||||
getHostSerialNumber(&host->serial);
|
||||
getHostVendor(&host->vendor);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
#ifdef __x86_64__
|
||||
ffHostDetectMac(host);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//KVM/Qemu virtual machine
|
||||
if(ffStrbufStartsWithS(&host->name, "Standard PC"))
|
||||
// KVM/Qemu virtual machine
|
||||
if (ffStrbufStartsWithS(&host->name, "Standard PC")) {
|
||||
ffStrbufPrependS(&host->name, "KVM/QEMU ");
|
||||
}
|
||||
|
||||
if(host->family.length == 0 && host->name.length == 0)
|
||||
{
|
||||
if (host->family.length == 0 && host->name.length == 0) {
|
||||
const char* wslDistroName = getenv("WSL_DISTRO_NAME");
|
||||
//On WSL, the real host can't be detected. Instead use WSL as host.
|
||||
if(wslDistroName != NULL || getenv("WSL_DISTRO") != NULL || getenv("WSL_INTEROP") != NULL)
|
||||
{
|
||||
// On WSL, the real host can't be detected. Instead use WSL as host.
|
||||
if (wslDistroName != NULL || getenv("WSL_DISTRO") != NULL || getenv("WSL_INTEROP") != NULL) {
|
||||
ffStrbufSetStatic(&host->name, "Windows Subsystem for Linux");
|
||||
if (wslDistroName)
|
||||
if (wslDistroName) {
|
||||
ffStrbufAppendF(&host->name, " - %s", wslDistroName);
|
||||
}
|
||||
ffStrbufSetStatic(&host->family, "WSL");
|
||||
ffStrbufSetStatic(&host->vendor, "Microsoft Corporation");
|
||||
|
||||
if (instance.config.general.detectVersion)
|
||||
{
|
||||
ffProcessAppendStdOut(&host->version, (char* const[]){
|
||||
"wslinfo",
|
||||
"--wsl-version",
|
||||
"-n",
|
||||
NULL,
|
||||
}); // supported in 2.2.3 and later
|
||||
if (instance.config.general.detectVersion) {
|
||||
ffProcessAppendStdOut(&host->version, (char* const[]) {
|
||||
"wslinfo",
|
||||
"--wsl-version",
|
||||
"-n",
|
||||
NULL,
|
||||
}); // supported in 2.2.3 and later
|
||||
}
|
||||
}
|
||||
else if (ffStrbufStartsWithS(&instance.state.platform.sysinfo.version, "FreeBSD "))
|
||||
{
|
||||
} else if (ffStrbufStartsWithS(&instance.state.platform.sysinfo.version, "FreeBSD ")) {
|
||||
ffStrbufSetStatic(&host->name, "Linux Binary Compatibility on FreeBSD");
|
||||
ffStrbufSetStatic(&host->family, "FreeBSD");
|
||||
ffStrbufSetStatic(&host->vendor, "FreeBSD Foundation");
|
||||
if (instance.config.general.detectVersion)
|
||||
{
|
||||
if (instance.config.general.detectVersion) {
|
||||
ffStrbufSetS(&host->version, instance.state.platform.sysinfo.version.chars + strlen("FreeBSD "));
|
||||
ffStrbufSubstrBeforeFirstC(&host->version, ' ');
|
||||
}
|
||||
|
||||
+412
-173
@@ -1,8 +1,7 @@
|
||||
#include "host.h"
|
||||
#include "common/stringUtils.h"
|
||||
|
||||
const char* ffHostGetMacProductNameWithHwModel(const FFstrbuf* hwModel)
|
||||
{
|
||||
const char* ffHostGetMacProductNameWithHwModel(const FFstrbuf* hwModel) {
|
||||
// Macbook Pro: https://support.apple.com/en-us/HT201300
|
||||
// Macbook Air: https://support.apple.com/en-us/HT201862
|
||||
// Mac mini: https://support.apple.com/en-us/HT201894
|
||||
@@ -10,190 +9,430 @@ const char* ffHostGetMacProductNameWithHwModel(const FFstrbuf* hwModel)
|
||||
// Mac Pro: https://support.apple.com/en-us/HT202888
|
||||
// Mac Studio: https://support.apple.com/en-us/HT213073
|
||||
|
||||
if(ffStrbufStartsWithS(hwModel, "MacBookPro"))
|
||||
{
|
||||
if (ffStrbufStartsWithS(hwModel, "MacBookPro")) {
|
||||
const char* version = hwModel->chars + strlen("MacBookPro");
|
||||
if(ffStrEquals(version, "18,3") ||
|
||||
ffStrEquals(version, "18,4")) return "MacBook Pro (14-inch, 2021)";
|
||||
if(ffStrEquals(version, "18,1") ||
|
||||
ffStrEquals(version, "18,2")) return "MacBook Pro (16-inch, 2021)";
|
||||
if(ffStrEquals(version, "17,1")) return "MacBook Pro (13-inch, M1, 2020)";
|
||||
if(ffStrEquals(version, "16,3")) return "MacBook Pro (13-inch, 2020, Two Thunderbolt 3 ports)";
|
||||
if(ffStrEquals(version, "16,2")) return "MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)";
|
||||
if(ffStrEquals(version, "16,4") ||
|
||||
ffStrEquals(version, "16,1")) return "MacBook Pro (16-inch, 2019)";
|
||||
if(ffStrEquals(version, "15,4")) return "MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports)";
|
||||
if(ffStrEquals(version, "15,3")) return "MacBook Pro (15-inch, 2019)";
|
||||
if(ffStrEquals(version, "15,2")) return "MacBook Pro (13-inch, 2018/2019, Four Thunderbolt 3 ports)";
|
||||
if(ffStrEquals(version, "15,1")) return "MacBook Pro (15-inch, 2018/2019)";
|
||||
if(ffStrEquals(version, "14,3")) return "MacBook Pro (15-inch, 2017)";
|
||||
if(ffStrEquals(version, "14,2")) return "MacBook Pro (13-inch, 2017, Four Thunderbolt 3 ports)";
|
||||
if(ffStrEquals(version, "14,1")) return "MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)";
|
||||
if(ffStrEquals(version, "13,3")) return "MacBook Pro (15-inch, 2016)";
|
||||
if(ffStrEquals(version, "13,2")) return "MacBook Pro (13-inch, 2016, Four Thunderbolt 3 ports)";
|
||||
if(ffStrEquals(version, "13,1")) return "MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports)";
|
||||
if(ffStrEquals(version, "12,1")) return "MacBook Pro (Retina, 13-inch, Early 2015)";
|
||||
if(ffStrEquals(version, "11,4") ||
|
||||
ffStrEquals(version, "11,5")) return "MacBook Pro (Retina, 15-inch, Mid 2015)";
|
||||
if(ffStrEquals(version, "11,2") ||
|
||||
ffStrEquals(version, "11,3")) return "MacBook Pro (Retina, 15-inch, Late 2013/Mid 2014)";
|
||||
if(ffStrEquals(version, "11,1")) return "MacBook Pro (Retina, 13-inch, Late 2013/Mid 2014)";
|
||||
if(ffStrEquals(version, "10,2")) return "MacBook Pro (Retina, 13-inch, Late 2012/Early 2013)";
|
||||
if(ffStrEquals(version, "10,1")) return "MacBook Pro (Retina, 15-inch, Mid 2012/Early 2013)";
|
||||
if(ffStrEquals(version, "9,2")) return "MacBook Pro (13-inch, Mid 2012)";
|
||||
if(ffStrEquals(version, "9,1")) return "MacBook Pro (15-inch, Mid 2012)";
|
||||
if(ffStrEquals(version, "8,3")) return "MacBook Pro (17-inch, 2011)";
|
||||
if(ffStrEquals(version, "8,2")) return "MacBook Pro (15-inch, 2011)";
|
||||
if(ffStrEquals(version, "8,1")) return "MacBook Pro (13-inch, 2011)";
|
||||
if(ffStrEquals(version, "7,1")) return "MacBook Pro (13-inch, Mid 2010)";
|
||||
if(ffStrEquals(version, "6,2")) return "MacBook Pro (15-inch, Mid 2010)";
|
||||
if(ffStrEquals(version, "6,1")) return "MacBook Pro (17-inch, Mid 2010)";
|
||||
if(ffStrEquals(version, "5,5")) return "MacBook Pro (13-inch, Mid 2009)";
|
||||
if(ffStrEquals(version, "5,3")) return "MacBook Pro (15-inch, Mid 2009)";
|
||||
if(ffStrEquals(version, "5,2")) return "MacBook Pro (17-inch, Mid/Early 2009)";
|
||||
if(ffStrEquals(version, "5,1")) return "MacBook Pro (15-inch, Late 2008)";
|
||||
if(ffStrEquals(version, "4,1")) return "MacBook Pro (17/15-inch, Early 2008)";
|
||||
}
|
||||
else if(ffStrbufStartsWithS(hwModel, "MacBookAir"))
|
||||
{
|
||||
if (ffStrEquals(version, "18,3") ||
|
||||
ffStrEquals(version, "18,4")) {
|
||||
return "MacBook Pro (14-inch, 2021)";
|
||||
}
|
||||
if (ffStrEquals(version, "18,1") ||
|
||||
ffStrEquals(version, "18,2")) {
|
||||
return "MacBook Pro (16-inch, 2021)";
|
||||
}
|
||||
if (ffStrEquals(version, "17,1")) {
|
||||
return "MacBook Pro (13-inch, M1, 2020)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,3")) {
|
||||
return "MacBook Pro (13-inch, 2020, Two Thunderbolt 3 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,2")) {
|
||||
return "MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,4") ||
|
||||
ffStrEquals(version, "16,1")) {
|
||||
return "MacBook Pro (16-inch, 2019)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,4")) {
|
||||
return "MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,3")) {
|
||||
return "MacBook Pro (15-inch, 2019)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,2")) {
|
||||
return "MacBook Pro (13-inch, 2018/2019, Four Thunderbolt 3 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,1")) {
|
||||
return "MacBook Pro (15-inch, 2018/2019)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,3")) {
|
||||
return "MacBook Pro (15-inch, 2017)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,2")) {
|
||||
return "MacBook Pro (13-inch, 2017, Four Thunderbolt 3 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,1")) {
|
||||
return "MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "13,3")) {
|
||||
return "MacBook Pro (15-inch, 2016)";
|
||||
}
|
||||
if (ffStrEquals(version, "13,2")) {
|
||||
return "MacBook Pro (13-inch, 2016, Four Thunderbolt 3 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "13,1")) {
|
||||
return "MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "12,1")) {
|
||||
return "MacBook Pro (Retina, 13-inch, Early 2015)";
|
||||
}
|
||||
if (ffStrEquals(version, "11,4") ||
|
||||
ffStrEquals(version, "11,5")) {
|
||||
return "MacBook Pro (Retina, 15-inch, Mid 2015)";
|
||||
}
|
||||
if (ffStrEquals(version, "11,2") ||
|
||||
ffStrEquals(version, "11,3")) {
|
||||
return "MacBook Pro (Retina, 15-inch, Late 2013/Mid 2014)";
|
||||
}
|
||||
if (ffStrEquals(version, "11,1")) {
|
||||
return "MacBook Pro (Retina, 13-inch, Late 2013/Mid 2014)";
|
||||
}
|
||||
if (ffStrEquals(version, "10,2")) {
|
||||
return "MacBook Pro (Retina, 13-inch, Late 2012/Early 2013)";
|
||||
}
|
||||
if (ffStrEquals(version, "10,1")) {
|
||||
return "MacBook Pro (Retina, 15-inch, Mid 2012/Early 2013)";
|
||||
}
|
||||
if (ffStrEquals(version, "9,2")) {
|
||||
return "MacBook Pro (13-inch, Mid 2012)";
|
||||
}
|
||||
if (ffStrEquals(version, "9,1")) {
|
||||
return "MacBook Pro (15-inch, Mid 2012)";
|
||||
}
|
||||
if (ffStrEquals(version, "8,3")) {
|
||||
return "MacBook Pro (17-inch, 2011)";
|
||||
}
|
||||
if (ffStrEquals(version, "8,2")) {
|
||||
return "MacBook Pro (15-inch, 2011)";
|
||||
}
|
||||
if (ffStrEquals(version, "8,1")) {
|
||||
return "MacBook Pro (13-inch, 2011)";
|
||||
}
|
||||
if (ffStrEquals(version, "7,1")) {
|
||||
return "MacBook Pro (13-inch, Mid 2010)";
|
||||
}
|
||||
if (ffStrEquals(version, "6,2")) {
|
||||
return "MacBook Pro (15-inch, Mid 2010)";
|
||||
}
|
||||
if (ffStrEquals(version, "6,1")) {
|
||||
return "MacBook Pro (17-inch, Mid 2010)";
|
||||
}
|
||||
if (ffStrEquals(version, "5,5")) {
|
||||
return "MacBook Pro (13-inch, Mid 2009)";
|
||||
}
|
||||
if (ffStrEquals(version, "5,3")) {
|
||||
return "MacBook Pro (15-inch, Mid 2009)";
|
||||
}
|
||||
if (ffStrEquals(version, "5,2")) {
|
||||
return "MacBook Pro (17-inch, Mid/Early 2009)";
|
||||
}
|
||||
if (ffStrEquals(version, "5,1")) {
|
||||
return "MacBook Pro (15-inch, Late 2008)";
|
||||
}
|
||||
if (ffStrEquals(version, "4,1")) {
|
||||
return "MacBook Pro (17/15-inch, Early 2008)";
|
||||
}
|
||||
} else if (ffStrbufStartsWithS(hwModel, "MacBookAir")) {
|
||||
const char* version = hwModel->chars + strlen("MacBookAir");
|
||||
if(ffStrEquals(version, "10,1")) return "MacBook Air (M1, 2020)";
|
||||
if(ffStrEquals(version, "9,1")) return "MacBook Air (Retina, 13-inch, 2020)";
|
||||
if(ffStrEquals(version, "8,2")) return "MacBook Air (Retina, 13-inch, 2019)";
|
||||
if(ffStrEquals(version, "8,1")) return "MacBook Air (Retina, 13-inch, 2018)";
|
||||
if(ffStrEquals(version, "7,2")) return "MacBook Air (13-inch, Early 2015/2017)";
|
||||
if(ffStrEquals(version, "7,1")) return "MacBook Air (11-inch, Early 2015)";
|
||||
if(ffStrEquals(version, "6,2")) return "MacBook Air (13-inch, Mid 2013/Early 2014)";
|
||||
if(ffStrEquals(version, "6,1")) return "MacBook Air (11-inch, Mid 2013/Early 2014)";
|
||||
if(ffStrEquals(version, "5,2")) return "MacBook Air (13-inch, Mid 2012)";
|
||||
if(ffStrEquals(version, "5,1")) return "MacBook Air (11-inch, Mid 2012)";
|
||||
if(ffStrEquals(version, "4,2")) return "MacBook Air (13-inch, Mid 2011)";
|
||||
if(ffStrEquals(version, "4,1")) return "MacBook Air (11-inch, Mid 2011)";
|
||||
if(ffStrEquals(version, "3,2")) return "MacBook Air (13-inch, Late 2010)";
|
||||
if(ffStrEquals(version, "3,1")) return "MacBook Air (11-inch, Late 2010)";
|
||||
if(ffStrEquals(version, "2,1")) return "MacBook Air (Mid 2009)";
|
||||
}
|
||||
else if(ffStrbufStartsWithS(hwModel, "Macmini"))
|
||||
{
|
||||
if (ffStrEquals(version, "10,1")) {
|
||||
return "MacBook Air (M1, 2020)";
|
||||
}
|
||||
if (ffStrEquals(version, "9,1")) {
|
||||
return "MacBook Air (Retina, 13-inch, 2020)";
|
||||
}
|
||||
if (ffStrEquals(version, "8,2")) {
|
||||
return "MacBook Air (Retina, 13-inch, 2019)";
|
||||
}
|
||||
if (ffStrEquals(version, "8,1")) {
|
||||
return "MacBook Air (Retina, 13-inch, 2018)";
|
||||
}
|
||||
if (ffStrEquals(version, "7,2")) {
|
||||
return "MacBook Air (13-inch, Early 2015/2017)";
|
||||
}
|
||||
if (ffStrEquals(version, "7,1")) {
|
||||
return "MacBook Air (11-inch, Early 2015)";
|
||||
}
|
||||
if (ffStrEquals(version, "6,2")) {
|
||||
return "MacBook Air (13-inch, Mid 2013/Early 2014)";
|
||||
}
|
||||
if (ffStrEquals(version, "6,1")) {
|
||||
return "MacBook Air (11-inch, Mid 2013/Early 2014)";
|
||||
}
|
||||
if (ffStrEquals(version, "5,2")) {
|
||||
return "MacBook Air (13-inch, Mid 2012)";
|
||||
}
|
||||
if (ffStrEquals(version, "5,1")) {
|
||||
return "MacBook Air (11-inch, Mid 2012)";
|
||||
}
|
||||
if (ffStrEquals(version, "4,2")) {
|
||||
return "MacBook Air (13-inch, Mid 2011)";
|
||||
}
|
||||
if (ffStrEquals(version, "4,1")) {
|
||||
return "MacBook Air (11-inch, Mid 2011)";
|
||||
}
|
||||
if (ffStrEquals(version, "3,2")) {
|
||||
return "MacBook Air (13-inch, Late 2010)";
|
||||
}
|
||||
if (ffStrEquals(version, "3,1")) {
|
||||
return "MacBook Air (11-inch, Late 2010)";
|
||||
}
|
||||
if (ffStrEquals(version, "2,1")) {
|
||||
return "MacBook Air (Mid 2009)";
|
||||
}
|
||||
} else if (ffStrbufStartsWithS(hwModel, "Macmini")) {
|
||||
const char* version = hwModel->chars + strlen("Macmini");
|
||||
if(ffStrEquals(version, "9,1")) return "Mac mini (M1, 2020)";
|
||||
if(ffStrEquals(version, "8,1")) return "Mac mini (2018)";
|
||||
if(ffStrEquals(version, "7,1")) return "Mac mini (Mid 2014)";
|
||||
if(ffStrEquals(version, "6,1") ||
|
||||
ffStrEquals(version, "6,2")) return "Mac mini (Late 2012)";
|
||||
if(ffStrEquals(version, "5,1") ||
|
||||
ffStrEquals(version, "5,2")) return "Mac mini (Mid 2011)";
|
||||
if(ffStrEquals(version, "4,1")) return "Mac mini (Mid 2010)";
|
||||
if(ffStrEquals(version, "3,1")) return "Mac mini (Early/Late 2009)";
|
||||
}
|
||||
else if(ffStrbufStartsWithS(hwModel, "MacBook"))
|
||||
{
|
||||
if (ffStrEquals(version, "9,1")) {
|
||||
return "Mac mini (M1, 2020)";
|
||||
}
|
||||
if (ffStrEquals(version, "8,1")) {
|
||||
return "Mac mini (2018)";
|
||||
}
|
||||
if (ffStrEquals(version, "7,1")) {
|
||||
return "Mac mini (Mid 2014)";
|
||||
}
|
||||
if (ffStrEquals(version, "6,1") ||
|
||||
ffStrEquals(version, "6,2")) {
|
||||
return "Mac mini (Late 2012)";
|
||||
}
|
||||
if (ffStrEquals(version, "5,1") ||
|
||||
ffStrEquals(version, "5,2")) {
|
||||
return "Mac mini (Mid 2011)";
|
||||
}
|
||||
if (ffStrEquals(version, "4,1")) {
|
||||
return "Mac mini (Mid 2010)";
|
||||
}
|
||||
if (ffStrEquals(version, "3,1")) {
|
||||
return "Mac mini (Early/Late 2009)";
|
||||
}
|
||||
} else if (ffStrbufStartsWithS(hwModel, "MacBook")) {
|
||||
const char* version = hwModel->chars + strlen("MacBook");
|
||||
if(ffStrEquals(version, "10,1")) return "MacBook (Retina, 12-inch, 2017)";
|
||||
if(ffStrEquals(version, "9,1")) return "MacBook (Retina, 12-inch, Early 2016)";
|
||||
if(ffStrEquals(version, "8,1")) return "MacBook (Retina, 12-inch, Early 2015)";
|
||||
if(ffStrEquals(version, "7,1")) return "MacBook (13-inch, Mid 2010)";
|
||||
if(ffStrEquals(version, "6,1")) return "MacBook (13-inch, Late 2009)";
|
||||
if(ffStrEquals(version, "5,2")) return "MacBook (13-inch, Early/Mid 2009)";
|
||||
}
|
||||
else if(ffStrbufStartsWithS(hwModel, "MacPro"))
|
||||
{
|
||||
if (ffStrEquals(version, "10,1")) {
|
||||
return "MacBook (Retina, 12-inch, 2017)";
|
||||
}
|
||||
if (ffStrEquals(version, "9,1")) {
|
||||
return "MacBook (Retina, 12-inch, Early 2016)";
|
||||
}
|
||||
if (ffStrEquals(version, "8,1")) {
|
||||
return "MacBook (Retina, 12-inch, Early 2015)";
|
||||
}
|
||||
if (ffStrEquals(version, "7,1")) {
|
||||
return "MacBook (13-inch, Mid 2010)";
|
||||
}
|
||||
if (ffStrEquals(version, "6,1")) {
|
||||
return "MacBook (13-inch, Late 2009)";
|
||||
}
|
||||
if (ffStrEquals(version, "5,2")) {
|
||||
return "MacBook (13-inch, Early/Mid 2009)";
|
||||
}
|
||||
} else if (ffStrbufStartsWithS(hwModel, "MacPro")) {
|
||||
const char* version = hwModel->chars + strlen("MacPro");
|
||||
if(ffStrEquals(version, "7,1")) return "Mac Pro (2019)";
|
||||
if(ffStrEquals(version, "6,1")) return "Mac Pro (Late 2013)";
|
||||
if(ffStrEquals(version, "5,1")) return "Mac Pro (Mid 2010 - Mid 2012)";
|
||||
if(ffStrEquals(version, "4,1")) return "Mac Pro (Early 2009)";
|
||||
}
|
||||
else if(ffStrbufStartsWithS(hwModel, "Mac"))
|
||||
{
|
||||
if (ffStrEquals(version, "7,1")) {
|
||||
return "Mac Pro (2019)";
|
||||
}
|
||||
if (ffStrEquals(version, "6,1")) {
|
||||
return "Mac Pro (Late 2013)";
|
||||
}
|
||||
if (ffStrEquals(version, "5,1")) {
|
||||
return "Mac Pro (Mid 2010 - Mid 2012)";
|
||||
}
|
||||
if (ffStrEquals(version, "4,1")) {
|
||||
return "Mac Pro (Early 2009)";
|
||||
}
|
||||
} else if (ffStrbufStartsWithS(hwModel, "Mac")) {
|
||||
const char* version = hwModel->chars + strlen("Mac");
|
||||
if(ffStrEquals(version, "17,9")) return "MacBook Pro (14-inch, M5 Pro, 2026)";
|
||||
if(ffStrEquals(version, "17,8")) return "MacBook Pro (16-inch, M5 Pro, 2026)";
|
||||
if(ffStrEquals(version, "17,7")) return "MacBook Pro (14-inch, M5 Max, 2026)";
|
||||
if(ffStrEquals(version, "17,6")) return "MacBook Pro (16-inch, M5 Max, 2026)";
|
||||
if(ffStrEquals(version, "17,5")) return "MacBook Neo (13-inch, A18 Pro, 2026)";
|
||||
if(ffStrEquals(version, "17,4")) return "MacBook Air (15-inch, M5, 2026)";
|
||||
if(ffStrEquals(version, "17,3")) return "MacBook Air (13-inch, M5, 2026)";
|
||||
if(ffStrEquals(version, "17,2")) return "MacBook Pro (14-inch, M5, 2025)";
|
||||
if(ffStrEquals(version, "16,13")) return "MacBook Air (15-inch, M4, 2025)";
|
||||
if(ffStrEquals(version, "16,12")) return "MacBook Air (13-inch, M4, 2025)";
|
||||
if(ffStrEquals(version, "16,11") ||
|
||||
ffStrEquals(version, "16,10")) return "Mac Mini (2024)";
|
||||
if(ffStrEquals(version, "16,9")) return "Mac Studio (M4 Max, 2025)";
|
||||
if(ffStrEquals(version, "16,3")) return "iMac (24-inch, 2024, Four Thunderbolt / USB 4 ports)";
|
||||
if(ffStrEquals(version, "16,2")) return "iMac (24-inch, 2024, Two Thunderbolt / USB 4 ports)";
|
||||
if(ffStrEquals(version, "16,1")) return "MacBook Pro (14-inch, 2024, Three Thunderbolt 4 ports)";
|
||||
if(ffStrEquals(version, "16,6") ||
|
||||
ffStrEquals(version, "16,8")) return "MacBook Pro (14-inch, 2024, Three Thunderbolt 5 ports)";
|
||||
if(ffStrEquals(version, "16,7") ||
|
||||
ffStrEquals(version, "16,5")) return "MacBook Pro (16-inch, 2024, Three Thunderbolt 5 ports)";
|
||||
if(ffStrEquals(version, "15,14")) return "Mac Studio (M3 Ultra, 2025)";
|
||||
if(ffStrEquals(version, "15,13")) return "MacBook Air (15-inch, M3, 2024)";
|
||||
if(ffStrEquals(version, "15,12")) return "MacBook Air (13-inch, M3, 2024)";
|
||||
if(ffStrEquals(version, "15,3")) return "MacBook Pro (14-inch, Nov 2023, Two Thunderbolt / USB 4 ports)";
|
||||
if(ffStrEquals(version, "15,4")) return "iMac (24-inch, 2023, Two Thunderbolt / USB 4 ports)";
|
||||
if(ffStrEquals(version, "15,5")) return "iMac (24-inch, 2023, Two Thunderbolt / USB 4 ports, Two USB 3 ports)";
|
||||
if(ffStrEquals(version, "15,6") ||
|
||||
ffStrEquals(version, "15,8") ||
|
||||
ffStrEquals(version, "15,10")) return "MacBook Pro (14-inch, Nov 2023, Three Thunderbolt 4 ports)";
|
||||
if(ffStrEquals(version, "15,7") ||
|
||||
ffStrEquals(version, "15,9") ||
|
||||
ffStrEquals(version, "15,11")) return "MacBook Pro (16-inch, Nov 2023, Three Thunderbolt 4 ports)";
|
||||
if(ffStrEquals(version, "14,15")) return "MacBook Air (15-inch, M2, 2023)";
|
||||
if(ffStrEquals(version, "14,14")) return "Mac Studio (M2 Ultra, 2023, Two Thunderbolt 4 front ports)";
|
||||
if(ffStrEquals(version, "14,13")) return "Mac Studio (M2 Max, 2023, Two USB-C front ports)";
|
||||
if(ffStrEquals(version, "14,8")) return "Mac Pro (2023)";
|
||||
if(ffStrEquals(version, "14,6") ||
|
||||
ffStrEquals(version, "14,10")) return "MacBook Pro (16-inch, 2023)";
|
||||
if(ffStrEquals(version, "14,5") ||
|
||||
ffStrEquals(version, "14,9")) return "MacBook Pro (14-inch, 2023)";
|
||||
if(ffStrEquals(version, "14,3")) return "Mac mini (M2, 2023, Two Thunderbolt 4 ports)";
|
||||
if(ffStrEquals(version, "14,12")) return "Mac mini (M2 Pro, 2023, Four Thunderbolt 4 ports)";
|
||||
if(ffStrEquals(version, "14,7")) return "MacBook Pro (13-inch, M2, 2022)";
|
||||
if(ffStrEquals(version, "14,2")) return "MacBook Air (M2, 2022)";
|
||||
if(ffStrEquals(version, "13,1")) return "Mac Studio (M1 Max, 2022, Two USB-C front ports)";
|
||||
if(ffStrEquals(version, "13,2")) return "Mac Studio (M1 Ultra, 2022, Two Thunderbolt 4 front ports)";
|
||||
}
|
||||
else if(ffStrbufStartsWithS(hwModel, "iMac"))
|
||||
{
|
||||
if (ffStrEquals(version, "17,9")) {
|
||||
return "MacBook Pro (14-inch, M5 Pro, 2026)";
|
||||
}
|
||||
if (ffStrEquals(version, "17,8")) {
|
||||
return "MacBook Pro (16-inch, M5 Pro, 2026)";
|
||||
}
|
||||
if (ffStrEquals(version, "17,7")) {
|
||||
return "MacBook Pro (14-inch, M5 Max, 2026)";
|
||||
}
|
||||
if (ffStrEquals(version, "17,6")) {
|
||||
return "MacBook Pro (16-inch, M5 Max, 2026)";
|
||||
}
|
||||
if (ffStrEquals(version, "17,5")) {
|
||||
return "MacBook Neo (13-inch, A18 Pro, 2026)";
|
||||
}
|
||||
if (ffStrEquals(version, "17,4")) {
|
||||
return "MacBook Air (15-inch, M5, 2026)";
|
||||
}
|
||||
if (ffStrEquals(version, "17,3")) {
|
||||
return "MacBook Air (13-inch, M5, 2026)";
|
||||
}
|
||||
if (ffStrEquals(version, "17,2")) {
|
||||
return "MacBook Pro (14-inch, M5, 2025)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,13")) {
|
||||
return "MacBook Air (15-inch, M4, 2025)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,12")) {
|
||||
return "MacBook Air (13-inch, M4, 2025)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,11") ||
|
||||
ffStrEquals(version, "16,10")) {
|
||||
return "Mac Mini (2024)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,9")) {
|
||||
return "Mac Studio (M4 Max, 2025)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,3")) {
|
||||
return "iMac (24-inch, 2024, Four Thunderbolt / USB 4 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,2")) {
|
||||
return "iMac (24-inch, 2024, Two Thunderbolt / USB 4 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,1")) {
|
||||
return "MacBook Pro (14-inch, 2024, Three Thunderbolt 4 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,6") ||
|
||||
ffStrEquals(version, "16,8")) {
|
||||
return "MacBook Pro (14-inch, 2024, Three Thunderbolt 5 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,7") ||
|
||||
ffStrEquals(version, "16,5")) {
|
||||
return "MacBook Pro (16-inch, 2024, Three Thunderbolt 5 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,14")) {
|
||||
return "Mac Studio (M3 Ultra, 2025)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,13")) {
|
||||
return "MacBook Air (15-inch, M3, 2024)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,12")) {
|
||||
return "MacBook Air (13-inch, M3, 2024)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,3")) {
|
||||
return "MacBook Pro (14-inch, Nov 2023, Two Thunderbolt / USB 4 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,4")) {
|
||||
return "iMac (24-inch, 2023, Two Thunderbolt / USB 4 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,5")) {
|
||||
return "iMac (24-inch, 2023, Two Thunderbolt / USB 4 ports, Two USB 3 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,6") ||
|
||||
ffStrEquals(version, "15,8") ||
|
||||
ffStrEquals(version, "15,10")) {
|
||||
return "MacBook Pro (14-inch, Nov 2023, Three Thunderbolt 4 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,7") ||
|
||||
ffStrEquals(version, "15,9") ||
|
||||
ffStrEquals(version, "15,11")) {
|
||||
return "MacBook Pro (16-inch, Nov 2023, Three Thunderbolt 4 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,15")) {
|
||||
return "MacBook Air (15-inch, M2, 2023)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,14")) {
|
||||
return "Mac Studio (M2 Ultra, 2023, Two Thunderbolt 4 front ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,13")) {
|
||||
return "Mac Studio (M2 Max, 2023, Two USB-C front ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,8")) {
|
||||
return "Mac Pro (2023)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,6") ||
|
||||
ffStrEquals(version, "14,10")) {
|
||||
return "MacBook Pro (16-inch, 2023)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,5") ||
|
||||
ffStrEquals(version, "14,9")) {
|
||||
return "MacBook Pro (14-inch, 2023)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,3")) {
|
||||
return "Mac mini (M2, 2023, Two Thunderbolt 4 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,12")) {
|
||||
return "Mac mini (M2 Pro, 2023, Four Thunderbolt 4 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,7")) {
|
||||
return "MacBook Pro (13-inch, M2, 2022)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,2")) {
|
||||
return "MacBook Air (M2, 2022)";
|
||||
}
|
||||
if (ffStrEquals(version, "13,1")) {
|
||||
return "Mac Studio (M1 Max, 2022, Two USB-C front ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "13,2")) {
|
||||
return "Mac Studio (M1 Ultra, 2022, Two Thunderbolt 4 front ports)";
|
||||
}
|
||||
} else if (ffStrbufStartsWithS(hwModel, "iMac")) {
|
||||
const char* version = hwModel->chars + strlen("iMac");
|
||||
if(ffStrEquals(version, "21,1")) return "iMac (24-inch, M1, 2021, Two Thunderbolt / USB 4 ports, Two USB 3 ports)";
|
||||
if(ffStrEquals(version, "21,2")) return "iMac (24-inch, M1, 2021, Two Thunderbolt / USB 4 ports)";
|
||||
if(ffStrEquals(version, "20,1") ||
|
||||
ffStrEquals(version, "20,2")) return "iMac (Retina 5K, 27-inch, 2020)";
|
||||
if(ffStrEquals(version, "19,1")) return "iMac (Retina 5K, 27-inch, 2019)";
|
||||
if(ffStrEquals(version, "19,2")) return "iMac (Retina 4K, 21.5-inch, 2019)";
|
||||
if(ffStrEquals(version, "Pro1,1")) return "iMac Pro (2017)";
|
||||
if(ffStrEquals(version, "18,3")) return "iMac (Retina 5K, 27-inch, 2017)";
|
||||
if(ffStrEquals(version, "18,2")) return "iMac (Retina 4K, 21.5-inch, 2017)";
|
||||
if(ffStrEquals(version, "18,1")) return "iMac (21.5-inch, 2017)";
|
||||
if(ffStrEquals(version, "17,1")) return "iMac (Retina 5K, 27-inch, Late 2015)";
|
||||
if(ffStrEquals(version, "16,2")) return "iMac (Retina 4K, 21.5-inch, Late 2015)";
|
||||
if(ffStrEquals(version, "16,1")) return "iMac (21.5-inch, Late 2015)";
|
||||
if(ffStrEquals(version, "15,1")) return "iMac (Retina 5K, 27-inch, Late 2014 - Mid 2015)";
|
||||
if(ffStrEquals(version, "14,4")) return "iMac (21.5-inch, Mid 2014)";
|
||||
if(ffStrEquals(version, "14,2")) return "iMac (27-inch, Late 2013)";
|
||||
if(ffStrEquals(version, "14,1")) return "iMac (21.5-inch, Late 2013)";
|
||||
if(ffStrEquals(version, "13,2")) return "iMac (27-inch, Late 2012)";
|
||||
if(ffStrEquals(version, "13,1")) return "iMac (21.5-inch, Late 2012)";
|
||||
if(ffStrEquals(version, "12,2")) return "iMac (27-inch, Mid 2011)";
|
||||
if(ffStrEquals(version, "12,1")) return "iMac (21.5-inch, Mid 2011)";
|
||||
if(ffStrEquals(version, "11,3")) return "iMac (27-inch, Mid 2010)";
|
||||
if(ffStrEquals(version, "11,2")) return "iMac (21.5-inch, Mid 2010)";
|
||||
if(ffStrEquals(version, "10,1")) return "iMac (27/21.5-inch, Late 2009)";
|
||||
if(ffStrEquals(version, "9,1")) return "iMac (24/20-inch, Early 2009)";
|
||||
if (ffStrEquals(version, "21,1")) {
|
||||
return "iMac (24-inch, M1, 2021, Two Thunderbolt / USB 4 ports, Two USB 3 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "21,2")) {
|
||||
return "iMac (24-inch, M1, 2021, Two Thunderbolt / USB 4 ports)";
|
||||
}
|
||||
if (ffStrEquals(version, "20,1") ||
|
||||
ffStrEquals(version, "20,2")) {
|
||||
return "iMac (Retina 5K, 27-inch, 2020)";
|
||||
}
|
||||
if (ffStrEquals(version, "19,1")) {
|
||||
return "iMac (Retina 5K, 27-inch, 2019)";
|
||||
}
|
||||
if (ffStrEquals(version, "19,2")) {
|
||||
return "iMac (Retina 4K, 21.5-inch, 2019)";
|
||||
}
|
||||
if (ffStrEquals(version, "Pro1,1")) {
|
||||
return "iMac Pro (2017)";
|
||||
}
|
||||
if (ffStrEquals(version, "18,3")) {
|
||||
return "iMac (Retina 5K, 27-inch, 2017)";
|
||||
}
|
||||
if (ffStrEquals(version, "18,2")) {
|
||||
return "iMac (Retina 4K, 21.5-inch, 2017)";
|
||||
}
|
||||
if (ffStrEquals(version, "18,1")) {
|
||||
return "iMac (21.5-inch, 2017)";
|
||||
}
|
||||
if (ffStrEquals(version, "17,1")) {
|
||||
return "iMac (Retina 5K, 27-inch, Late 2015)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,2")) {
|
||||
return "iMac (Retina 4K, 21.5-inch, Late 2015)";
|
||||
}
|
||||
if (ffStrEquals(version, "16,1")) {
|
||||
return "iMac (21.5-inch, Late 2015)";
|
||||
}
|
||||
if (ffStrEquals(version, "15,1")) {
|
||||
return "iMac (Retina 5K, 27-inch, Late 2014 - Mid 2015)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,4")) {
|
||||
return "iMac (21.5-inch, Mid 2014)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,2")) {
|
||||
return "iMac (27-inch, Late 2013)";
|
||||
}
|
||||
if (ffStrEquals(version, "14,1")) {
|
||||
return "iMac (21.5-inch, Late 2013)";
|
||||
}
|
||||
if (ffStrEquals(version, "13,2")) {
|
||||
return "iMac (27-inch, Late 2012)";
|
||||
}
|
||||
if (ffStrEquals(version, "13,1")) {
|
||||
return "iMac (21.5-inch, Late 2012)";
|
||||
}
|
||||
if (ffStrEquals(version, "12,2")) {
|
||||
return "iMac (27-inch, Mid 2011)";
|
||||
}
|
||||
if (ffStrEquals(version, "12,1")) {
|
||||
return "iMac (21.5-inch, Mid 2011)";
|
||||
}
|
||||
if (ffStrEquals(version, "11,3")) {
|
||||
return "iMac (27-inch, Mid 2010)";
|
||||
}
|
||||
if (ffStrEquals(version, "11,2")) {
|
||||
return "iMac (21.5-inch, Mid 2010)";
|
||||
}
|
||||
if (ffStrEquals(version, "10,1")) {
|
||||
return "iMac (27/21.5-inch, Late 2009)";
|
||||
}
|
||||
if (ffStrEquals(version, "9,1")) {
|
||||
return "iMac (24/20-inch, Early 2009)";
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
bool ffHostDetectMac(FFHostResult* host)
|
||||
{
|
||||
if (ffStrbufStartsWithS(&host->family, "Mac") && ffStrbufEqualS(&host->vendor, "Apple Inc."))
|
||||
{
|
||||
bool ffHostDetectMac(FFHostResult* host) {
|
||||
if (ffStrbufStartsWithS(&host->family, "Mac") && ffStrbufEqualS(&host->vendor, "Apple Inc.")) {
|
||||
const char* productName = ffHostGetMacProductNameWithHwModel(&host->name);
|
||||
if (productName)
|
||||
{
|
||||
if (productName) {
|
||||
ffStrbufDestroy(&host->family);
|
||||
ffStrbufInitMove(&host->family, &host->name);
|
||||
ffStrbufSetStatic(&host->name, productName);
|
||||
|
||||
@@ -2,20 +2,24 @@
|
||||
#include "common/sysctl.h"
|
||||
#include "common/smbiosHelper.h"
|
||||
|
||||
const char* ffDetectHost(FFHostResult* host)
|
||||
{
|
||||
const char* ffDetectHost(FFHostResult* host) {
|
||||
const char* error = NULL;
|
||||
if ((error = ffSysctlGetString("machdep.dmi.system-product", &host->name)))
|
||||
if ((error = ffSysctlGetString("machdep.dmi.system-product", &host->name))) {
|
||||
return error;
|
||||
}
|
||||
ffCleanUpSmbiosValue(&host->name);
|
||||
if (ffSysctlGetString("machdep.dmi.system-vendor", &host->vendor) == NULL)
|
||||
if (ffSysctlGetString("machdep.dmi.system-vendor", &host->vendor) == NULL) {
|
||||
ffCleanUpSmbiosValue(&host->vendor);
|
||||
if (ffSysctlGetString("machdep.dmi.system-version", &host->version) == NULL)
|
||||
}
|
||||
if (ffSysctlGetString("machdep.dmi.system-version", &host->version) == NULL) {
|
||||
ffCleanUpSmbiosValue(&host->version);
|
||||
if (ffSysctlGetString("machdep.dmi.system-serial", &host->serial) == NULL)
|
||||
}
|
||||
if (ffSysctlGetString("machdep.dmi.system-serial", &host->serial) == NULL) {
|
||||
ffCleanUpSmbiosValue(&host->serial);
|
||||
if (ffSysctlGetString("machdep.dmi.system-uuid", &host->uuid) == NULL)
|
||||
}
|
||||
if (ffSysctlGetString("machdep.dmi.system-uuid", &host->uuid) == NULL) {
|
||||
ffCleanUpSmbiosValue(&host->uuid);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "host.h"
|
||||
|
||||
const char* ffDetectHost(FF_MAYBE_UNUSED FFHostResult* host)
|
||||
{
|
||||
const char* ffDetectHost(FF_MAYBE_UNUSED FFHostResult* host) {
|
||||
return "Not supported on this platform";
|
||||
}
|
||||
|
||||
@@ -2,18 +2,21 @@
|
||||
#include "common/sysctl.h"
|
||||
#include "common/smbiosHelper.h"
|
||||
|
||||
const char* ffDetectHost(FFHostResult* host)
|
||||
{
|
||||
const char* ffDetectHost(FFHostResult* host) {
|
||||
const char* error = NULL;
|
||||
if ((error = ffSysctlGetString(CTL_HW, HW_PRODUCT, &host->name)))
|
||||
if ((error = ffSysctlGetString(CTL_HW, HW_PRODUCT, &host->name))) {
|
||||
return error;
|
||||
}
|
||||
ffCleanUpSmbiosValue(&host->name);
|
||||
if (ffSysctlGetString(CTL_HW, HW_VENDOR, &host->vendor) == NULL)
|
||||
if (ffSysctlGetString(CTL_HW, HW_VENDOR, &host->vendor) == NULL) {
|
||||
ffCleanUpSmbiosValue(&host->vendor);
|
||||
if (ffSysctlGetString(CTL_HW, HW_VERSION, &host->version) == NULL)
|
||||
}
|
||||
if (ffSysctlGetString(CTL_HW, HW_VERSION, &host->version) == NULL) {
|
||||
ffCleanUpSmbiosValue(&host->version);
|
||||
if (ffSysctlGetString(CTL_HW, HW_SERIALNO, &host->serial) == NULL)
|
||||
}
|
||||
if (ffSysctlGetString(CTL_HW, HW_SERIALNO, &host->serial) == NULL) {
|
||||
ffCleanUpSmbiosValue(&host->serial);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
#include "host.h"
|
||||
#include "common/smbiosHelper.h"
|
||||
|
||||
typedef struct FFSmbiosSystemInfo
|
||||
{
|
||||
typedef struct FFSmbiosSystemInfo {
|
||||
FFSmbiosHeader Header;
|
||||
|
||||
uint8_t Manufacturer; // string
|
||||
uint8_t ProductName; // string
|
||||
uint8_t Version; // string
|
||||
uint8_t ProductName; // string
|
||||
uint8_t Version; // string
|
||||
uint8_t SerialNumber; // string
|
||||
|
||||
// 2.1+
|
||||
@@ -19,25 +18,26 @@ typedef struct FFSmbiosSystemInfo
|
||||
uint8_t ClockSeqLow;
|
||||
uint8_t Node[6];
|
||||
} __attribute__((__packed__)) UUID; // varies
|
||||
uint8_t WakeUpType; // enum
|
||||
uint8_t WakeUpType; // enum
|
||||
|
||||
// 2.4+
|
||||
uint8_t SKUNumber; // string
|
||||
uint8_t Family; // string
|
||||
uint8_t Family; // string
|
||||
} __attribute__((__packed__)) FFSmbiosSystemInfo;
|
||||
|
||||
static_assert(offsetof(FFSmbiosSystemInfo, Family) == 0x1A,
|
||||
"FFSmbiosSystemInfo: Wrong struct alignment");
|
||||
|
||||
const char* ffDetectHost(FFHostResult* host)
|
||||
{
|
||||
const char* ffDetectHost(FFHostResult* host) {
|
||||
const FFSmbiosHeaderTable* smbiosTable = ffGetSmbiosHeaderTable();
|
||||
if (!smbiosTable)
|
||||
if (!smbiosTable) {
|
||||
return "Failed to get SMBIOS data";
|
||||
}
|
||||
|
||||
const FFSmbiosSystemInfo* data = (const FFSmbiosSystemInfo*) (*smbiosTable)[FF_SMBIOS_TYPE_SYSTEM_INFO];
|
||||
if (!data)
|
||||
if (!data) {
|
||||
return "System information is not found in SMBIOS data";
|
||||
}
|
||||
|
||||
const char* strings = (const char*) data + data->Header.Length;
|
||||
|
||||
@@ -51,30 +51,24 @@ const char* ffDetectHost(FFHostResult* host)
|
||||
ffCleanUpSmbiosValue(&host->serial);
|
||||
|
||||
static_assert(offsetof(FFSmbiosSystemInfo, UUID) == 0x08, "FFSmbiosSystemInfo.UUID offset is wrong");
|
||||
if (data->Header.Length > offsetof(FFSmbiosSystemInfo, UUID))
|
||||
{
|
||||
ffStrbufSetF(&host->uuid, "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
|
||||
data->UUID.TimeLow, data->UUID.TimeMid, data->UUID.TimeHighAndVersion,
|
||||
data->UUID.ClockSeqHiAndReserved, data->UUID.ClockSeqLow,
|
||||
data->UUID.Node[0], data->UUID.Node[1], data->UUID.Node[2], data->UUID.Node[3], data->UUID.Node[4], data->UUID.Node[5]);
|
||||
if (data->Header.Length > offsetof(FFSmbiosSystemInfo, UUID)) {
|
||||
ffStrbufSetF(&host->uuid, "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", data->UUID.TimeLow, data->UUID.TimeMid, data->UUID.TimeHighAndVersion, data->UUID.ClockSeqHiAndReserved, data->UUID.ClockSeqLow, data->UUID.Node[0], data->UUID.Node[1], data->UUID.Node[2], data->UUID.Node[3], data->UUID.Node[4], data->UUID.Node[5]);
|
||||
}
|
||||
|
||||
static_assert(offsetof(FFSmbiosSystemInfo, SKUNumber) == 0x19, "FFSmbiosSystemInfo.SKUNumber offset is wrong");
|
||||
if (data->Header.Length > offsetof(FFSmbiosSystemInfo, SKUNumber))
|
||||
{
|
||||
if (data->Header.Length > offsetof(FFSmbiosSystemInfo, SKUNumber)) {
|
||||
ffStrbufSetStatic(&host->sku, ffSmbiosLocateString(strings, data->SKUNumber));
|
||||
ffCleanUpSmbiosValue(&host->sku);
|
||||
}
|
||||
|
||||
if (data->Header.Length > offsetof(FFSmbiosSystemInfo, Family))
|
||||
{
|
||||
if (data->Header.Length > offsetof(FFSmbiosSystemInfo, Family)) {
|
||||
ffStrbufSetStatic(&host->family, ffSmbiosLocateString(strings, data->Family));
|
||||
ffCleanUpSmbiosValue(&host->family);
|
||||
}
|
||||
|
||||
#if __x86_64__
|
||||
#if __x86_64__
|
||||
ffHostDetectMac(host);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user