@@ -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
187199FF_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