OpenCore
1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
GrubEnv.c
Go to the documentation of this file.
1
8
#include <Library/BaseLib.h>
9
#include <
Library/OcDebugLogLib.h
>
10
#include "
LinuxBootInternal.h
"
11
12
/*
13
grubenv processing states.
14
*/
15
typedef
enum
GRUBENV_STATE_
{
16
GRUBENV_NEXT_LINE
,
17
GRUBENV_KEY
,
18
GRUBENV_VAR
,
19
GRUBENV_COMMENT
20
}
GRUBENV_STATE
;
21
22
EFI_STATUS
23
InternalProcessGrubEnv
(
24
IN OUT CHAR8 *Content,
25
IN CONST UINTN
Length
26
)
27
{
28
EFI_STATUS Status;
29
UINTN
Pos
;
30
UINTN KeyStart;
31
UINTN VarStart;
32
GRUBENV_STATE
State;
33
34
State =
GRUBENV_NEXT_LINE
;
35
36
//
37
// In a valid grubenv block the last comment, if present, is not
38
// \n terminated, but all var lines must be.
39
//
40
for
(
Pos
= 0;
Pos
<
Length
&& Content[
Pos
] !=
'\0'
;
Pos
++) {
41
switch
(State) {
42
case
GRUBENV_NEXT_LINE
:
43
if
(Content[
Pos
] ==
'#'
) {
44
State =
GRUBENV_COMMENT
;
45
}
else
{
46
KeyStart =
Pos
;
47
State =
GRUBENV_KEY
;
48
}
49
50
break
;
51
52
case
GRUBENV_COMMENT
:
53
if
(Content[
Pos
] ==
'\n'
) {
54
State =
GRUBENV_NEXT_LINE
;
55
}
56
57
break
;
58
59
case
GRUBENV_KEY
:
60
if
(Content[
Pos
] ==
'='
) {
61
Content[
Pos
] =
'\0'
;
62
VarStart =
Pos
+ 1;
63
State =
GRUBENV_VAR
;
64
}
65
66
break
;
67
68
case
GRUBENV_VAR
:
69
if
(Content[
Pos
] ==
'\n'
) {
70
Content[
Pos
] =
'\0'
;
71
Status =
InternalSetGrubVar
(&Content[KeyStart], &Content[VarStart],
VAR_ERR_NONE
);
72
if
(EFI_ERROR (Status)) {
73
return
Status;
74
}
75
76
State =
GRUBENV_NEXT_LINE
;
77
}
78
79
break
;
80
81
default
:
82
ASSERT
(FALSE);
83
break
;
84
}
85
}
86
87
ASSERT
(State ==
GRUBENV_COMMENT
|| State ==
GRUBENV_NEXT_LINE
);
88
89
return
EFI_SUCCESS;
90
}
Length
UINT64 Length
Definition
AppleRamDisk.h:68
GRUBENV_STATE_
GRUBENV_STATE_
Definition
GrubEnv.c:15
GRUBENV_KEY
@ GRUBENV_KEY
Definition
GrubEnv.c:17
GRUBENV_NEXT_LINE
@ GRUBENV_NEXT_LINE
Definition
GrubEnv.c:16
GRUBENV_COMMENT
@ GRUBENV_COMMENT
Definition
GrubEnv.c:19
GRUBENV_VAR
@ GRUBENV_VAR
Definition
GrubEnv.c:18
GRUBENV_STATE
enum GRUBENV_STATE_ GRUBENV_STATE
InternalProcessGrubEnv
EFI_STATUS InternalProcessGrubEnv(IN OUT CHAR8 *Content, IN CONST UINTN Length)
Definition
GrubEnv.c:23
InternalSetGrubVar
EFI_STATUS InternalSetGrubVar(CHAR8 *Key, CHAR8 *Value, UINTN Errors)
Definition
GrubVars.c:44
LinuxBootInternal.h
VAR_ERR_NONE
#define VAR_ERR_NONE
Definition
LinuxBootInternal.h:130
OcDebugLogLib.h
ASSERT
#define ASSERT(x)
Definition
coder.h:55
Pos
ush Pos
Definition
deflate.h:92
Platform
OpenLinuxBoot
GrubEnv.c
Generated by
1.12.0