From 05c41ffd89037abea069d5a0a5dfcc8f7ccd52d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Fri, 16 Jun 2023 16:40:43 +0800 Subject: [PATCH] Bios: code refactor --- src/detection/bios/bios.h | 3 +-- src/detection/bios/bios_apple.c | 17 ++++++--------- src/detection/bios/bios_bsd.c | 9 ++------ src/detection/bios/bios_linux.c | 12 ++-------- src/detection/bios/bios_nosupport.c | 9 ++------ src/detection/bios/bios_windows.c | 20 +++++++---------- src/modules/bios/bios.c | 34 ++++++++++++++++------------- 7 files changed, 41 insertions(+), 63 deletions(-) diff --git a/src/detection/bios/bios.h b/src/detection/bios/bios.h index 6f664b4b2..039918a56 100644 --- a/src/detection/bios/bios.h +++ b/src/detection/bios/bios.h @@ -11,9 +11,8 @@ typedef struct FFBiosResult FFstrbuf biosRelease; FFstrbuf biosVendor; FFstrbuf biosVersion; - FFstrbuf error; } FFBiosResult; -void ffDetectBios(FFBiosResult* bios); +const char* ffDetectBios(FFBiosResult* bios); #endif diff --git a/src/detection/bios/bios_apple.c b/src/detection/bios/bios_apple.c index 9d7ff75cc..b8be5c15e 100644 --- a/src/detection/bios/bios_apple.c +++ b/src/detection/bios/bios_apple.c @@ -3,14 +3,8 @@ #include -void ffDetectBios(FFBiosResult* bios) +const char* ffDetectBios(FFBiosResult* bios) { - ffStrbufInit(&bios->error); - ffStrbufInit(&bios->biosDate); - ffStrbufInit(&bios->biosRelease); - ffStrbufInit(&bios->biosVendor); - ffStrbufInit(&bios->biosVersion); - io_registry_entry_t registryEntry; #ifndef __aarch64__ @@ -23,8 +17,7 @@ void ffDetectBios(FFBiosResult* bios) if(IORegistryEntryCreateCFProperties(registryEntry, &properties, kCFAllocatorDefault, kNilOptions) != kIOReturnSuccess) { IOObjectRelease(registryEntry); - ffStrbufAppendS(&bios->error, "IORegistryEntryCreateCFProperties(registryEntry) failed"); - return; + return "IORegistryEntryCreateCFProperties(registryEntry) failed"; } ffCfDictGetString(properties, CFSTR("vendor"), &bios->biosVendor); @@ -36,7 +29,7 @@ void ffDetectBios(FFBiosResult* bios) CFRelease(properties); IOObjectRelease(registryEntry); - return; + return NULL; } #else @@ -51,6 +44,7 @@ void ffDetectBios(FFBiosResult* bios) CFRelease(properties); } IOObjectRelease(registryEntry); + return NULL; } if((registryEntry = IORegistryEntryFromPath(MACH_PORT_NULL, "IODeviceTree:/chosen"))) @@ -64,7 +58,10 @@ void ffDetectBios(FFBiosResult* bios) CFRelease(properties); } IOObjectRelease(registryEntry); + return NULL; } #endif + + return "Failed to query bios info"; } diff --git a/src/detection/bios/bios_bsd.c b/src/detection/bios/bios_bsd.c index 5699b3372..df8c853b9 100644 --- a/src/detection/bios/bios_bsd.c +++ b/src/detection/bios/bios_bsd.c @@ -2,16 +2,11 @@ #include "common/settings.h" -void ffDetectBios(FFBiosResult* bios) +const char* ffDetectBios(FFBiosResult* bios) { - ffStrbufInit(&bios->error); - ffStrbufInit(&bios->biosDate); - ffStrbufInit(&bios->biosRelease); - ffStrbufInit(&bios->biosVendor); - ffStrbufInit(&bios->biosVersion); - ffSettingsGetFreeBSDKenv("smbios.bios.reldate", &bios->biosDate); ffSettingsGetFreeBSDKenv("smbios.bios.revision", &bios->biosRelease); ffSettingsGetFreeBSDKenv("smbios.bios.vendor", &bios->biosVendor); ffSettingsGetFreeBSDKenv("smbios.bios.version", &bios->biosVersion); + return NULL; } diff --git a/src/detection/bios/bios_linux.c b/src/detection/bios/bios_linux.c index ce23edf89..820cff62c 100644 --- a/src/detection/bios/bios_linux.c +++ b/src/detection/bios/bios_linux.c @@ -40,19 +40,11 @@ static void getHostValue(const char* devicesPath, const char* classPath, FFstrbu ffStrbufClear(buffer); } -void ffDetectBios(FFBiosResult* bios) +const char* ffDetectBios(FFBiosResult* bios) { - ffStrbufInit(&bios->error); - - ffStrbufInit(&bios->biosDate); getHostValue("/sys/devices/virtual/dmi/id/bios_date", "/sys/class/dmi/id/bios_date", &bios->biosDate); - - ffStrbufInit(&bios->biosRelease); getHostValue("/sys/devices/virtual/dmi/id/bios_release", "/sys/class/dmi/id/bios_release", &bios->biosRelease); - - ffStrbufInit(&bios->biosVendor); getHostValue("/sys/devices/virtual/dmi/id/bios_vendor", "/sys/class/dmi/id/bios_vendor", &bios->biosVendor); - - ffStrbufInit(&bios->biosVersion); getHostValue("/sys/devices/virtual/dmi/id/bios_version", "/sys/class/dmi/id/bios_version", &bios->biosVersion); + return NULL; } diff --git a/src/detection/bios/bios_nosupport.c b/src/detection/bios/bios_nosupport.c index f8d886182..ac544fd3e 100644 --- a/src/detection/bios/bios_nosupport.c +++ b/src/detection/bios/bios_nosupport.c @@ -1,11 +1,6 @@ #include "bios.h" -void ffDetectBios(FFBiosResult* bios) +const char* ffDetectBios(FF_MAYBE_UNUSED FFBiosResult* bios) { - ffStrbufInitS(&bios->error, "Not supported on this platform"); - - ffStrbufInit(&bios->biosDate); - ffStrbufInit(&bios->biosRelease); - ffStrbufInit(&bios->biosVendor); - ffStrbufInit(&bios->biosVersion); + return "Not supported on this platform"; } diff --git a/src/detection/bios/bios_windows.c b/src/detection/bios/bios_windows.c index 7facb2576..e23baa9c1 100644 --- a/src/detection/bios/bios_windows.c +++ b/src/detection/bios/bios_windows.c @@ -1,21 +1,15 @@ #include "bios.h" #include "util/windows/registry.h" -void ffDetectBios(FFBiosResult* bios) +const char* ffDetectBios(FFBiosResult* bios) { - ffStrbufInit(&bios->error); - - ffStrbufInit(&bios->biosDate); - ffStrbufInit(&bios->biosRelease); - ffStrbufInit(&bios->biosVendor); - ffStrbufInit(&bios->biosVersion); - FF_HKEY_AUTO_DESTROY hKey = NULL; - if(!ffRegOpenKeyForRead(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\BIOS", &hKey, &bios->error)) - return; + if(!ffRegOpenKeyForRead(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\BIOS", &hKey, NULL)) + return "ffRegOpenKeyForRead(HKEY_LOCAL_MACHINE, L\"HARDWARE\\DESCRIPTION\\System\\BIOS\", &hKey, NULL) failed"; + + if(!ffRegReadStrbuf(hKey, L"BIOSVersion", &bios->biosRelease, NULL)) + return "\"HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS\\BIOSVersion\" doesn't exist"; - if(!ffRegReadStrbuf(hKey, L"BIOSVersion", &bios->biosRelease, &bios->error)) - return; ffRegReadStrbuf(hKey, L"BIOSVendor", &bios->biosVendor, NULL); ffRegReadStrbuf(hKey, L"BIOSReleaseDate", &bios->biosDate, NULL); @@ -25,4 +19,6 @@ void ffDetectBios(FFBiosResult* bios) ffRegReadUint(hKey, L"BiosMinorRelease", &minor, NULL) ) ffStrbufAppendF(&bios->biosVersion, "%u.%u", (unsigned)major, (unsigned)minor); + + return NULL; } diff --git a/src/modules/bios/bios.c b/src/modules/bios/bios.c index 139cd2740..b898217b3 100644 --- a/src/modules/bios/bios.c +++ b/src/modules/bios/bios.c @@ -7,16 +7,21 @@ void ffPrintBios(FFinstance* instance, FFBiosOptions* options) { - FFBiosResult result; - ffDetectBios(&result); + FFBiosResult bios; + ffStrbufInit(&bios.biosDate); + ffStrbufInit(&bios.biosRelease); + ffStrbufInit(&bios.biosVendor); + ffStrbufInit(&bios.biosVersion); - if(result.error.length > 0) + const char* error = ffDetectBios(&bios); + + if(error) { - ffPrintError(instance, FF_BIOS_MODULE_NAME, 0, &options->moduleArgs, "%*s", result.error.length, result.error.chars); + ffPrintError(instance, FF_BIOS_MODULE_NAME, 0, &options->moduleArgs, "%s", error); goto exit; } - if(result.biosRelease.length == 0) + if(bios.biosRelease.length == 0) { ffPrintError(instance, FF_BIOS_MODULE_NAME, 0, &options->moduleArgs, "bios_release is not set."); goto exit; @@ -25,24 +30,23 @@ void ffPrintBios(FFinstance* instance, FFBiosOptions* options) if(options->moduleArgs.outputFormat.length == 0) { ffPrintLogoAndKey(instance, FF_BIOS_MODULE_NAME, 0, &options->moduleArgs.key); - puts(result.biosRelease.chars); + puts(bios.biosRelease.chars); } else { ffPrintFormat(instance, FF_BIOS_MODULE_NAME, 0, &options->moduleArgs, FF_BIOS_NUM_FORMAT_ARGS, (FFformatarg[]) { - {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosDate}, - {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosRelease}, - {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosVendor}, - {FF_FORMAT_ARG_TYPE_STRBUF, &result.biosVersion}, + {FF_FORMAT_ARG_TYPE_STRBUF, &bios.biosDate}, + {FF_FORMAT_ARG_TYPE_STRBUF, &bios.biosRelease}, + {FF_FORMAT_ARG_TYPE_STRBUF, &bios.biosVendor}, + {FF_FORMAT_ARG_TYPE_STRBUF, &bios.biosVersion}, }); } exit: - ffStrbufDestroy(&result.biosDate); - ffStrbufDestroy(&result.biosRelease); - ffStrbufDestroy(&result.biosVendor); - ffStrbufDestroy(&result.biosVersion); - ffStrbufDestroy(&result.error); + ffStrbufDestroy(&bios.biosDate); + ffStrbufDestroy(&bios.biosRelease); + ffStrbufDestroy(&bios.biosVendor); + ffStrbufDestroy(&bios.biosVersion); } void ffInitBiosOptions(FFBiosOptions* options)