diff options
Diffstat (limited to 'ShellPkg/Application/Shell/ShellProtocol.c')
-rw-r--r-- | ShellPkg/Application/Shell/ShellProtocol.c | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/ShellPkg/Application/Shell/ShellProtocol.c b/ShellPkg/Application/Shell/ShellProtocol.c index 39b0e78b32..a95da000f5 100644 --- a/ShellPkg/Application/Shell/ShellProtocol.c +++ b/ShellPkg/Application/Shell/ShellProtocol.c @@ -2852,36 +2852,28 @@ InternalEfiShellSetEnv( )
{
EFI_STATUS Status;
- UINT32 Atts;
- Atts = 0x0;
-
if (Value == NULL || StrLen(Value) == 0) {
Status = SHELL_DELETE_ENVIRONMENT_VARIABLE(Name);
if (!EFI_ERROR(Status)) {
ShellRemvoeEnvVarFromList(Name);
}
- return Status;
} else {
SHELL_DELETE_ENVIRONMENT_VARIABLE(Name);
- if (Volatile) {
- Status = SHELL_SET_ENVIRONMENT_VARIABLE_V(Name, StrSize(Value), Value);
- if (!EFI_ERROR(Status)) {
- Atts &= ~EFI_VARIABLE_NON_VOLATILE;
- Atts |= EFI_VARIABLE_BOOTSERVICE_ACCESS;
- ShellAddEnvVarToList(Name, Value, StrSize(Value), Atts);
+ Status = ShellAddEnvVarToList(
+ Name, Value, StrSize(Value),
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | (Volatile ? 0 : EFI_VARIABLE_NON_VOLATILE)
+ );
+ if (!EFI_ERROR (Status)) {
+ Status = Volatile
+ ? SHELL_SET_ENVIRONMENT_VARIABLE_V(Name, StrSize(Value), Value)
+ : SHELL_SET_ENVIRONMENT_VARIABLE_NV(Name, StrSize(Value), Value);
+ if (EFI_ERROR (Status)) {
+ ShellRemvoeEnvVarFromList(Name);
}
- return Status;
- } else {
- Status = SHELL_SET_ENVIRONMENT_VARIABLE_NV(Name, StrSize(Value), Value);
- if (!EFI_ERROR(Status)) {
- Atts |= EFI_VARIABLE_NON_VOLATILE;
- Atts |= EFI_VARIABLE_BOOTSERVICE_ACCESS;
- ShellAddEnvVarToList(Name, Value, StrSize(Value), Atts);
- }
- return Status;
}
}
+ return Status;
}
/**
|