@@ -24,7 +24,52 @@ static void parseSystemVersion(FFOSResult* os)
2424 ffStrbufInitS (&os->buildID , value.UTF8String );
2525}
2626
27- void parseOSXSoftwareLicense (FFOSResult* os)
27+ static bool detectOSCodeName (FFOSResult* os)
28+ {
29+ // https://en.wikipedia.org/wiki/MacOS_version_history
30+ char * str_end;
31+ const char * version = os->version .chars ;
32+ unsigned long num = strtoul (version, &str_end, 10 );
33+ if (str_end == version) return false ;
34+
35+ switch (num)
36+ {
37+ case 14 : ffStrbufAppendS (&os->codename , " Sonoma" ); return true ;
38+ case 13 : ffStrbufAppendS (&os->codename , " Ventura" ); return true ;
39+ case 12 : ffStrbufAppendS (&os->codename , " Monterey" ); return true ;
40+ case 11 : ffStrbufAppendS (&os->codename , " Big Sur" ); return true ;
41+ case 10 : {
42+ version = str_end + 1 ;
43+ num = strtoul (version, &str_end, 10 );
44+ if (str_end == version) return false ;
45+
46+ switch (num)
47+ {
48+ case 16 : ffStrbufAppendS (&os->codename , " Big Sur" ); return true ;
49+ case 15 : ffStrbufAppendS (&os->codename , " Catalina" ); return true ;
50+ case 14 : ffStrbufAppendS (&os->codename , " Mojave" ); return true ;
51+ case 13 : ffStrbufAppendS (&os->codename , " High Sierra" ); return true ;
52+ case 12 : ffStrbufAppendS (&os->codename , " Sierra" ); return true ;
53+ case 11 : ffStrbufAppendS (&os->codename , " El Capitan" ); return true ;
54+ case 10 : ffStrbufAppendS (&os->codename , " Yosemite" ); return true ;
55+ case 9 : ffStrbufAppendS (&os->codename , " Mavericks" ); return true ;
56+ case 8 : ffStrbufAppendS (&os->codename , " Mountain Lion" ); return true ;
57+ case 7 : ffStrbufAppendS (&os->codename , " Lion" ); return true ;
58+ case 6 : ffStrbufAppendS (&os->codename , " Snow Leopard" ); return true ;
59+ case 5 : ffStrbufAppendS (&os->codename , " Leopard" ); return true ;
60+ case 4 : ffStrbufAppendS (&os->codename , " Tiger" ); return true ;
61+ case 3 : ffStrbufAppendS (&os->codename , " Panther" ); return true ;
62+ case 2 : ffStrbufAppendS (&os->codename , " Jaguar" ); return true ;
63+ case 1 : ffStrbufAppendS (&os->codename , " Puma" ); return true ;
64+ case 0 : ffStrbufAppendS (&os->codename , " Cheetah" ); return true ;
65+ }
66+ }
67+ }
68+
69+ return false ;
70+ }
71+
72+ static void parseOSXSoftwareLicense (FFOSResult* os)
2873{
2974 FILE* rtf = fopen (" /System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf" , " r" );
3075 if (rtf == NULL )
@@ -81,5 +126,6 @@ void ffDetectOSImpl(FFOSResult* os, const FFinstance* instance)
81126 ffStrbufAppend (&os->prettyName , &os->name );
82127 ffStrbufAppend (&os->versionID , &os->version );
83128
84- parseOSXSoftwareLicense (os);
129+ if (!detectOSCodeName (os))
130+ parseOSXSoftwareLicense (os);
85131}
0 commit comments