ohmu
·
2026-10-15
1#include "os.h"
2#include "common/settings.h"
3
4void ffDetectOSImpl(FFOSResult* os) {
5 ffStrbufSetStatic(&os->name, "Android");
6
7 ffStrbufSetStatic(&os->id, "android");
8
9 ffSettingsGetAndroidProperty("ro.build.version.release", &os->version);
10
11 ffStrbufSet(&os->versionID, &os->version);
12
13 unsigned major = 0;
14 for (const char* p = os->version.chars; *p >= '0' && *p <= '9'; ++p) {
15 major = major * 10 + (unsigned) (*p - '0');
16 }
17
18 const char* codename = NULL;
19 // https://en.wikipedia.org/wiki/Android_version_history
20 // Android 5 is the oldest version supported by Termux
21 // clang-format off
22 switch (major) {
23 case 17: codename = "Cinnamon Bun"; break;
24 case 16: codename = "Baklava"; break;
25 case 15: codename = "Vanilla Ice Cream"; break;
26 case 14: codename = "Upside Down Cake"; break;
27 case 13: codename = "Tiramisu"; break;
28 case 12: codename = "Snow Cone"; break;
29 case 11: codename = "Red Velvet Cake"; break;
30 case 10: codename = "Quince Tart"; break;
31 case 9: codename = "Pie"; break;
32 case 8: codename = "Oreo"; break;
33 case 7: codename = "Nougat"; break;
34 case 6: codename = "Marshmallow"; break;
35 case 5: codename = "Lollipop"; break;
36 }
37 // clang-format on
38
39 if (codename) {
40 ffStrbufSetStatic(&os->codename, codename);
41 } else {
42 ffSettingsGetAndroidProperty("ro.build.version.codename", &os->codename);
43 }
44
45 ffSettingsGetAndroidProperty("ro.build.id", &os->buildID);
46}