From 7eb86b4e95e298fb0c8d780536113164d9ca9473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sun, 9 Jun 2024 11:33:42 +0800 Subject: [PATCH] OS (Linux): don't priortitize `lsb-release` over `os-release` --- src/detection/os/os_linux.c | 41 ++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index 1d3afe947..c37de8647 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -180,6 +180,28 @@ static bool detectDebianDerived(FFOSResult* result) ffStrbufSetF(&result->prettyName, "Proxmox VE %s", result->versionID.chars); return true; } + else + { + // Hack for MX Linux. See #847 + FF_STRBUF_AUTO_DESTROY lsbRelease = ffStrbufCreate(); + if (ffAppendFileBuffer("/etc/lsb-release", &lsbRelease) && ffStrbufContainS(&lsbRelease, "DISTRIB_ID=MX")) + { + ffStrbufSetS(&result->id, "mx"); + ffStrbufSetS(&result->idLike, "debian"); + ffStrbufSetS(&result->name, "MX"); + + ffStrbufClear(&result->version); + ffParsePropLines(lsbRelease.chars, "DISTRIB_RELEASE=", &result->version); + ffStrbufSet(&result->versionID, &result->version); + + ffStrbufClear(&result->codename); + ffParsePropLines(lsbRelease.chars, "DISTRIB_CODENAME=", &result->codename); + + ffStrbufClear(&result->prettyName); + ffParsePropLines(lsbRelease.chars, "DISTRIB_DESCRIPTION=", &result->prettyName); + return true; + } + } return false; } @@ -208,22 +230,9 @@ static void detectOS(FFOSResult* os) // Refer: https://gist.github.com/natefoo/814c5bf936922dad97ff - // Hack for MX Linux. See #847 - if(parseLsbRelease(FASTFETCH_TARGET_DIR_ETC "/lsb-release", os)) - { - if (ffStrbufEqualS(&os->id, "MX")) - { - ffStrbufSetStatic(&os->name, "MX"); - ffStrbufSetStatic(&os->idLike, "debian"); - return; - } - - // For archlinux - if (ffStrbufEqualS(&os->version, "rolling")) - ffStrbufClear(&os->version); - } - - if(parseOsRelease(FASTFETCH_TARGET_DIR_ETC "/os-release", os) && allRelevantValuesSet(os)) + if((parseOsRelease(FASTFETCH_TARGET_DIR_ETC "/os-release", os) || + parseLsbRelease(FASTFETCH_TARGET_DIR_ETC "/lsb-release", os)) && + allRelevantValuesSet(os)) return; parseOsRelease(FASTFETCH_TARGET_DIR_USR "/lib/os-release", os);