|
1 | 1 | #include "os.h" |
2 | | -#include "common/io/io.h" |
3 | | - |
4 | 2 | #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 |
5 | 33 |
|
6 | 34 | void ffDetectOSImpl(FFOSResult* os) |
7 | 35 | { |
8 | | - system_info info; |
| 36 | + system_info sys; |
9 | 37 |
|
10 | 38 | ffStrbufSetStatic(&os->name, "Haiku"); |
11 | | - ffStrbufSetStatic(&os->prettyName, "Haiku"); |
12 | 39 |
|
13 | 40 | ffStrbufSetStatic(&os->id, "haiku"); |
14 | 41 |
|
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 | + } |
18 | 83 |
|
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 | + } |
20 | 89 | } |
0 commit comments