@@ -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  if (ffStrbufIgnCaseEqualS (& result -> id , "debian" ))
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 ) ==  true)
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