Skip to content

Commit

Permalink
Refactor Armbian detection
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnTheCoolingFan committed Dec 18, 2024
1 parent 892d42f commit 61fcbe7
Showing 1 changed file with 32 additions and 40 deletions.
72 changes: 32 additions & 40 deletions src/detection/os/os_linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,34 +46,46 @@ static bool parseOsRelease(const char* fileName, FFOSResult* result)
});
}

FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result)
// Get Armbian version properties and set idLike based on the Armbian image basis
FF_MAYBE_UNUSED static void getArmbianVersion(FFOSResult* result)
{
const char* xdgConfigDirs = getenv("XDG_CONFIG_DIRS");
if(!ffStrSet(xdgConfigDirs))
return;
if(ffStrbufIgnCaseEqualS(&result->id, "ubuntu"))
ffStrbufSetS(&result->idLike, "ubuntu");
else
ffStrbufSetS(&result->idLike, "debian");
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);
}

if (ffStrbufStartsWithS(&result->prettyName, "Armbian ")) // Armbian 24.11 noble
// 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");
ffStrbufSetS(&result->id, "armbian");
ffStrbufSetS(&result->idLike, "ubuntu");
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;
getArmbianVersion(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, "ubuntu");
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;
getArmbianVersion(result);
return true;
}
return false;
}

FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result)
{
const char* xdgConfigDirs = getenv("XDG_CONFIG_DIRS");
if(!ffStrSet(xdgConfigDirs))
return;

if (detectArmbianVersion(result))
return;
else if(ffStrbufStartsWithS(&result->prettyName, "Linux Lite "))
{
ffStrbufSetS(&result->name, "Linux Lite");
Expand Down Expand Up @@ -186,28 +198,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");
Expand Down

0 comments on commit 61fcbe7

Please sign in to comment.