diff --git a/src/common/io/io.h b/src/common/io/io.h index ec3375bd0..d188942ca 100644 --- a/src/common/io/io.h +++ b/src/common/io/io.h @@ -105,7 +105,7 @@ static inline bool ffPathExists(const char* path, FFPathType pathType) unsigned int mode = fileStat.st_mode & S_IFMT; - if(pathType & FF_PATHTYPE_FILE && mode == S_IFREG) + if(pathType & FF_PATHTYPE_FILE && mode != S_IFDIR) return true; if(pathType & FF_PATHTYPE_DIRECTORY && mode == S_IFDIR) diff --git a/src/detection/bios/bios_bsd.c b/src/detection/bios/bios_bsd.c index 6111b4315..aa115de21 100644 --- a/src/detection/bios/bios_bsd.c +++ b/src/detection/bios/bios_bsd.c @@ -2,6 +2,7 @@ #include "common/settings.h" #include "common/sysctl.h" +#include "common/io/io.h" #include "util/smbiosHelper.h" const char* ffDetectBios(FFBiosResult* result) @@ -15,5 +16,18 @@ const char* ffDetectBios(FFBiosResult* result) ffSettingsGetFreeBSDKenv("smbios.bios.version", &result->version); ffCleanUpSmbiosValue(&result->version); ffSysctlGetString("machdep.bootmethod", &result->type); + + if (result->type.length == 0) + { + if (ffSettingsGetFreeBSDKenv("loader.efi", &result->type)) + ffStrbufSetStatic(&result->type, ffStrbufEqualS(&result->type, "1") ? "UEFI" : "BIOS"); + else + { + ffStrbufSetStatic(&result->type, + ffPathExists("/dev/efi" /*efidev*/, FF_PATHTYPE_FILE) || + ffPathExists("/boot/efi/efi" /*efi partition*/, FF_PATHTYPE_DIRECTORY) + ? "UEFI" : "BIOS"); + } + } return NULL; }