Skip to content

Commit 4af44a4

Browse files
committed
OS (macOS): add fast path for code name detection
1 parent 399cfe2 commit 4af44a4

File tree

1 file changed

+48
-2
lines changed

1 file changed

+48
-2
lines changed

src/detection/os/os_apple.m

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)