17#include <Library/BaseLib.h>
18#include <Library/BaseMemoryLib.h>
19#include <Library/DebugLib.h>
28 IN CONST CHAR8 *String
36 if ((*String ==
'\0') || (*String <
'0') || (*String >
'9')) {
42 for (Index = 0; Index < 3; ++Index) {
47 for (Index2 = 0; Index2 < 2; ++Index2) {
51 if ((*String !=
'.') && (*String !=
'\0')) {
55 if ((*String >=
'0') && (*String <=
'9')) {
56 VersionPart += *String++ -
'0';
57 }
else if ((*String !=
'.') && (*String !=
'\0')) {
74 IN UINT32 CurrentVersion OPTIONAL,
75 IN UINT32 MinVersion OPTIONAL,
76 IN UINT32 MaxVersion OPTIONAL
87 if (MaxVersion == 0) {
88 MaxVersion = CurrentVersion;
94 if (CurrentVersion == 0) {
95 return MaxVersion == 0;
101 if (CurrentVersion > MaxVersion) {
108 if (CurrentVersion < MinVersion) {
117 IN CONST UINT8 *Kernel,
124 CHAR8 DarwinVersion[32];
125 UINT32 DarwinVersionInteger;
129 (CONST UINT8 *)
"Darwin Kernel Version ",
138 DEBUG ((DEBUG_WARN,
"OCAK: Failed to determine kernel version\n"));
142 Offset +=
L_STR_LEN (
"Darwin Kernel Version ");
144 for (Index = 0; Index <
ARRAY_SIZE (DarwinVersion) - 1; ++Index, ++Offset) {
145 if ((Offset >= KernelSize) || (Kernel[Offset] ==
':')) {
149 DarwinVersion[Index] = (CHAR8)Kernel[Offset];
152 DarwinVersion[Index] =
'\0';
157 "OCAK: Read kernel version %a (%u)\n",
162 return DarwinVersionInteger;
#define ARRAY_SIZE(Array)
BOOLEAN OcMatchDarwinVersion(IN UINT32 CurrentVersion OPTIONAL, IN UINT32 MinVersion OPTIONAL, IN UINT32 MaxVersion OPTIONAL)
UINT32 OcKernelReadDarwinVersion(IN CONST UINT8 *Kernel, IN UINT32 KernelSize)
UINT32 OcParseDarwinVersion(IN CONST CHAR8 *String)
BOOLEAN FindPattern(IN CONST UINT8 *Pattern, IN CONST UINT8 *PatternMask OPTIONAL, IN CONST UINT32 PatternSize, IN CONST UINT8 *Data, IN UINT32 DataSize, IN OUT UINT32 *DataOff)
#define L_STR_LEN(String)