]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellLevel2CommandsLib/Set.c
ShellPkg: Apply uncrustify changes
[mirror_edk2.git] / ShellPkg / Library / UefiShellLevel2CommandsLib / Set.c
CommitLineData
a405b86d 1/** @file\r
2 Main file for attrib shell level 2 function.\r
3\r
c011b6c9 4 (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
ba0014b9 5 Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
56ba3746 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a405b86d 7\r
8**/\r
9\r
10#include "UefiShellLevel2CommandsLib.h"\r
11\r
12/**\r
13 Print out each environment variable registered with the Shell 2.0 GUID.\r
14\r
15 If you spawn a pre 2.0 shell from the Shell 2.0 the environment variable may not carry through.\r
16\r
17 @retval STATUS_SUCCESS the printout was sucessful\r
18 @return any return code from GetNextVariableName except EFI_NOT_FOUND\r
19**/\r
20SHELL_STATUS\r
47d20b54 21PrintAllShellEnvVars (\r
a405b86d 22 VOID\r
23 )\r
24{\r
47d20b54
MK
25 CONST CHAR16 *Value;\r
26 CONST CHAR16 *ConstEnvNameList;\r
a405b86d 27\r
47d20b54 28 ConstEnvNameList = gEfiShellProtocol->GetEnv (NULL);\r
a405b86d 29 if (ConstEnvNameList == NULL) {\r
30 return (SHELL_SUCCESS);\r
31 }\r
47d20b54
MK
32\r
33 while (*ConstEnvNameList != CHAR_NULL) {\r
34 Value = gEfiShellProtocol->GetEnv (ConstEnvNameList);\r
35 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SET_DISP), gShellLevel2HiiHandle, ConstEnvNameList, Value);\r
36 ConstEnvNameList += StrLen (ConstEnvNameList)+1;\r
a405b86d 37 }\r
38\r
39 return (SHELL_SUCCESS);\r
40}\r
41\r
47d20b54
MK
42STATIC CONST SHELL_PARAM_ITEM SetParamList[] = {\r
43 { L"-d", TypeValue },\r
44 { L"-v", TypeFlag },\r
45 { NULL, TypeMax }\r
46};\r
a405b86d 47\r
48/**\r
49 Function for 'set' command.\r
50\r
51 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
52 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
53**/\r
54SHELL_STATUS\r
55EFIAPI\r
56ShellCommandRunSet (\r
57 IN EFI_HANDLE ImageHandle,\r
58 IN EFI_SYSTEM_TABLE *SystemTable\r
59 )\r
60{\r
61 EFI_STATUS Status;\r
62 LIST_ENTRY *Package;\r
63 CONST CHAR16 *KeyName;\r
64 CONST CHAR16 *Value;\r
65 CHAR16 *ProblemParam;\r
66 SHELL_STATUS ShellStatus;\r
67\r
68 ProblemParam = NULL;\r
69 ShellStatus = SHELL_SUCCESS;\r
70\r
71 //\r
72 // initialize the shell lib (we must be in non-auto-init...)\r
73 //\r
47d20b54
MK
74 Status = ShellInitialize ();\r
75 ASSERT_EFI_ERROR (Status);\r
a405b86d 76\r
77 //\r
78 // Make sure globals are good...\r
79 //\r
47d20b54
MK
80 Status = CommandInit ();\r
81 ASSERT_EFI_ERROR (Status);\r
a405b86d 82\r
83 //\r
84 // parse the command line\r
85 //\r
86 Status = ShellCommandLineParse (SetParamList, &Package, &ProblemParam, TRUE);\r
47d20b54
MK
87 if (EFI_ERROR (Status)) {\r
88 if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {\r
89 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, L"set", ProblemParam);\r
90 FreePool (ProblemParam);\r
a405b86d 91 return (SHELL_INVALID_PARAMETER);\r
92 } else {\r
47d20b54 93 ASSERT (FALSE);\r
a405b86d 94 }\r
95 } else {\r
96 //\r
97 // check for "-?"\r
98 //\r
47d20b54
MK
99 if (ShellCommandLineGetFlag (Package, L"-?")) {\r
100 ASSERT (FALSE);\r
101 } else if (ShellCommandLineGetRawValue (Package, 3) != NULL) {\r
102 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"set");\r
a405b86d 103 ShellStatus = SHELL_INVALID_PARAMETER;\r
47d20b54
MK
104 } else if ((ShellCommandLineGetRawValue (Package, 1) != NULL) && ShellCommandLineGetFlag (Package, L"-d")) {\r
105 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"set");\r
a405b86d 106 ShellStatus = SHELL_INVALID_PARAMETER;\r
47d20b54 107 } else if (ShellCommandLineGetFlag (Package, L"-d")) {\r
a405b86d 108 //\r
109 // delete a environment variable\r
110 //\r
47d20b54 111 KeyName = ShellCommandLineGetValue (Package, L"-d");\r
a405b86d 112 if (KeyName == NULL) {\r
47d20b54 113 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellLevel2HiiHandle, L"set", L"-d");\r
a405b86d 114 ShellStatus = SHELL_INVALID_PARAMETER;\r
115 } else {\r
47d20b54
MK
116 Status = ShellSetEnvironmentVariable (KeyName, L"", ShellCommandLineGetFlag (Package, L"-v"));\r
117 if (EFI_ERROR (Status)) {\r
118 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SET_ND), gShellLevel2HiiHandle, L"set", KeyName);\r
a405b86d 119 ShellStatus = SHELL_DEVICE_ERROR;\r
120 }\r
121 }\r
47d20b54 122 } else if (ShellCommandLineGetRawValue (Package, 1) == NULL) {\r
a405b86d 123 //\r
124 // print out all current environment variables\r
125 //\r
47d20b54 126 return (PrintAllShellEnvVars ());\r
a405b86d 127 } else {\r
128 //\r
129 // we are either printing one or assigning one\r
130 //\r
47d20b54
MK
131 KeyName = ShellCommandLineGetRawValue (Package, 1);\r
132 Value = ShellCommandLineGetRawValue (Package, 2);\r
133 if ((KeyName != NULL) && (Value != NULL)) {\r
a405b86d 134 //\r
135 // assigning one\r
136 //\r
47d20b54
MK
137 Status = ShellSetEnvironmentVariable (KeyName, Value, ShellCommandLineGetFlag (Package, L"-v"));\r
138 if (EFI_ERROR (Status)) {\r
139 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SET_ERROR_SET), gShellLevel2HiiHandle, L"set", KeyName);\r
140 ShellStatus = (SHELL_STATUS)(Status & (~MAX_BIT));\r
938d65a5 141 }\r
a405b86d 142 } else {\r
143 if (KeyName != NULL) {\r
144 //\r
145 // print out value for this one only.\r
146 //\r
47d20b54 147 Value = ShellGetEnvironmentVariable (KeyName);\r
a405b86d 148 if (Value == NULL) {\r
47d20b54 149 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SET_NF), gShellLevel2HiiHandle, L"set", KeyName);\r
a405b86d 150 ShellStatus = SHELL_SUCCESS;\r
151 } else {\r
47d20b54 152 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SET_DISP), gShellLevel2HiiHandle, KeyName, Value);\r
a405b86d 153 ShellStatus = SHELL_SUCCESS;\r
154 }\r
155 } else {\r
47d20b54 156 ASSERT (FALSE);\r
a405b86d 157 }\r
158 }\r
159 }\r
160 }\r
161\r
162 //\r
163 // free the command line package\r
164 //\r
165 ShellCommandLineFreeVarList (Package);\r
166\r
167 return (ShellStatus);\r
168}\r