From 3bb82423b3e603add76d32f7433c12503463200d Mon Sep 17 00:00:00 2001 From: JohnTheCoolingFan <43478602+JohnTheCoolingFan@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:18:42 +0300 Subject: [PATCH] OS (Linux): Refactor Armbian version detection and add support for ubuntu-based armbian detection (#1447) * Add support for detection of Armbian as Ubuntu flavor Ubuntu can be used to build Armbian, it is one of the official bases for Armbian. This allows the detection of Armbian in case it is based on Ubuntu. * Refactor Armbian detection * Armbian: set idLike to id before setting id to "armbian" * Tidy up detectArmbianVersion --- src/detection/os/os_linux.c | 44 ++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index d4ec8b0be..f293d5f0e 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -46,13 +46,33 @@ static bool parseOsRelease(const char* fileName, FFOSResult* result) }); } +// Common logic for detecting Armbian image version +FF_MAYBE_UNUSED static bool detectArmbianVersion(FFOSResult* result) +{ + if (ffStrbufStartsWithS(&result->prettyName, "Armbian ")) // Official Armbian release images + ffStrbufSetS(&result->name, "Armbian"); + else if (ffStrbufStartsWithS(&result->prettyName, "Armbian-unofficial ")) // Unofficial Armbian image built from source + ffStrbufSetS(&result->name, "Armbian (custom build)"); + else + return false; + ffStrbufSet(&result->idLike, &result->id); + ffStrbufSetS(&result->id, "armbian"); + ffStrbufClear(&result->versionID); + uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1; + uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' '); + ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart); + return true; +} + FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) { const char* xdgConfigDirs = getenv("XDG_CONFIG_DIRS"); if(!ffStrSet(xdgConfigDirs)) return; - if(ffStrbufStartsWithS(&result->prettyName, "Linux Lite ")) + if (detectArmbianVersion(result)) + return; + else if(ffStrbufStartsWithS(&result->prettyName, "Linux Lite ")) { ffStrbufSetS(&result->name, "Linux Lite"); ffStrbufSetS(&result->id, "linuxlite"); @@ -164,28 +184,8 @@ FF_MAYBE_UNUSED static void getDebianVersion(FFOSResult* result) FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result) { - if (ffStrbufStartsWithS(&result->prettyName, "Armbian ")) // Armbian 24.2.1 bookworm - { - ffStrbufSetS(&result->name, "Armbian"); - ffStrbufSetS(&result->id, "armbian"); - ffStrbufSetS(&result->idLike, "debian"); - ffStrbufClear(&result->versionID); - uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1; - uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' '); - ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart); + if (detectArmbianVersion(result)) return true; - } - else if (ffStrbufStartsWithS(&result->prettyName, "Armbian-unofficial ")) // Unofficial Armbian image built from source - { - ffStrbufSetS(&result->name, "Armbian (custom build)"); - ffStrbufSetS(&result->id, "armbian"); - ffStrbufSetS(&result->idLike, "debian"); - ffStrbufClear(&result->versionID); - uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1; - uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' '); - ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart); - return true; - } else if (ffStrbufStartsWithS(&result->name, "Loc-OS")) { ffStrbufSetS(&result->id, "locos");