Skip to content

Commit 61fcbe7

Browse files
Refactor Armbian detection
1 parent 892d42f commit 61fcbe7

File tree

1 file changed

+32
-40
lines changed

1 file changed

+32
-40
lines changed

src/detection/os/os_linux.c

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -46,34 +46,46 @@ static bool parseOsRelease(const char* fileName, FFOSResult* result)
4646
});
4747
}
4848

49-
FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result)
49+
// Get Armbian version properties and set idLike based on the Armbian image basis
50+
FF_MAYBE_UNUSED static void getArmbianVersion(FFOSResult* result)
5051
{
51-
const char* xdgConfigDirs = getenv("XDG_CONFIG_DIRS");
52-
if(!ffStrSet(xdgConfigDirs))
53-
return;
52+
if(ffStrbufIgnCaseEqualS(&result->id, "ubuntu"))
53+
ffStrbufSetS(&result->idLike, "ubuntu");
54+
else
55+
ffStrbufSetS(&result->idLike, "debian");
56+
ffStrbufSetS(&result->id, "armbian");
57+
ffStrbufClear(&result->versionID);
58+
uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1;
59+
uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' ');
60+
ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart);
61+
}
5462

55-
if (ffStrbufStartsWithS(&result->prettyName, "Armbian ")) // Armbian 24.11 noble
63+
// Common logic for detecting Armbian image version
64+
FF_MAYBE_UNUSED static bool detectArmbianVersion(FFOSResult* result)
65+
{
66+
if (ffStrbufStartsWithS(&result->prettyName, "Armbian ")) // Official Armbian release images
5667
{
5768
ffStrbufSetS(&result->name, "Armbian");
58-
ffStrbufSetS(&result->id, "armbian");
59-
ffStrbufSetS(&result->idLike, "ubuntu");
60-
ffStrbufClear(&result->versionID);
61-
uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1;
62-
uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' ');
63-
ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart);
64-
return;
69+
getArmbianVersion(result);
70+
return true;
6571
}
6672
else if (ffStrbufStartsWithS(&result->prettyName, "Armbian-unofficial ")) // Unofficial Armbian image built from source
6773
{
6874
ffStrbufSetS(&result->name, "Armbian (custom build)");
69-
ffStrbufSetS(&result->id, "armbian");
70-
ffStrbufSetS(&result->idLike, "ubuntu");
71-
ffStrbufClear(&result->versionID);
72-
uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1;
73-
uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' ');
74-
ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart);
75-
return;
75+
getArmbianVersion(result);
76+
return true;
7677
}
78+
return false;
79+
}
80+
81+
FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result)
82+
{
83+
const char* xdgConfigDirs = getenv("XDG_CONFIG_DIRS");
84+
if(!ffStrSet(xdgConfigDirs))
85+
return;
86+
87+
if (detectArmbianVersion(result))
88+
return;
7789
else if(ffStrbufStartsWithS(&result->prettyName, "Linux Lite "))
7890
{
7991
ffStrbufSetS(&result->name, "Linux Lite");
@@ -186,28 +198,8 @@ FF_MAYBE_UNUSED static void getDebianVersion(FFOSResult* result)
186198

187199
FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result)
188200
{
189-
if (ffStrbufStartsWithS(&result->prettyName, "Armbian ")) // Armbian 24.2.1 bookworm
190-
{
191-
ffStrbufSetS(&result->name, "Armbian");
192-
ffStrbufSetS(&result->id, "armbian");
193-
ffStrbufSetS(&result->idLike, "debian");
194-
ffStrbufClear(&result->versionID);
195-
uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1;
196-
uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' ');
197-
ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart);
201+
if (detectArmbianVersion(result))
198202
return true;
199-
}
200-
else if (ffStrbufStartsWithS(&result->prettyName, "Armbian-unofficial ")) // Unofficial Armbian image built from source
201-
{
202-
ffStrbufSetS(&result->name, "Armbian (custom build)");
203-
ffStrbufSetS(&result->id, "armbian");
204-
ffStrbufSetS(&result->idLike, "debian");
205-
ffStrbufClear(&result->versionID);
206-
uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1;
207-
uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' ');
208-
ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart);
209-
return true;
210-
}
211203
else if (ffStrbufStartsWithS(&result->name, "Loc-OS"))
212204
{
213205
ffStrbufSetS(&result->id, "locos");

0 commit comments

Comments
 (0)