Skip to content

Commit 51bf6e3

Browse files
Refactor Armbian detection
1 parent 892d42f commit 51bf6e3

File tree

1 file changed

+34
-42
lines changed

1 file changed

+34
-42
lines changed

src/detection/os/os_linux.c

Lines changed: 34 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -52,28 +52,8 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result)
5252
if(!ffStrSet(xdgConfigDirs))
5353
return;
5454

55-
if (ffStrbufStartsWithS(&result->prettyName, "Armbian ")) // Armbian 24.11 noble
56-
{
57-
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;
65-
}
66-
else if (ffStrbufStartsWithS(&result->prettyName, "Armbian-unofficial ")) // Unofficial Armbian image built from source
67-
{
68-
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);
55+
if (detectArmbianVersion(result))
7556
return;
76-
}
7757
else if(ffStrbufStartsWithS(&result->prettyName, "Linux Lite "))
7858
{
7959
ffStrbufSetS(&result->name, "Linux Lite");
@@ -186,28 +166,8 @@ FF_MAYBE_UNUSED static void getDebianVersion(FFOSResult* result)
186166

187167
FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result)
188168
{
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);
198-
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);
169+
if (detectArmbianVersion(result))
209170
return true;
210-
}
211171
else if (ffStrbufStartsWithS(&result->name, "Loc-OS"))
212172
{
213173
ffStrbufSetS(&result->id, "locos");
@@ -270,6 +230,38 @@ FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result)
270230
return false;
271231
}
272232

233+
// Get Armbian version properties and set idLike based on the Armbian image basis
234+
FF_MAYBE_UNUSED static void getArmbianVersion(FFOSResult* result)
235+
{
236+
if(ffStrbufIgnCaseEqualS(&os->id, "ubuntu"))
237+
ffStrbufSetS(&result->idLike, "ubuntu");
238+
else if(ffStrbufIgnCaseEqualS(&os->id, "debian"))
239+
ffStrbufSetS(&result->idLike, "debian");
240+
ffStrbufSetS(&result->id, "armbian");
241+
ffStrbufClear(&result->versionID);
242+
uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1;
243+
uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' ');
244+
ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart);
245+
}
246+
247+
// Common logic for detecting Armbian image version
248+
FF_MAYBE_UNUSED static bool detectArmbianVersion(FFOSResult* result)
249+
{
250+
if (ffStrbufStartsWithS(&result->prettyName, "Armbian ")) // Official Armbian release images
251+
{
252+
ffStrbufSetS(&result->name, "Armbian");
253+
getArmbianVersion(result);
254+
return true;
255+
}
256+
else if (ffStrbufStartsWithS(&result->prettyName, "Armbian-unofficial ")) // Unofficial Armbian image built from source
257+
{
258+
ffStrbufSetS(&result->name, "Armbian (custom build)");
259+
getArmbianVersion(result);
260+
return true;
261+
}
262+
return false;
263+
}
264+
273265
static void detectOS(FFOSResult* os)
274266
{
275267
#ifdef FF_CUSTOM_OS_RELEASE_PATH

0 commit comments

Comments
 (0)