@@ -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
187167FF_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+
273265static void detectOS (FFOSResult * os )
274266{
275267 #ifdef FF_CUSTOM_OS_RELEASE_PATH
0 commit comments