Skip to content

Commit bc129a6

Browse files
committed
OS (Haiku): detect OS beta version
1 parent 1137e8d commit bc129a6

File tree

1 file changed

+77
-8
lines changed

1 file changed

+77
-8
lines changed

src/detection/os/os_haiku.c

Lines changed: 77 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,89 @@
11
#include "os.h"
2-
#include "common/io/io.h"
3-
42
#include <OS.h>
3+
#include <image.h>
4+
5+
// https://github.com/haiku/haiku/blob/e63683b2fb337d2034059a7e053c170eaf978142/headers/os/BeBuild.h#L36
6+
#ifndef B_HAIKU_VERSION_1_PRE_BETA_6
7+
#define B_HAIKU_VERSION_1_PRE_BETA_6 0x00000901
8+
#endif
9+
#ifndef B_HAIKU_VERSION_1_BETA_6
10+
#define B_HAIKU_VERSION_1_BETA_6 0x00000A00
11+
#endif
12+
#ifndef B_HAIKU_VERSION_1_PRE_BETA_7
13+
#define B_HAIKU_VERSION_1_PRE_BETA_7 0x00000A01
14+
#endif
15+
#ifndef B_HAIKU_VERSION_1_BETA_7
16+
#define B_HAIKU_VERSION_1_BETA_7 0x00000B00
17+
#endif
18+
#ifndef B_HAIKU_VERSION_1_PRE_BETA_8
19+
#define B_HAIKU_VERSION_1_PRE_BETA_8 0x00000B01
20+
#endif
21+
#ifndef B_HAIKU_VERSION_1_BETA_8
22+
#define B_HAIKU_VERSION_1_BETA_8 0x00000C00
23+
#endif
24+
#ifndef B_HAIKU_VERSION_1_PRE_BETA_9
25+
#define B_HAIKU_VERSION_1_PRE_BETA_9 0x00000C01
26+
#endif
27+
#ifndef B_HAIKU_VERSION_1_BETA_9
28+
#define B_HAIKU_VERSION_1_BETA_9 0x00000D00
29+
#endif
30+
#ifndef B_HAIKU_VERSION_1
31+
#define B_HAIKU_VERSION_1 0x00010000
32+
#endif
533

634
void ffDetectOSImpl(FFOSResult* os)
735
{
8-
system_info info;
36+
system_info sys;
937

1038
ffStrbufSetStatic(&os->name, "Haiku");
11-
ffStrbufSetStatic(&os->prettyName, "Haiku");
1239

1340
ffStrbufSetStatic(&os->id, "haiku");
1441

15-
if (get_system_info(&info) != B_OK)
16-
return;
17-
ffStrbufAppendF(&os->version, "R%ld", info.kernel_version);
42+
image_info image;
43+
int32 cookie = 0;
44+
while (get_next_image_info(B_SYSTEM_TEAM, &cookie, &image) == B_OK)
45+
{
46+
if (image.api_version > 0)
47+
{
48+
switch (image.api_version)
49+
{
50+
#define FF_TEST_HAIKU_VERSION(versionNum, versionStr) \
51+
case B_HAIKU_VERSION_ ## versionNum: \
52+
ffStrbufSetStatic(&os->version, versionStr); \
53+
break;
54+
55+
FF_TEST_HAIKU_VERSION(1_ALPHA_1, "R1A1")
56+
FF_TEST_HAIKU_VERSION(1_PRE_ALPHA_2, "R1AP2")
57+
FF_TEST_HAIKU_VERSION(1_ALPHA_2, "R1A2")
58+
FF_TEST_HAIKU_VERSION(1_PRE_ALPHA_3, "R1AP3")
59+
FF_TEST_HAIKU_VERSION(1_ALPHA_3, "R1A3")
60+
FF_TEST_HAIKU_VERSION(1_PRE_ALPHA_4, "R1AP4")
61+
FF_TEST_HAIKU_VERSION(1_ALPHA_4, "R1A4")
62+
FF_TEST_HAIKU_VERSION(1_PRE_BETA_1, "R1BP1")
63+
FF_TEST_HAIKU_VERSION(1_BETA_1, "R1B1")
64+
FF_TEST_HAIKU_VERSION(1_PRE_BETA_2, "R1BP2")
65+
FF_TEST_HAIKU_VERSION(1_BETA_2, "R1B2")
66+
FF_TEST_HAIKU_VERSION(1_PRE_BETA_3, "R1BP3")
67+
FF_TEST_HAIKU_VERSION(1_BETA_3, "R1B3")
68+
FF_TEST_HAIKU_VERSION(1_PRE_BETA_4, "R1BP4")
69+
FF_TEST_HAIKU_VERSION(1_BETA_4, "R1B4")
70+
FF_TEST_HAIKU_VERSION(1_PRE_BETA_5, "R1BP5")
71+
FF_TEST_HAIKU_VERSION(1_BETA_5, "R1B5")
72+
FF_TEST_HAIKU_VERSION(1_PRE_BETA_6, "R1BP6")
73+
FF_TEST_HAIKU_VERSION(1_BETA_6, "R1B6")
74+
FF_TEST_HAIKU_VERSION(1_PRE_BETA_7, "R1BP7")
75+
FF_TEST_HAIKU_VERSION(1_BETA_7, "R1B7")
76+
FF_TEST_HAIKU_VERSION(1_PRE_BETA_8, "R1BP8")
77+
FF_TEST_HAIKU_VERSION(1_BETA_8, "R1B8")
78+
}
79+
80+
break;
81+
}
82+
}
1883

19-
// TODO: check kernel resources?
84+
if (!os->version.length)
85+
{
86+
if (get_system_info(&sys) == B_OK)
87+
ffStrbufAppendF(&os->version, "R%ld", sys.kernel_version);
88+
}
2089
}

0 commit comments

Comments
 (0)